Mercurial > libavcodec.hg
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; |