shithub: libvpx

Download patch

ref: b2f4257c391d5112eb14381d32161f7fb287a237
parent: f9d5f86643244d8f1f9f64187098baa1a08b6d18
author: Yaowu Xu <yaowu@google.com>
date: Mon Oct 15 10:30:15 EDT 2012

Changed to use real pixels only for evaluating MVs

The commit changed to avoid using pixels from extended border in
in evaluating and select best reference motion vector.

Change-Id: I39b758889373e42ed2889d59744388e5b9c1a20a

--- a/vp8/common/findnearmv.c
+++ b/vp8/common/findnearmv.c
@@ -217,7 +217,7 @@
   unsigned char *above_ref;
   unsigned char *left_ref;
   int sad;
-  int sad_scores[MAX_MV_REFS];
+  int sad_scores[MAX_MV_REFS] = {0};
   int_mv sorted_mvs[MAX_MV_REFS];
   int zero_seen = FALSE;
 
@@ -259,12 +259,13 @@
       ((this_mv.as_mv.col + 3) >> 3):((this_mv.as_mv.col + 4) >> 3);
     offset = ref_y_stride * row_offset + col_offset;
 
-    sad = vp8_sad16x3_c(above_src, xd->dst.y_stride,
-                        above_ref + offset, ref_y_stride, INT_MAX);
-
-    sad += vp8_sad3x16_c(left_src, xd->dst.y_stride,
-                         left_ref + offset, ref_y_stride, INT_MAX);
-
+    sad = 0;
+    if (xd->up_available)
+      sad += vp8_sad16x3_c(above_src, xd->dst.y_stride,
+                           above_ref + offset, ref_y_stride, INT_MAX);
+    if (xd->left_available)
+      sad += vp8_sad3x16_c(left_src, xd->dst.y_stride,
+                           left_ref + offset, ref_y_stride, INT_MAX);
     // Add the entry to our list and then resort the list on score.
     sad_scores[i] = sad;
     sorted_mvs[i].as_int = this_mv.as_int;
--