comparison rv10.c @ 1701:95b7ac3344df libavcodec

rv20 / h263 b frame fix
author michael
date Sun, 21 Dec 2003 20:06:59 +0000
parents 651b422d51d8
children 3ba5c493db6f
comparison
equal deleted inserted replaced
1700:651b422d51d8 1701:95b7ac3344df
376 } 376 }
377 } 377 }
378 378
379 if(s->avctx->has_b_frames){ 379 if(s->avctx->has_b_frames){
380 if (get_bits(&s->gb, 1)){ 380 if (get_bits(&s->gb, 1)){
381 av_log(s->avctx, AV_LOG_ERROR, "unknown bit3 set\n"); 381 // av_log(s->avctx, AV_LOG_ERROR, "unknown bit3 set\n");
382 // return -1; 382 // return -1;
383 } 383 }
384 seq= get_bits(&s->gb, 15); 384 seq= get_bits(&s->gb, 15);
385 }else 385 mb_pos= get_bits(&s->gb, av_log2(s->mb_num-1)+1);
386 s->mb_x= mb_pos % s->mb_width;
387 s->mb_y= mb_pos / s->mb_width;
388 }else{
386 seq= get_bits(&s->gb, 8)*128; 389 seq= get_bits(&s->gb, 8)*128;
390 mb_pos= ff_h263_decode_mba(s);
391 }
387 //printf("%d\n", seq); 392 //printf("%d\n", seq);
388 seq |= s->time &~0x7FFF; 393 seq |= s->time &~0x7FFF;
389 if(seq - s->time > 0x4000) seq -= 0x8000; 394 if(seq - s->time > 0x4000) seq -= 0x8000;
390 if(seq - s->time < -0x4000) seq += 0x8000; 395 if(seq - s->time < -0x4000) seq += 0x8000;
391 if(seq != s->time){ 396 if(seq != s->time){
402 } 407 }
403 } 408 }
404 } 409 }
405 // printf("%d %d %d %d %d\n", seq, (int)s->time, (int)s->last_non_b_time, s->pp_time, s->pb_time); 410 // printf("%d %d %d %d %d\n", seq, (int)s->time, (int)s->last_non_b_time, s->pp_time, s->pb_time);
406 411
407 mb_pos= ff_h263_decode_mba(s);
408 s->no_rounding= get_bits1(&s->gb); 412 s->no_rounding= get_bits1(&s->gb);
409 413
410 s->f_code = 1; 414 s->f_code = 1;
411 s->unrestricted_mv = 1; 415 s->unrestricted_mv = 1;
412 s->h263_aic= s->pict_type == I_TYPE; 416 s->h263_aic= s->pict_type == I_TYPE;
646 } 650 }
647 }else{ 651 }else{
648 if( rv10_decode_packet(avctx, buf, buf_size) < 0 ) 652 if( rv10_decode_packet(avctx, buf, buf_size) < 0 )
649 return -1; 653 return -1;
650 } 654 }
655
656 if(s->pict_type == B_TYPE){ //FIXME remove after cleaning mottion_val indexing
657 memset(s->current_picture.motion_val[0], 0, sizeof(int16_t)*2*(s->mb_width*2+2)*(s->mb_height*2+2));
658 }
651 659
652 if(s->mb_y>=s->mb_height){ 660 if(s->mb_y>=s->mb_height){
653 MPV_frame_end(s); 661 MPV_frame_end(s);
654 662
655 if(s->pict_type==B_TYPE || s->low_delay){ 663 if(s->pict_type==B_TYPE || s->low_delay){