Add subtract_block()

This function help us merge subtract block code in
av1_subtract_plane and av1_encode_block_intra.

Change-Id: Ie793d88a218f1082c6fe28900a521f461e34d564
diff --git a/av1/encoder/encodemb.c b/av1/encoder/encodemb.c
index 1c5289f..b378674 100644
--- a/av1/encoder/encodemb.c
+++ b/av1/encoder/encodemb.c
@@ -41,38 +41,49 @@
 // Check if one needs to use c version subtraction.
 static int check_subtract_block_size(int w, int h) { return w < 4 || h < 4; }
 
+static void subtract_block(const MACROBLOCKD *xd, int rows, int cols,
+                           int16_t *diff, ptrdiff_t diff_stride,
+                           const uint8_t *src8, ptrdiff_t src_stride,
+                           const uint8_t *pred8, ptrdiff_t pred_stride) {
+#if !CONFIG_AOM_HIGHBITDEPTH
+  (void)xd;
+#endif
+
+  if (check_subtract_block_size(rows, cols)) {
+#if CONFIG_AOM_HIGHBITDEPTH
+    if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
+      aom_highbd_subtract_block_c(rows, cols, diff, diff_stride, src8,
+                                  src_stride, pred8, pred_stride, xd->bd);
+      return;
+    }
+#endif  // CONFIG_AOM_HIGHBITDEPTH
+    aom_subtract_block_c(rows, cols, diff, diff_stride, src8, src_stride, pred8,
+                         pred_stride);
+
+    return;
+  }
+
+#if CONFIG_AOM_HIGHBITDEPTH
+  if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
+    aom_highbd_subtract_block(rows, cols, diff, diff_stride, src8, src_stride,
+                              pred8, pred_stride, xd->bd);
+    return;
+  }
+#endif  // CONFIG_AOM_HIGHBITDEPTH
+  aom_subtract_block(rows, cols, diff, diff_stride, src8, src_stride, pred8,
+                     pred_stride);
+}
+
 void av1_subtract_plane(MACROBLOCK *x, BLOCK_SIZE bsize, int plane) {
   struct macroblock_plane *const p = &x->plane[plane];
   const struct macroblockd_plane *const pd = &x->e_mbd.plane[plane];
   const BLOCK_SIZE plane_bsize = get_plane_block_size(bsize, pd);
   const int bw = block_size_wide[plane_bsize];
   const int bh = block_size_high[plane_bsize];
+  const MACROBLOCKD *xd = &x->e_mbd;
 
-  if (check_subtract_block_size(bw, bh)) {
-#if CONFIG_AOM_HIGHBITDEPTH
-    if (x->e_mbd.cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
-      aom_highbd_subtract_block_c(bh, bw, p->src_diff, bw, p->src.buf,
-                                  p->src.stride, pd->dst.buf, pd->dst.stride,
-                                  x->e_mbd.bd);
-      return;
-    }
-#endif  // CONFIG_AOM_HIGHBITDEPTH
-    aom_subtract_block_c(bh, bw, p->src_diff, bw, p->src.buf, p->src.stride,
-                         pd->dst.buf, pd->dst.stride);
-
-    return;
-  }
-
-#if CONFIG_AOM_HIGHBITDEPTH
-  if (x->e_mbd.cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
-    aom_highbd_subtract_block(bh, bw, p->src_diff, bw, p->src.buf,
-                              p->src.stride, pd->dst.buf, pd->dst.stride,
-                              x->e_mbd.bd);
-    return;
-  }
-#endif  // CONFIG_AOM_HIGHBITDEPTH
-  aom_subtract_block(bh, bw, p->src_diff, bw, p->src.buf, p->src.stride,
-                     pd->dst.buf, pd->dst.stride);
+  subtract_block(xd, bh, bw, p->src_diff, bw, p->src.buf, p->src.stride,
+                 pd->dst.buf, pd->dst.stride);
 }
 
 typedef struct av1_token_state {
@@ -1096,34 +1107,8 @@
                           mode, dst, dst_stride, dst, dst_stride, blk_col,
                           blk_row, plane);
 
-  if (check_subtract_block_size(tx1d_width, tx1d_height)) {
-#if CONFIG_AOM_HIGHBITDEPTH
-    if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
-      aom_highbd_subtract_block_c(tx1d_height, tx1d_width, src_diff,
-                                  diff_stride, src, src_stride, dst, dst_stride,
-                                  xd->bd);
-    } else {
-      aom_subtract_block_c(tx1d_height, tx1d_width, src_diff, diff_stride, src,
-                           src_stride, dst, dst_stride);
-    }
-#else
-    aom_subtract_block_c(tx1d_height, tx1d_width, src_diff, diff_stride, src,
-                         src_stride, dst, dst_stride);
-#endif  // CONFIG_AOM_HIGHBITDEPTH
-  } else {
-#if CONFIG_AOM_HIGHBITDEPTH
-    if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
-      aom_highbd_subtract_block(tx1d_height, tx1d_width, src_diff, diff_stride,
-                                src, src_stride, dst, dst_stride, xd->bd);
-    } else {
-      aom_subtract_block(tx1d_height, tx1d_width, src_diff, diff_stride, src,
-                         src_stride, dst, dst_stride);
-    }
-#else
-    aom_subtract_block(tx1d_height, tx1d_width, src_diff, diff_stride, src,
-                       src_stride, dst, dst_stride);
-#endif  // CONFIG_AOM_HIGHBITDEPTH
-  }
+  subtract_block(xd, tx1d_height, tx1d_width, src_diff, diff_stride, src,
+                 src_stride, dst, dst_stride);
 
 #if !CONFIG_PVQ
   const ENTROPY_CONTEXT *a = &args->ta[blk_col];