[SCM] libav/experimental: Long term references behave different from short term in spatial direct MV calculation. Fixes FRExt_MMCO4_Sony_B / issue1251

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 16:59:28 UTC 2013


The following commit has been merged in the experimental branch:
commit 8dcbf4c7aa3e9d4ed8b7c0d516c313a51426ff66
Author: Michael Niedermayer <michaelni at gmx.at>
Date:   Sat Feb 6 02:55:58 2010 +0000

    Long term references behave different from short term in spatial direct MV calculation.
    Fixes FRExt_MMCO4_Sony_B / issue1251
    
    Originally committed as revision 21651 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/h264_direct.c b/libavcodec/h264_direct.c
index 24396bf..f347e25 100644
--- a/libavcodec/h264_direct.c
+++ b/libavcodec/h264_direct.c
@@ -263,7 +263,7 @@ single_col:
 
                 fill_rectangle(&h->ref_cache[0][scan8[i8*4]], 2, 2, 8, (uint8_t)ref[0], 1);
                 fill_rectangle(&h->ref_cache[1][scan8[i8*4]], 2, 2, 8, (uint8_t)ref[1], 1);
-                if(!IS_INTRA(mb_type_col[y8])
+                if(!IS_INTRA(mb_type_col[y8]) && !h->ref_list[1][0].long_ref
                    && (   (l1ref0[xy8] == 0 && FFABS(l1mv0[xy4][0]) <= 1 && FFABS(l1mv0[xy4][1]) <= 1)
                        || (l1ref0[xy8]  < 0 && l1ref1[xy8] == 0 && FFABS(l1mv1[xy4][0]) <= 1 && FFABS(l1mv1[xy4][1]) <= 1))){
                     if(ref[0] > 0)
@@ -282,7 +282,7 @@ single_col:
 
             fill_rectangle(&h->ref_cache[0][scan8[0]], 4, 4, 8, (uint8_t)ref[0], 1);
             fill_rectangle(&h->ref_cache[1][scan8[0]], 4, 4, 8, (uint8_t)ref[1], 1);
-            if(!IS_INTRA(mb_type_col[0])
+            if(!IS_INTRA(mb_type_col[0]) && !h->ref_list[1][0].long_ref
                && (   (l1ref0[0] == 0 && FFABS(l1mv0[0][0]) <= 1 && FFABS(l1mv0[0][1]) <= 1)
                    || (l1ref0[0]  < 0 && l1ref1[0] == 0 && FFABS(l1mv1[0][0]) <= 1 && FFABS(l1mv1[0][1]) <= 1
                        && (h->x264_build>33 || !h->x264_build)))){
@@ -311,7 +311,7 @@ single_col:
                 fill_rectangle(&h->ref_cache[1][scan8[i8*4]], 2, 2, 8, (uint8_t)ref[1], 1);
 
                 /* col_zero_flag */
-                if(!IS_INTRA(mb_type_col[0]) && (   l1ref0[x8 + y8*b8_stride] == 0
+                if(!IS_INTRA(mb_type_col[0]) && !h->ref_list[1][0].long_ref && (   l1ref0[x8 + y8*b8_stride] == 0
                                               || (l1ref0[x8 + y8*b8_stride] < 0 && l1ref1[x8 + y8*b8_stride] == 0
                                                   && (h->x264_build>33 || !h->x264_build)))){
                     const int16_t (*l1mv)[2]= l1ref0[x8 + y8*b8_stride] == 0 ? l1mv0 : l1mv1;

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list