comparison rv10.c @ 624:35353e4520d8 libavcodec

use extradata for h263_long_vector mode detection
author michaelni
date Wed, 28 Aug 2002 21:47:28 +0000
parents a1e54c24f221
children 3db611caee55
comparison
equal deleted inserted replaced
623:92e99e506920 624:35353e4520d8
288 if (get_bits(&s->gb, 1)) 288 if (get_bits(&s->gb, 1))
289 s->pict_type = P_TYPE; 289 s->pict_type = P_TYPE;
290 else 290 else
291 s->pict_type = I_TYPE; 291 s->pict_type = I_TYPE;
292 //printf("h:%d ver:%d\n",h,s->rv10_version); 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 pb_frame = get_bits(&s->gb, 1); 294 pb_frame = get_bits(&s->gb, 1);
295 295
296 #ifdef DEBUG 296 #ifdef DEBUG
297 printf("pict_type=%d pb_frame=%d\n", s->pict_type, pb_frame); 297 printf("pict_type=%d pb_frame=%d\n", s->pict_type, pb_frame);
298 #endif 298 #endif
333 s->mb_y = 0; 333 s->mb_y = 0;
334 mb_count = s->mb_width * s->mb_height; 334 mb_count = s->mb_width * s->mb_height;
335 } 335 }
336 unk= get_bits(&s->gb, 3); /* ignored */ 336 unk= get_bits(&s->gb, 3); /* ignored */
337 //printf("%d\n", unk); 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 s->f_code = 1; 338 s->f_code = 1;
340 s->unrestricted_mv = 1; 339 s->unrestricted_mv = 1;
341 #if 0 340
342 s->h263_long_vectors = 1;
343 #endif
344 return mb_count; 341 return mb_count;
345 } 342 }
346 343
347 static int rv10_decode_init(AVCodecContext *avctx) 344 static int rv10_decode_init(AVCodecContext *avctx)
348 { 345 {
354 351
355 s->width = avctx->width; 352 s->width = avctx->width;
356 s->height = avctx->height; 353 s->height = avctx->height;
357 354
358 s->h263_rv10 = 1; 355 s->h263_rv10 = 1;
359 s->rv10_version = avctx->sub_id; 356 if(avctx->extradata_size >= 8){
357 switch(((uint32_t*)avctx->extradata)[1]){
358 case 0x10000000:
359 s->rv10_version= 0;
360 s->h263_long_vectors=0;
361 break;
362 case 0x10003000:
363 s->rv10_version= 3;
364 s->h263_long_vectors=1;
365 break;
366 case 0x10003001:
367 s->rv10_version= 3;
368 s->h263_long_vectors=0;
369 break;
370 default:
371 fprintf(stderr, "unknown header %X\n", ((uint32_t*)avctx->extradata)[1]);
372 }
373 }else{
374 // for backward compatibility
375 s->rv10_version= avctx->sub_id;
376 }
360 377
361 s->flags= avctx->flags; 378 s->flags= avctx->flags;
362 379
363 if (MPV_common_init(s) < 0) 380 if (MPV_common_init(s) < 0)
364 return -1; 381 return -1;