[FFmpeg-cvslog] r17947 - trunk/libavcodec/rv34.c
kostya
subversion
Fri Mar 13 14:48:46 CET 2009
Author: kostya
Date: Fri Mar 13 14:48:44 2009
New Revision: 17947
Log:
Fix direct and skip MB motion compensation in RV4:
two conditions were incomplete and zeroing motion
vectors was performed only on half of them.
Modified:
trunk/libavcodec/rv34.c
Modified: trunk/libavcodec/rv34.c
==============================================================================
--- trunk/libavcodec/rv34.c Fri Mar 13 14:37:35 2009 (r17946)
+++ trunk/libavcodec/rv34.c Fri Mar 13 14:48:44 2009 (r17947)
@@ -787,15 +787,16 @@ static int rv34_decode_mv(RV34DecContext
case RV34_MB_B_DIRECT:
//surprisingly, it uses motion scheme from next reference frame
next_bt = s->next_picture_ptr->mb_type[s->mb_x + s->mb_y * s->mb_stride];
- if(IS_INTRA(next_bt))
+ if(IS_INTRA(next_bt) || IS_SKIP(next_bt)){
fill_rectangle(s->current_picture_ptr->motion_val[0][s->mb_x * 2 + s->mb_y * 2 * s->b8_stride], 2, 2, s->b8_stride, 0, 4);
- else
+ fill_rectangle(s->current_picture_ptr->motion_val[1][s->mb_x * 2 + s->mb_y * 2 * s->b8_stride], 2, 2, s->b8_stride, 0, 4);
+ }else
for(j = 0; j < 2; j++)
for(i = 0; i < 2; i++)
for(k = 0; k < 2; k++)
for(l = 0; l < 2; l++)
s->current_picture_ptr->motion_val[l][mv_pos + i + j*s->b8_stride][k] = calc_add_mv(r, l, s->next_picture_ptr->motion_val[0][mv_pos + i + j*s->b8_stride][k]);
- if(IS_16X16(next_bt)) //we can use whole macroblock MC
+ if(!(IS_16X8(next_bt) || IS_8X16(next_bt) || IS_8X8(next_bt))) //we can use whole macroblock MC
rv34_mc_2mv(r, block_type);
else
rv34_mc_2mv_skip(r);
More information about the ffmpeg-cvslog
mailing list