Fix simple_motion_search with different bsize

simple_motion_search uses av1_build_inter_predictors_sby to build
prediction. But the function uses the width and height members in
xd->plane structs as the size of the prediction block instead of the
bsize parameter.

This patches sets the width and height parameters correctly.

Change-Id: Ic34e395fd9b9c041322b29a57f7689d0198c5e03
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index 9ce494a..a35c136 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -2098,18 +2098,24 @@
          active_v_edge(cpi, mi_col, cpi->common.seq_params.mib_size);
 }
 
-// Performs a motion search in SIMPLE_TRANSLATION mode using
-// reference frame ref. Returns the sad of the result
+// Performs a motion search in SIMPLE_TRANSLATION mode using reference frame
+// ref. Note that this sets the offset of mbmi, so we will need to reset it
+// after calling this function.
 static void simple_motion_search(AV1_COMP *const cpi, MACROBLOCK *x, int mi_row,
                                  int mi_col, BLOCK_SIZE bsize, int ref,
                                  int num_planes, int use_subpixel) {
+  assert(num_planes == 1 &&
+         "Currently simple_motion_search only supports luma plane");
+
   AV1_COMMON *const cm = &cpi->common;
   MACROBLOCKD *xd = &x->e_mbd;
-  MB_MODE_INFO *mbmi = xd->mi[0];
 
+  set_offsets(cpi, &xd->tile, x, mi_row, mi_col, bsize);
+
+  MB_MODE_INFO *mbmi = xd->mi[0];
+  mbmi->sb_type = bsize;
   mbmi->ref_frame[0] = ref;
   mbmi->ref_frame[1] = NONE_FRAME;
-  mbmi->sb_type = bsize;
   mbmi->motion_mode = SIMPLE_TRANSLATION;
 
   YV12_BUFFER_CONFIG *yv12 = get_ref_frame_buffer(cpi, ref);
@@ -2128,8 +2134,6 @@
   const int ref_idx = 0;
   int var;
 
-  av1_setup_src_planes(x, cpi->source, mi_row, mi_col, num_planes, bsize);
-
   if (scaled_ref_frame) {
     backup_yv12 = xd->plane[AOM_PLANE_Y].pre[ref_idx];
     av1_setup_pre_planes(xd, ref_idx, scaled_ref_frame, mi_row, mi_col, NULL,
@@ -3479,8 +3483,6 @@
   assert(mi_size_wide[bsize] == mi_size_high[bsize]);
 
   MACROBLOCKD *xd = &x->e_mbd;
-  DECLARE_ALIGNED(16, uint16_t, pred_buffer[MAX_SB_SQUARE]);
-  int pred_stride = 128;
 
   // Perform a single motion search in Y_PLANE to make a prediction
   const MV_REFERENCE_FRAME ref =
@@ -3488,12 +3490,6 @@
   const int use_subpixel = 0;
   const int num_planes = 1;
 
-  uint8_t *const pred_buf = (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH)
-                                ? CONVERT_TO_BYTEPTR(pred_buffer)
-                                : (uint8_t *)pred_buffer;
-  xd->plane[0].dst.buf = pred_buf;
-  xd->plane[0].dst.stride = pred_stride;
-
   simple_motion_search(cpi, x, mi_row, mi_col, bsize, ref, num_planes,
                        use_subpixel);
 
@@ -3507,11 +3503,13 @@
   // VARIANCE
   const uint8_t *src = x->plane[0].src.buf;
   const int src_stride = x->plane[0].src.stride;
+  const uint8_t *dst = xd->plane[0].dst.buf;
+  const int dst_stride = xd->plane[0].dst.stride;
   unsigned int sse = 0;
 
   // Whole block
   const unsigned int var =
-      cpi->fn_ptr[bsize].vf(src, src_stride, pred_buf, pred_stride, &sse);
+      cpi->fn_ptr[bsize].vf(src, src_stride, dst, dst_stride, &sse);
   features[f_idx++] = logf(1.0f + (float)var);
 
   // Regional
@@ -3523,10 +3521,9 @@
     const int x_idx = (r_idx & 1) * bw / 2;
     const int y_idx = (r_idx >> 1) * bh / 2;
     const int src_offset = y_idx * src_stride + x_idx;
-    const int pred_offset = y_idx * pred_stride + x_idx;
-    const unsigned int sub_var =
-        cpi->fn_ptr[subsize].vf(src + src_offset, src_stride,
-                                pred_buf + pred_offset, pred_stride, &sse);
+    const int dst_offset = y_idx * dst_stride + x_idx;
+    const unsigned int sub_var = cpi->fn_ptr[subsize].vf(
+        src + src_offset, src_stride, dst + dst_offset, dst_stride, &sse);
     const float var_ratio = (1.0f + (float)sub_var) / (4.0f + (float)var);
     features[f_idx++] = var_ratio;
   }