[SCM] libav/experimental: Fix direct and skip MB motion compensation in RV4: two conditions were incomplete and zeroing motion vectors was performed only on half of them.

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 16:41:14 UTC 2013


The following commit has been merged in the experimental branch:
commit 923ed9748ce6cb91c1a25928efc746b6b77fccb7
Author: Kostya Shishkov <kostya.shishkov at gmail.com>
Date:   Fri Mar 13 13:48:44 2009 +0000

    Fix direct and skip MB motion compensation in RV4:
    two conditions were incomplete and zeroing motion
    vectors was performed only on half of them.
    
    Originally committed as revision 17947 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/rv34.c b/libavcodec/rv34.c
index c227707..ee10528 100644
--- a/libavcodec/rv34.c
+++ b/libavcodec/rv34.c
@@ -787,15 +787,16 @@ static int rv34_decode_mv(RV34DecContext *r, int block_type)
     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);

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list