Currently, any samples in the final frame are not decoded because they are
only represented by one frame instead of two. So we encode two final frames to
cover both the analysis delay and the MDCT delay.
---
As an example, if you encode an input file with 1024 samples with current git,
the decoded output from avconv will just be silence, and the output from faad
will be an empty wav file.

 libavcodec/aacenc.c |   12 +++++-------
 1 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/libavcodec/aacenc.c b/libavcodec/aacenc.c
index db8308d..c0d1930 100644
--- a/libavcodec/aacenc.c
+++ b/libavcodec/aacenc.c
@@ -509,14 +509,12 @@ static int aac_encode_frame(AVCodecContext *avctx,
     int chan_el_counter[4];
     FFPsyWindowInfo windows[AAC_MAX_CHANNELS];
 
-    if (s->last_frame)
+    if (s->last_frame == 2)
         return 0;
 
-    if (data) {
-        deinterleave_input_samples(s, data, avctx->frame_size);
-        if (s->psypp)
-            ff_psy_preprocess(s->psypp, s->planar_samples, s->channels);
-    }
+    deinterleave_input_samples(s, data, data ? avctx->frame_size : 0);
+    if (s->psypp)
+        ff_psy_preprocess(s->psypp, s->planar_samples, s->channels);
 
     if (!avctx->frame_number)
         return 0;
@@ -647,7 +645,7 @@ static int aac_encode_frame(AVCodecContext *avctx,
     }
 
     if (!data)
-        s->last_frame = 1;
+        s->last_frame++;
 
     return put_bits_count(&s->pb)>>3;
 }
-- 
1.7.1

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to