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