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;
