Mercurial > libavcodec.hg
diff 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 |
line wrap: on
line diff
--- a/rv10.c Fri Dec 19 00:47:36 2003 +0000 +++ b/rv10.c Sun Dec 21 20:06:59 2003 +0000 @@ -378,12 +378,17 @@ if(s->avctx->has_b_frames){ if (get_bits(&s->gb, 1)){ - av_log(s->avctx, AV_LOG_ERROR, "unknown bit3 set\n"); +// av_log(s->avctx, AV_LOG_ERROR, "unknown bit3 set\n"); // return -1; } seq= get_bits(&s->gb, 15); - }else + mb_pos= get_bits(&s->gb, av_log2(s->mb_num-1)+1); + s->mb_x= mb_pos % s->mb_width; + s->mb_y= mb_pos / s->mb_width; + }else{ seq= get_bits(&s->gb, 8)*128; + mb_pos= ff_h263_decode_mba(s); + } //printf("%d\n", seq); seq |= s->time &~0x7FFF; if(seq - s->time > 0x4000) seq -= 0x8000; @@ -404,7 +409,6 @@ } // printf("%d %d %d %d %d\n", seq, (int)s->time, (int)s->last_non_b_time, s->pp_time, s->pb_time); - mb_pos= ff_h263_decode_mba(s); s->no_rounding= get_bits1(&s->gb); s->f_code = 1; @@ -648,6 +652,10 @@ if( rv10_decode_packet(avctx, buf, buf_size) < 0 ) return -1; } + + if(s->pict_type == B_TYPE){ //FIXME remove after cleaning mottion_val indexing + memset(s->current_picture.motion_val[0], 0, sizeof(int16_t)*2*(s->mb_width*2+2)*(s->mb_height*2+2)); + } if(s->mb_y>=s->mb_height){ MPV_frame_end(s);