aaclatm: Eliminate dummy packets due to muxlength calculation.
authorAlex Converse <alex.converse@gmail.com>
Sun, 7 Nov 2010 03:05:12 +0000 (03:05 +0000)
committerAlex Converse <alex.converse@gmail.com>
Sun, 7 Nov 2010 03:05:12 +0000 (03:05 +0000)
Muxlength does not include the 3 bytes of AudioSyncStream() before the
AudioMuxElement(). If these three bytes are not accounted for the last three
bytes of the LATM packet are sent back to the decoder again.

Fixes issue244/mux2.share.ts

Originally committed as revision 25685 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/aacdec.c

index ab3a49aff7006b508aa022a4af36418684b934cb..c6e5951c6afd2df7f28db62ab663f2acfb9cee87 100644 (file)
@@ -2310,9 +2310,9 @@ static int latm_decode_frame(AVCodecContext *avctx, void *out, int *out_size,
     if (get_bits(&gb, 11) != LOAS_SYNC_WORD)
         return AVERROR_INVALIDDATA;
 
-    muxlength = get_bits(&gb, 13);
+    muxlength = get_bits(&gb, 13) + 3;
     // not enough data, the parser should have sorted this
-    if (muxlength+3 > avpkt->size)
+    if (muxlength > avpkt->size)
         return AVERROR_INVALIDDATA;
 
     if ((err = read_audio_mux_element(latmctx, &gb)) < 0)