Browse code

use extradata for h263_long_vector mode detection

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

Michael Niedermayer authored on 2002/08/29 06:47:28
Showing 1 changed files
... ...
@@ -290,7 +290,7 @@ static int rv10_decode_picture_header(MpegEncContext *s)
290 290
     else
291 291
         s->pict_type = I_TYPE;
292 292
 //printf("h:%d ver:%d\n",h,s->rv10_version);
293
-if(!marker) printf("marker missing\n");
293
+    if(!marker) printf("marker missing\n");
294 294
     pb_frame = get_bits(&s->gb, 1);
295 295
 
296 296
 #ifdef DEBUG
... ...
@@ -335,12 +335,9 @@ if(!marker) printf("marker missing\n");
335 335
     }
336 336
     unk= get_bits(&s->gb, 3);	/* ignored */
337 337
 //printf("%d\n", unk);
338
-s->h263_long_vectors =  s->mb_num<100; //FIXME check if this is ok (100 i just guessed)
339 338
     s->f_code = 1;
340 339
     s->unrestricted_mv = 1;
341
-#if 0
342
-    s->h263_long_vectors = 1;
343
-#endif
340
+
344 341
     return mb_count;
345 342
 }
346 343
 
... ...
@@ -356,7 +353,27 @@ static int rv10_decode_init(AVCodecContext *avctx)
356 356
     s->height = avctx->height;
357 357
 
358 358
     s->h263_rv10 = 1;
359
-    s->rv10_version = avctx->sub_id;
359
+    if(avctx->extradata_size >= 8){
360
+        switch(((uint32_t*)avctx->extradata)[1]){
361
+        case 0x10000000:
362
+            s->rv10_version= 0;
363
+            s->h263_long_vectors=0;
364
+            break;
365
+        case 0x10003000:
366
+            s->rv10_version= 3;
367
+            s->h263_long_vectors=1;
368
+            break;
369
+        case 0x10003001:
370
+            s->rv10_version= 3;
371
+            s->h263_long_vectors=0;
372
+            break;
373
+        default:
374
+            fprintf(stderr, "unknown header %X\n", ((uint32_t*)avctx->extradata)[1]);
375
+        }
376
+    }else{
377
+    //  for backward compatibility 
378
+        s->rv10_version= avctx->sub_id;
379
+    }
360 380
     
361 381
     s->flags= avctx->flags;
362 382