shithub: libvpx

Download patch

ref: 6cceed09cf5480394621bb93fd1faf1e51092650
parent: deaf661f4548fe29c322801e169bfcfb14f4997a
parent: cce7020f2ce5bb8e4d493705d83c0dfa1f678309
author: Jingning Han <jingning@google.com>
date: Fri Mar 13 08:57:49 EDT 2015

Merge "Use sdx4df to do 1-step refinement"

--- a/vp9/encoder/vp9_mcomp.c
+++ b/vp9/encoder/vp9_mcomp.c
@@ -1803,7 +1803,7 @@
   const int ref_stride = xd->plane[0].pre[0].stride;
   uint8_t const *ref_buf, *src_buf;
   MV *tmp_mv = &xd->mi[0].src_mi->mbmi.mv[0].as_mv;
-  int best_sad, tmp_sad, this_sad[5];
+  unsigned int best_sad, tmp_sad, this_sad[4];
   MV this_mv;
 
 #if CONFIG_VP9_HIGHBITDEPTH
@@ -1842,16 +1842,23 @@
   tmp_mv->col = vector_match(hbuf, src_hbuf, b_width_log2_lookup[bsize]);
   tmp_mv->row = vector_match(vbuf, src_vbuf, b_height_log2_lookup[bsize]);
 
-  best_sad = INT_MAX;
   this_mv = *tmp_mv;
   src_buf = x->plane[0].src.buf;
-  for (idx = 0; idx < 5; ++idx) {
-    ref_buf = xd->plane[0].pre[0].buf +
-        (search_pos[idx].row + this_mv.row) * ref_stride +
-        (search_pos[idx].col + this_mv.col);
+  ref_buf = xd->plane[0].pre[0].buf + this_mv.row * ref_stride + this_mv.col;
+  best_sad = cpi->fn_ptr[bsize].sdf(src_buf, src_stride, ref_buf, ref_stride);
 
-    this_sad[idx] = cpi->fn_ptr[bsize].sdf(src_buf, src_stride,
-                                           ref_buf, ref_stride);
+  {
+    const uint8_t * const pos[4] = {
+        ref_buf - ref_stride,
+        ref_buf - 1,
+        ref_buf + 1,
+        ref_buf + ref_stride,
+    };
+
+    cpi->fn_ptr[bsize].sdx4df(src_buf, src_stride, pos, ref_stride, this_sad);
+  }
+
+  for (idx = 0; idx < 4; ++idx) {
     if (this_sad[idx] < best_sad) {
       best_sad = this_sad[idx];
       tmp_mv->row = search_pos[idx].row + this_mv.row;
@@ -1859,12 +1866,12 @@
     }
   }
 
-  if (this_sad[0] < this_sad[4])
+  if (this_sad[0] < this_sad[3])
     this_mv.row -= 1;
   else
     this_mv.row += 1;
 
-  if (this_sad[1] < this_sad[3])
+  if (this_sad[1] < this_sad[2])
     this_mv.col -= 1;
   else
     this_mv.col += 1;