comparison rv10.c @ 2376:ed9bb4a45afa libavcodec

next try at fixing rv20 decoding
author michael
date Sun, 05 Dec 2004 23:21:39 +0000
parents 26560d4fdb1f
children 1f56314b3770
comparison
equal deleted inserted replaced
2375:24d3a50d1b8b 2376:ed9bb4a45afa
348 av_log(s->avctx, AV_LOG_DEBUG, "%d", get_bits1(&gb)); 348 av_log(s->avctx, AV_LOG_DEBUG, "%d", get_bits1(&gb));
349 if(i%4==3) av_log(s->avctx, AV_LOG_DEBUG, " "); 349 if(i%4==3) av_log(s->avctx, AV_LOG_DEBUG, " ");
350 } 350 }
351 av_log(s->avctx, AV_LOG_DEBUG, "\n"); 351 av_log(s->avctx, AV_LOG_DEBUG, "\n");
352 #endif 352 #endif
353 #if 0
354 for(i=0; i<s->avctx->extradata_size; i++){
355 av_log(s->avctx, AV_LOG_DEBUG, "%2X ", ((uint8_t*)s->avctx->extradata)[i]);
356 if(i%4==3) av_log(s->avctx, AV_LOG_DEBUG, " ");
357 }
358 av_log(s->avctx, AV_LOG_DEBUG, "\n");
359 #endif
353 360
354 if(s->avctx->sub_id == 0x30202002 || s->avctx->sub_id == 0x30203002){ 361 if(s->avctx->sub_id == 0x30202002 || s->avctx->sub_id == 0x30203002){
355 if (get_bits(&s->gb, 3)){ 362 if (get_bits(&s->gb, 3)){
356 av_log(s->avctx, AV_LOG_ERROR, "unknown triplet set\n"); 363 av_log(s->avctx, AV_LOG_ERROR, "unknown triplet set\n");
357 return -1; 364 return -1;
394 if(s->avctx->has_b_frames){ 401 if(s->avctx->has_b_frames){
395 if (get_bits(&s->gb, 1)){ 402 if (get_bits(&s->gb, 1)){
396 // av_log(s->avctx, AV_LOG_ERROR, "unknown bit3 set\n"); 403 // av_log(s->avctx, AV_LOG_ERROR, "unknown bit3 set\n");
397 // return -1; 404 // return -1;
398 } 405 }
399 seq= get_bits(&s->gb, 15); 406 seq= get_bits(&s->gb, 14)<<1;
400 if (s->avctx->sub_id == 0x20201002 && 0 && get_bits(&s->gb, 1)){ 407
401 av_log(s->avctx, AV_LOG_ERROR, "unknown bit4 set\n"); 408 if(s->avctx->extradata_size >= 4 && ((uint8_t*)s->avctx->extradata)[1]&1){
402 // return -1; 409 get_bits(&s->gb, 1);
403 } 410 }
404 if(s->avctx->sub_id == 0x20201002){ 411 if(s->avctx->extradata_size >= 4 && ((uint8_t*)s->avctx->extradata)[1]&2){
405 mb_pos= ff_h263_decode_mba(s); 412 get_bits(&s->gb, 1);
406 }else{ 413 }
407 mb_pos= get_bits(&s->gb, av_log2(s->mb_num-1)+1); 414 if(s->avctx->extradata_size >= 4 && ((uint8_t*)s->avctx->extradata)[1]&4){
408 s->mb_x= mb_pos % s->mb_width; 415 get_bits(&s->gb, 2);
409 s->mb_y= mb_pos / s->mb_width; 416 }
410 } 417
418 mb_pos= get_bits(&s->gb, av_log2(s->mb_num-1)+1);
419 s->mb_x= mb_pos % s->mb_width;
420 s->mb_y= mb_pos / s->mb_width;
411 }else{ 421 }else{
412 seq= get_bits(&s->gb, 8)*128; 422 seq= get_bits(&s->gb, 8)*128;
413 mb_pos= ff_h263_decode_mba(s); 423 mb_pos= ff_h263_decode_mba(s);
414 } 424 }
415 //av_log(s->avctx, AV_LOG_DEBUG, "%d\n", seq); 425 //av_log(s->avctx, AV_LOG_DEBUG, "%d\n", seq);
506 s->avctx->has_b_frames=1; 516 s->avctx->has_b_frames=1;
507 break; 517 break;
508 default: 518 default:
509 av_log(s->avctx, AV_LOG_ERROR, "unknown header %X\n", avctx->sub_id); 519 av_log(s->avctx, AV_LOG_ERROR, "unknown header %X\n", avctx->sub_id);
510 } 520 }
511 //av_log(avctx, AV_LOG_DEBUG, "ver:%X\n", avctx->sub_id); 521
522 if(avctx->debug & FF_DEBUG_PICT_INFO){
523 av_log(avctx, AV_LOG_DEBUG, "ver:%X ver0:%X\n", avctx->sub_id, avctx->extradata_size >= 4 ? ((uint32_t*)avctx->extradata)[0] : -1);
524 }
525
512 if (MPV_common_init(s) < 0) 526 if (MPV_common_init(s) < 0)
513 return -1; 527 return -1;
514 528
515 h263_decode_init_vlc(s); 529 h263_decode_init_vlc(s);
516 530