smarten up the SVQ3 extradata decoder without changing the external API
authorMike Melanson <mike@multimedia.cx>
Sat, 13 Mar 2004 20:07:38 +0000 (20:07 +0000)
committerMike Melanson <mike@multimedia.cx>
Sat, 13 Mar 2004 20:07:38 +0000 (20:07 +0000)
Originally committed as revision 2878 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/svq3.c

index c8720c0..6a53ed2 100644 (file)
@@ -766,6 +766,7 @@ static int svq3_decode_frame (AVCodecContext *avctx,
   MpegEncContext *const s = avctx->priv_data;
   H264Context *const h = avctx->priv_data;
   int m, mb_type;
+  unsigned char *extradata;
 
   *data_size = 0;
 
@@ -790,13 +791,20 @@ static int svq3_decode_frame (AVCodecContext *avctx,
 
     alloc_tables (h);
 
-    if (avctx->extradata && avctx->extradata_size >= 0x64
-       && !memcmp (avctx->extradata, "SVQ3", 4)) {
+    /* prowl for the "SEQH" marker in the extradata */
+    extradata = (unsigned char *)avctx->extradata;
+    for (m = 0; m < avctx->extradata_size; m++) {
+      if (!memcmp (extradata, "SEQH", 4))
+        break;
+      extradata++;
+    }
+
+    /* if a match was found, parse the extra data */
+    if (!memcmp (extradata, "SEQH", 4)) {
 
       GetBitContext gb;
 
-      init_get_bits (&gb, (uint8_t *) avctx->extradata + 0x62,
-                    8*(avctx->extradata_size - 0x62));
+      init_get_bits (&gb, extradata + 0x8, 8*8);
 
       /* 'frame size code' and optional 'width, height' */
       if (get_bits (&gb, 3) == 7) {