diff --git a/libavcodec/h263.c b/libavcodec/h263.c index 6b9e559c1e..b02bace0c0 100644 --- a/libavcodec/h263.c +++ b/libavcodec/h263.c @@ -3866,8 +3866,15 @@ int ff_h263_decode_mb(MpegEncContext *s, } } + /* decode each block */ + for (i = 0; i < 6; i++) { + if (h263_decode_block(s, block[i], i, cbp&32) < 0) + return -1; + cbp+=cbp; + } + if(s->obmc){ - if(s->pict_type == P_TYPE && s->mb_x+1mb_width) + if(s->pict_type == P_TYPE && s->mb_x+1mb_width && s->mb_num_left != 1) preview_obmc(s); } } else if(s->pict_type==B_TYPE) { @@ -3957,6 +3964,13 @@ int ff_h263_decode_mb(MpegEncContext *s, } s->current_picture.mb_type[xy]= mb_type; + + /* decode each block */ + for (i = 0; i < 6; i++) { + if (h263_decode_block(s, block[i], i, cbp&32) < 0) + return -1; + cbp+=cbp; + } } else { /* I-Frame */ do{ cbpc = get_vlc2(&s->gb, intra_MCBPC_vlc.table, INTRA_MCBPC_VLC_BITS, 2); @@ -3989,13 +4003,13 @@ intra: if (dquant) { h263_decode_dquant(s); } - } - /* decode each block */ - for (i = 0; i < 6; i++) { - if (h263_decode_block(s, block[i], i, cbp&32) < 0) - return -1; - cbp+=cbp; + /* decode each block */ + for (i = 0; i < 6; i++) { + if (h263_decode_block(s, block[i], i, cbp&32) < 0) + return -1; + cbp+=cbp; + } } end: diff --git a/libavcodec/rv10.c b/libavcodec/rv10.c index 3b63464653..06f2b4e7d0 100644 --- a/libavcodec/rv10.c +++ b/libavcodec/rv10.c @@ -449,6 +449,12 @@ static int rv10_decode_init(AVCodecContext *avctx) s->h263_long_vectors=0; s->low_delay=1; break; + case 0x10002000: + s->rv10_version= 3; + s->h263_long_vectors=1; + s->low_delay=1; + s->obmc=1; + break; case 0x10003000: s->rv10_version= 3; s->h263_long_vectors=1; @@ -586,13 +592,14 @@ static int rv10_decode_packet(AVCodecContext *avctx, s->block_wrap[5]= s->mb_width + 2; ff_init_block_index(s); /* decode each macroblock */ - for(i=0;imb_num_left= mb_count; s->mb_num_left>0; s->mb_num_left--) { int ret; ff_update_block_index(s); #ifdef DEBUG printf("**mb x=%d y=%d\n", s->mb_x, s->mb_y); #endif - + s->dsp.clear_blocks(s->block[0]); s->mv_dir = MV_DIR_FORWARD; s->mv_type = MV_TYPE_16X16;