DCA: Occasionally a false XCH sync word can turn up after the core DTS data,
authorNick Brereton <nick@nbrereton.net>
Mon, 5 Jul 2010 08:16:43 +0000 (08:16 +0000)
committerBenjamin Larsson <banan@ludd.ltu.se>
Mon, 5 Jul 2010 08:16:43 +0000 (08:16 +0000)
to verify the sync word the extension fsize field should be compared to
the core data length field.

Patch by nick.nbrereton@net

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

libavcodec/dca.c

index 989c6a2..4b232c7 100644 (file)
@@ -1298,7 +1298,13 @@ static int dca_decode_frame(AVCodecContext * avctx,
         switch(bits) {
         case 0x5a5a5a5a: {
             int ext_base_ch = s->prim_channels;
-            int ext_amode;
+            int ext_amode, xch_fsize;
+
+            /* validate sync word using XCHFSIZE field */
+            xch_fsize = show_bits(&s->gb, 10);
+            if((s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + xch_fsize) &&
+               (s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + xch_fsize + 1))
+                continue;
 
             /* skip length-to-end-of-frame field for the moment */
             skip_bits(&s->gb, 10);