mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
rv10/obmc fixes
Originally committed as revision 2768 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
99683a3077
commit
8a36717afc
@ -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+1<s->mb_width)
|
||||
if(s->pict_type == P_TYPE && s->mb_x+1<s->mb_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:
|
||||
|
||||
|
@ -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;i<mb_count;i++) {
|
||||
|
||||
for(s->mb_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;
|
||||
|
Loading…
Reference in New Issue
Block a user