Introduce dec_calc_subpel_params_and_extend() func

In preparation for refactoring build_inter_predictors() and
dec_build_inter_predictors() functions.

BUG=aomedia:2635

Change-Id: I3bd52e68ab762b27eef71b30a91ce91489b2836b
(Partial cherry pick from experimental branch commit:
e36804fd8e99be6a875e5de3cb5d2b325402adf6)
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index 4495f1c..a91c04b 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -619,11 +619,36 @@
   }
 }
 
-static INLINE void dec_build_inter_predictors(const AV1_COMMON *cm,
-                                              MACROBLOCKD *xd, int plane,
-                                              const MB_MODE_INFO *mi,
-                                              int build_for_obmc, int bw,
-                                              int bh, int mi_x, int mi_y) {
+static void dec_calc_subpel_params_and_extend(
+    MACROBLOCKD *xd, const struct scale_factors *const sf, const MV mv,
+    int plane, const MB_MODE_INFO *mi, int pre_x, int pre_y, int x, int y,
+    struct buf_2d *const pre_buf, int bw, int bh, int mi_x, int mi_y, int ref,
+    int is_intrabc, int build_for_obmc,
+    const WarpTypesAllowed *const warp_types, uint8_t **pre,
+    SubpelParams *subpel_params, int *src_stride) {
+  PadBlock block;
+  MV32 scaled_mv;
+  int subpel_x_mv, subpel_y_mv;
+  dec_calc_subpel_params(xd, sf, mv, plane, pre_x, pre_y, x, y, pre_buf,
+                         subpel_params, bw, bh, &block, mi_x, mi_y, &scaled_mv,
+                         &subpel_x_mv, &subpel_y_mv);
+  *pre = pre_buf->buf0 + block.y0 * pre_buf->stride + block.x0;
+  *src_stride = pre_buf->stride;
+  const int highbd = is_cur_buf_hbd(xd);
+  const int do_warp =
+      bw >= 8 && bh >= 8 &&
+      av1_allow_warp(mi, warp_types, &xd->global_motion[mi->ref_frame[ref]],
+                     build_for_obmc, sf, NULL) &&
+      (xd->cur_frame_force_integer_mv == 0);
+  extend_mc_border(sf, pre_buf, scaled_mv, block, subpel_x_mv, subpel_y_mv,
+                   do_warp, is_intrabc, highbd, xd->mc_buf[ref], pre,
+                   src_stride);
+}
+
+static void dec_build_inter_predictors(const AV1_COMMON *cm, MACROBLOCKD *xd,
+                                       int plane, const MB_MODE_INFO *mi,
+                                       int build_for_obmc, int bw, int bh,
+                                       int mi_x, int mi_y) {
   struct macroblockd_plane *const pd = &xd->plane[plane];
   int is_compound = has_second_ref(mi);
   int ref;
@@ -677,7 +702,6 @@
     const struct buf_2d orig_pred_buf[2] = { pd->pre[0], pd->pre[1] };
 
     int row = row_start;
-    int src_stride;
     ref = 0;
     for (int y = 0; y < b8_h; y += b4_h) {
       int col = col_start;
@@ -713,24 +737,19 @@
 
         const MV mv = this_mbmi->mv[ref].as_mv;
 
-        uint8_t *pre;
+        const WarpTypesAllowed warp_types = {
+          is_global[ref], this_mbmi->motion_mode == WARPED_CAUSAL
+        };
+
         SubpelParams subpel_params;
-        PadBlock block;
-        MV32 scaled_mv;
-        int subpel_x_mv, subpel_y_mv;
-        int highbd;
+        uint8_t *pre;
+        int src_stride;
+        dec_calc_subpel_params_and_extend(
+            xd, sf, mv, plane, mi, pre_x, pre_y, x, y, pre_buf, bw, bh, mi_x,
+            mi_y, ref, is_intrabc, build_for_obmc, &warp_types, &pre,
+            &subpel_params, &src_stride);
 
-        dec_calc_subpel_params(xd, sf, mv, plane, pre_x, pre_y, x, y, pre_buf,
-                               &subpel_params, bw, bh, &block, mi_x, mi_y,
-                               &scaled_mv, &subpel_x_mv, &subpel_y_mv);
-        pre = pre_buf->buf0 + block.y0 * pre_buf->stride + block.x0;
-        src_stride = pre_buf->stride;
-        highbd = is_cur_buf_hbd(xd);
-        extend_mc_border(sf, pre_buf, scaled_mv, block, subpel_x_mv,
-                         subpel_y_mv, 0, is_intrabc, highbd, xd->mc_buf[ref],
-                         &pre, &src_stride);
         inter_pred_params.conv_params.do_average = ref;
-
         av1_init_inter_params(
             &inter_pred_params, b4_w, b4_h, (mi_y >> pd->subsampling_y) + y,
             (mi_x >> pd->subsampling_x) + x, pd->subsampling_x,
@@ -752,48 +771,23 @@
   {
     struct buf_2d *const dst_buf = &pd->dst;
     uint8_t *const dst = dst_buf->buf;
-    uint8_t *pre[2];
     InterPredParams inter_pred_params;
-    SubpelParams subpel_params[2];
-    int src_stride[2];
     for (ref = 0; ref < 1 + is_compound; ++ref) {
       const struct scale_factors *const sf =
           is_intrabc ? &cm->sf_identity : xd->block_ref_scale_factors[ref];
       struct buf_2d *const pre_buf = is_intrabc ? dst_buf : &pd->pre[ref];
       const MV mv = mi->mv[ref].as_mv;
-      PadBlock block;
-      MV32 scaled_mv;
-      int subpel_x_mv, subpel_y_mv;
-      int highbd;
+      const WarpTypesAllowed warp_types = { is_global[ref],
+                                            mi->motion_mode == WARPED_CAUSAL };
 
-      dec_calc_subpel_params(xd, sf, mv, plane, pre_x, pre_y, 0, 0, pre_buf,
-                             &subpel_params[ref], bw, bh, &block, mi_x, mi_y,
-                             &scaled_mv, &subpel_x_mv, &subpel_y_mv);
-      pre[ref] = pre_buf->buf0 + (int64_t)block.y0 * pre_buf->stride + block.x0;
-      src_stride[ref] = pre_buf->stride;
-      highbd = is_cur_buf_hbd(xd);
+      SubpelParams subpel_params;
+      uint8_t *pre;
+      int src_stride;
+      dec_calc_subpel_params_and_extend(xd, sf, mv, plane, mi, pre_x, pre_y, 0,
+                                        0, pre_buf, bw, bh, mi_x, mi_y, ref,
+                                        is_intrabc, build_for_obmc, &warp_types,
+                                        &pre, &subpel_params, &src_stride);
 
-      WarpTypesAllowed warp_types;
-      warp_types.global_warp_allowed = is_global[ref];
-      warp_types.local_warp_allowed = mi->motion_mode == WARPED_CAUSAL;
-      int do_warp = (bw >= 8 && bh >= 8 &&
-                     av1_allow_warp(mi, &warp_types,
-                                    &xd->global_motion[mi->ref_frame[ref]],
-                                    build_for_obmc, sf, NULL));
-      do_warp = (do_warp && xd->cur_frame_force_integer_mv == 0);
-
-      extend_mc_border(sf, pre_buf, scaled_mv, block, subpel_x_mv, subpel_y_mv,
-                       do_warp, is_intrabc, highbd, xd->mc_buf[ref], &pre[ref],
-                       &src_stride[ref]);
-    }
-
-    for (ref = 0; ref < 1 + is_compound; ++ref) {
-      struct buf_2d *const pre_buf = is_intrabc ? dst_buf : &pd->pre[ref];
-      const struct scale_factors *const sf =
-          is_intrabc ? &cm->sf_identity : xd->block_ref_scale_factors[ref];
-      WarpTypesAllowed warp_types;
-      warp_types.global_warp_allowed = is_global[ref];
-      warp_types.local_warp_allowed = mi->motion_mode == WARPED_CAUSAL;
       inter_pred_params.conv_params.do_average = ref;
 
       av1_init_inter_params(&inter_pred_params, bw, bh,
@@ -802,7 +796,6 @@
                             pd->subsampling_y, xd->bd, is_cur_buf_hbd(xd),
                             mi->use_intrabc, sf, pre_buf, mi->interp_filters);
       if (is_compound) av1_init_comp_mode(&inter_pred_params);
-
       inter_pred_params.conv_params = get_conv_params_no_round(
           ref, plane, xd->tmp_conv_dst, MAX_SB_SIZE, is_compound, xd->bd);
 
@@ -824,13 +817,11 @@
         // masked compound type has its own average mechanism
         inter_pred_params.conv_params.do_average = 0;
 
-        av1_make_masked_inter_predictor(pre[ref], src_stride[ref], dst,
-                                        dst_buf->stride, &inter_pred_params,
-                                        &subpel_params[ref]);
+        av1_make_masked_inter_predictor(pre, src_stride, dst, dst_buf->stride,
+                                        &inter_pred_params, &subpel_params);
       } else {
-        av1_make_inter_predictor(pre[ref], src_stride[ref], dst,
-                                 dst_buf->stride, &inter_pred_params,
-                                 &subpel_params[ref]);
+        av1_make_inter_predictor(pre, src_stride, dst, dst_buf->stride,
+                                 &inter_pred_params, &subpel_params);
       }
     }
   }