Common alloc_mi() function for encoder/decoder.

This does not change the behavior as this common function uses
'mi_alloc_bsize' (set by set_mb_mi() function earlier) to set mi_alloc_*
appropriately (as the encoder was doing before).

BUG=aomedia:2610

Change-Id: Ibca7798339c3cc60a6336845b3c2ba9d998c8a44
diff --git a/av1/common/alloccommon.c b/av1/common/alloccommon.c
index 7c5d545..fd66022 100644
--- a/av1/common/alloccommon.c
+++ b/av1/common/alloccommon.c
@@ -217,10 +217,41 @@
   return 0;
 }
 
+// Allocate the dynamically allocated arrays in 'mi_params' assuming
+// 'mi_params->set_mb_mi()' was already called earlier to initialize the rest of
+// the struct members.
+static int alloc_mi(CommonModeInfoParams *mi_params) {
+  const int aligned_mi_rows = calc_mi_size(mi_params->mi_rows);
+  const int mi_grid_size = mi_params->mi_stride * aligned_mi_rows;
+  const int alloc_size_1d = mi_size_wide[mi_params->mi_alloc_bsize];
+  const int alloc_mi_size =
+      mi_params->mi_alloc_stride * (aligned_mi_rows / alloc_size_1d);
+
+  if (mi_params->mi_alloc_size < alloc_mi_size ||
+      mi_params->mi_grid_size < mi_grid_size) {
+    mi_params->free_mi(mi_params);
+
+    mi_params->mi = aom_calloc(alloc_mi_size, sizeof(*mi_params->mi));
+    if (!mi_params->mi) return 1;
+    mi_params->mi_alloc_size = alloc_mi_size;
+
+    mi_params->mi_grid_base = (MB_MODE_INFO **)aom_calloc(
+        mi_grid_size, sizeof(*mi_params->mi_grid_base));
+    if (!mi_params->mi_grid_base) return 1;
+    mi_params->mi_grid_size = mi_grid_size;
+
+    mi_params->tx_type_map =
+        aom_calloc(mi_grid_size, sizeof(*mi_params->tx_type_map));
+    if (!mi_params->tx_type_map) return 1;
+  }
+
+  return 0;
+}
+
 int av1_alloc_context_buffers(AV1_COMMON *cm, int width, int height) {
   CommonModeInfoParams *const mi_params = &cm->mi_params;
   mi_params->set_mb_mi(mi_params, width, height);
-  if (mi_params->alloc_mi(mi_params)) goto fail;
+  if (alloc_mi(mi_params)) goto fail;
   return 0;
 
 fail:
diff --git a/av1/common/av1_common_int.h b/av1/common/av1_common_int.h
index 7d193e7..1e04084 100644
--- a/av1/common/av1_common_int.h
+++ b/av1/common/av1_common_int.h
@@ -389,8 +389,7 @@
 
   uint8_t *tx_type_map;
 
-  // Separate mi functions between encoder and decoder.
-  int (*alloc_mi)(struct CommonModeInfoParams *mi_params);
+  // Function pointers to allow separate logic for encoder and decoder.
   void (*free_mi)(struct CommonModeInfoParams *mi_params);
   void (*setup_mi)(struct CommonModeInfoParams *mi_params);
   void (*set_mb_mi)(struct CommonModeInfoParams *mi_params, int width,
diff --git a/av1/decoder/decoder.c b/av1/decoder/decoder.c
index 041776b..ba98555 100644
--- a/av1/decoder/decoder.c
+++ b/av1/decoder/decoder.c
@@ -83,32 +83,6 @@
          mi_grid_size * sizeof(*mi_params->mi_grid_base));
 }
 
-static int dec_alloc_mi(CommonModeInfoParams *mi_params) {
-  const int mi_grid_size =
-      mi_params->mi_stride * calc_mi_size(mi_params->mi_rows);
-
-  if (mi_params->mi_alloc_size < mi_grid_size ||
-      mi_params->mi_grid_size < mi_grid_size) {
-    mi_params->free_mi(mi_params);
-
-    mi_params->mi = aom_calloc(mi_grid_size, sizeof(*mi_params->mi));
-    if (!mi_params->mi) return 1;
-    mi_params->mi_alloc_size = mi_grid_size;
-
-    mi_params->mi_grid_base =
-        (MB_MODE_INFO **)aom_calloc(mi_grid_size, sizeof(MB_MODE_INFO *));
-    if (!mi_params->mi_grid_base) return 1;
-    mi_params->mi_grid_size = mi_grid_size;
-
-    mi_params->tx_type_map =
-        aom_calloc(calc_mi_size(mi_params->mi_rows) * mi_params->mi_stride,
-                   sizeof(*mi_params->tx_type_map));
-    if (!mi_params->tx_type_map) return 1;
-  }
-
-  return 0;
-}
-
 static void dec_free_mi(CommonModeInfoParams *mi_params) {
   aom_free(mi_params->mi);
   mi_params->mi = NULL;
@@ -159,7 +133,6 @@
 
   cm->seq_params.bit_depth = AOM_BITS_8;
 
-  cm->mi_params.alloc_mi = dec_alloc_mi;
   cm->mi_params.free_mi = dec_free_mi;
   cm->mi_params.setup_mi = dec_setup_mi;
   cm->mi_params.set_mb_mi = dec_set_mb_mi;
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index dd2ebab..2151183 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -681,35 +681,6 @@
          mi_grid_size * sizeof(*mi_params->tx_type_map));
 }
 
-static int enc_alloc_mi(CommonModeInfoParams *mi_params) {
-  const int mi_grid_size =
-      mi_params->mi_stride * calc_mi_size(mi_params->mi_rows);
-  const int alloc_size_1d = mi_size_wide[mi_params->mi_alloc_bsize];
-  const int alloc_mi_size = mi_params->mi_alloc_stride *
-                            (calc_mi_size(mi_params->mi_rows) / alloc_size_1d);
-
-  if (mi_params->mi_alloc_size < alloc_mi_size ||
-      mi_params->mi_grid_size < mi_grid_size) {
-    mi_params->free_mi(mi_params);
-
-    mi_params->mi = aom_calloc(alloc_mi_size, sizeof(*mi_params->mi));
-    if (!mi_params->mi) return 1;
-    mi_params->mi_alloc_size = alloc_mi_size;
-
-    mi_params->mi_grid_base =
-        (MB_MODE_INFO **)aom_calloc(mi_grid_size, sizeof(MB_MODE_INFO *));
-    if (!mi_params->mi_grid_base) return 1;
-    mi_params->mi_grid_size = mi_grid_size;
-
-    mi_params->tx_type_map =
-        aom_calloc(calc_mi_size(mi_params->mi_rows) * mi_params->mi_stride,
-                   sizeof(*mi_params->tx_type_map));
-    if (!mi_params->tx_type_map) return 1;
-  }
-
-  return 0;
-}
-
 static void enc_free_mi(CommonModeInfoParams *mi_params) {
   aom_free(mi_params->mi);
   mi_params->mi = NULL;
@@ -3038,7 +3009,6 @@
   cm->error.setjmp = 1;
 
   CommonModeInfoParams *const mi_params = &cm->mi_params;
-  mi_params->alloc_mi = enc_alloc_mi;
   mi_params->free_mi = enc_free_mi;
   mi_params->setup_mi = enc_setup_mi;
   mi_params->set_mb_mi = enc_set_mb_mi;