Refactor set_mi_offsets() function

With that:
- We clarify that pointers in 'mi_grid_base' are being updated to point
to appropriate locations in 'mi' array. (This was not at all obvious from
statements like "xd->mi = mi_params->mi_grid_base + grid_idx;" followed by
"xd->mi[0] = mi_params->mi + alloc_idx;" used earlier)
- We use 'mi_grid_base' or 'xd->mi' as far as possible, without using
'mi' array directly

BUG=aomedia:2610

Change-Id: Ibed8f7e500b90d78328a2e4a7a47fa8cac991079
diff --git a/av1/common/av1_common_int.h b/av1/common/av1_common_int.h
index 5ce40fb..7d193e7 100644
--- a/av1/common/av1_common_int.h
+++ b/av1/common/av1_common_int.h
@@ -1236,6 +1236,21 @@
   return mi_alloc_row * mi_params->mi_alloc_cols + mi_alloc_col;
 }
 
+// For this partition block, set pointers in mi_params->mi_grid_base and xd->mi.
+static INLINE void set_mi_offsets(const CommonModeInfoParams *const mi_params,
+                                  MACROBLOCKD *const xd, int mi_row,
+                                  int mi_col) {
+  // 'mi_grid_base' should point to appropriate memory in 'mi'.
+  const int mi_grid_idx = get_mi_grid_idx(mi_params, mi_row, mi_col);
+  const int mi_alloc_idx = get_alloc_mi_idx(mi_params, mi_row, mi_col);
+  mi_params->mi_grid_base[mi_grid_idx] = &mi_params->mi[mi_alloc_idx];
+  // 'xd->mi' should point to an offset in 'mi_grid_base';
+  xd->mi = mi_params->mi_grid_base + mi_grid_idx;
+  // 'xd->tx_type_map' should point to an offset in 'mi_params->tx_type_map'.
+  xd->tx_type_map = mi_params->tx_type_map + mi_grid_idx;
+  xd->tx_type_map_stride = mi_params->mi_stride;
+}
+
 static INLINE void txfm_partition_update(TXFM_CONTEXT *above_ctx,
                                          TXFM_CONTEXT *left_ctx,
                                          TX_SIZE tx_size, TX_SIZE txb_size) {
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index ccad632..29a758a 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -324,13 +324,7 @@
   const CommonModeInfoParams *const mi_params = &cm->mi_params;
   const TileInfo *const tile = &xd->tile;
 
-  xd->mi = mi_params->mi_grid_base + get_mi_grid_idx(mi_params, mi_row, mi_col);
-  xd->mi[0] = &mi_params->mi[get_alloc_mi_idx(mi_params, mi_row, mi_col)];
-  xd->tx_type_map =
-      &mi_params->tx_type_map[mi_row * mi_params->mi_stride + mi_col];
-  xd->tx_type_map_stride = mi_params->mi_stride;
-  // TODO(slavarnway): Generate sb_type based on bwl and bhl, instead of
-  // passing bsize from decode_partition().
+  set_mi_offsets(mi_params, xd, mi_row, mi_col);
   xd->mi[0]->sb_type = bsize;
 #if CONFIG_RD_DEBUG
   xd->mi[0]->mi_row = mi_row;
diff --git a/av1/encoder/encode_strategy.c b/av1/encoder/encode_strategy.c
index 3b7f842..c5b1cee 100644
--- a/av1/encoder/encode_strategy.c
+++ b/av1/encoder/encode_strategy.c
@@ -875,11 +875,7 @@
   av1_setup_block_planes(xd, cm->seq_params.subsampling_x,
                          cm->seq_params.subsampling_y, num_planes);
 
-  const CommonModeInfoParams *const mi_params = &cm->mi_params;
-  xd->mi = mi_params->mi_grid_base;
-  xd->mi[0] = mi_params->mi;
-  xd->tx_type_map = mi_params->tx_type_map;
-  xd->tx_type_map_stride = mi_params->mi_stride;
+  set_mi_offsets(&cm->mi_params, xd, 0, 0);
 }
 
 // Apply temporal filtering to key frames and encode the filtered frame.
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index a3f3a81..9b0d0e3 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -4163,10 +4163,10 @@
     // before mi is assigned for each block in current superblock
     for (int j = 0; j < AOMMIN(mib_size, mi_params->mi_rows - mi_row); j++) {
       for (int k = 0; k < AOMMIN(mib_size, mi_params->mi_cols - mi_col); k++) {
-        const int mi_idx = get_alloc_mi_idx(mi_params, mi_row + j, mi_col + k);
-        mi_params->mi[mi_idx].delta_lf_from_base = delta_lf;
+        const int grid_idx = get_mi_grid_idx(mi_params, mi_row + j, mi_col + k);
+        mi_params->mi_grid_base[grid_idx]->delta_lf_from_base = delta_lf;
         for (int lf_id = 0; lf_id < frame_lf_count; ++lf_id) {
-          mi_params->mi[mi_idx].delta_lf[lf_id] = delta_lf;
+          mi_params->mi_grid_base[grid_idx]->delta_lf[lf_id] = delta_lf;
         }
       }
     }
@@ -5598,10 +5598,7 @@
     mi_params->setup_mi(mi_params);
   }
 
-  xd->mi = mi_params->mi_grid_base;
-  xd->mi[0] = mi_params->mi;
-  xd->tx_type_map = mi_params->tx_type_map;
-  xd->tx_type_map_stride = mi_params->mi_stride;
+  set_mi_offsets(mi_params, xd, 0, 0);
 
 #if CONFIG_AV1_HIGHBITDEPTH
   x->fwd_txfm4x4 = aom_fdct4x4;
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index aa40799..10a1363 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -1549,14 +1549,8 @@
                                          MACROBLOCKD *const xd, int mi_row,
                                          int mi_col) {
   const CommonModeInfoParams *const mi_params = &cpi->common.mi_params;
-  const int grid_idx = get_mi_grid_idx(mi_params, mi_row, mi_col);
-  const int mi_idx = get_alloc_mi_idx(mi_params, mi_row, mi_col);
+  set_mi_offsets(mi_params, xd, mi_row, mi_col);
   const int ext_idx = get_mi_ext_idx(mi_params, mi_row, mi_col);
-
-  xd->mi = mi_params->mi_grid_base + grid_idx;
-  xd->mi[0] = mi_params->mi + mi_idx;
-  xd->tx_type_map = mi_params->tx_type_map + grid_idx;
-  xd->tx_type_map_stride = mi_params->mi_stride;
   x->mbmi_ext_frame = cpi->mbmi_ext_frame_base + ext_idx;
 }
 
diff --git a/av1/encoder/firstpass.c b/av1/encoder/firstpass.c
index 9abd0c6..11a6aa8 100644
--- a/av1/encoder/firstpass.c
+++ b/av1/encoder/firstpass.c
@@ -367,9 +367,8 @@
   av1_setup_frame_size(cpi);
   aom_clear_system_state();
 
-  xd->mi = mi_params->mi_grid_base;
-  xd->mi[0] = mi_params->mi;
-  x->e_mbd.mi[0]->sb_type = BLOCK_16X16;
+  set_mi_offsets(mi_params, xd, 0, 0);
+  xd->mi[0]->sb_type = BLOCK_16X16;
 
   intra_factor = 0.0;
   brightness_factor = 0.0;
@@ -392,8 +391,7 @@
     av1_setup_pre_planes(xd, 0, lst_yv12, 0, 0, NULL, num_planes);
   }
 
-  xd->mi = mi_params->mi_grid_base;
-  xd->mi[0] = mi_params->mi;
+  set_mi_offsets(mi_params, xd, 0, 0);
 
   // Don't store luma on the fist pass since chroma is not computed
   xd->cfl.store_y = 0;
@@ -442,14 +440,7 @@
 
       aom_clear_system_state();
 
-      const int grid_idx =
-          get_mi_grid_idx(mi_params, mb_row * mb_scale, mb_col * mb_scale);
-      const int mi_idx =
-          get_alloc_mi_idx(mi_params, mb_row * mb_scale, mb_col * mb_scale);
-      xd->mi = mi_params->mi_grid_base + grid_idx;
-      xd->mi[0] = mi_params->mi + mi_idx;
-      xd->tx_type_map = mi_params->tx_type_map + grid_idx;
-      xd->tx_type_map_stride = mi_params->mi_stride;
+      set_mi_offsets(mi_params, xd, mb_row * mb_scale, mb_col * mb_scale);
       xd->plane[0].dst.buf = new_yv12->y_buffer + recon_yoffset;
       xd->plane[1].dst.buf = new_yv12->u_buffer + recon_uvoffset;
       xd->plane[2].dst.buf = new_yv12->v_buffer + recon_uvoffset;