diff --git a/av1/common/av1_common_int.h b/av1/common/av1_common_int.h
index 22c233d..bc69f7b 100644
--- a/av1/common/av1_common_int.h
+++ b/av1/common/av1_common_int.h
@@ -1096,6 +1096,10 @@
    */
   uint8_t *wiener_class_id[MAX_MB_PLANE];
   /*!
+   * wiener_class_id buffer allocated for each 4x4 block
+   */
+  uint32_t wiener_class_id_buf_size[MAX_MB_PLANE];
+  /*!
    * wiener_class_id stride
    */
   uint32_t wiener_class_id_stride[MAX_MB_PLANE];
diff --git a/av1/common/blockd.c b/av1/common/blockd.c
index ebfd5f5..34ea328 100644
--- a/av1/common/blockd.c
+++ b/av1/common/blockd.c
@@ -687,13 +687,12 @@
 
 void av1_alloc_txk_skip_array(CommonModeInfoParams *mi_params, AV1_COMMON *cm) {
   // Allocate based on the MIN_TX_SIZE, which is a 4x4 block.
+  (void)cm;
   for (int plane = 0; plane < MAX_MB_PLANE; plane++) {
     int w = mi_params->mi_cols << MI_SIZE_LOG2;
     int h = mi_params->mi_rows << MI_SIZE_LOG2;
     w = ((w + MAX_SB_SIZE - 1) >> MAX_SB_SIZE_LOG2) << MAX_SB_SIZE_LOG2;
     h = ((h + MAX_SB_SIZE - 1) >> MAX_SB_SIZE_LOG2) << MAX_SB_SIZE_LOG2;
-    w >>= ((plane == 0) ? 0 : cm->seq_params.subsampling_x);
-    h >>= ((plane == 0) ? 0 : cm->seq_params.subsampling_y);
     int stride = (w + MIN_TX_SIZE - 1) >> MIN_TX_SIZE_LOG2;
     int rows = (h + MIN_TX_SIZE - 1) >> MIN_TX_SIZE_LOG2;
     mi_params->tx_skip[plane] = aom_calloc(rows * stride, sizeof(uint8_t));
@@ -710,9 +709,16 @@
   (void)cm;
   for (int plane = 0; plane < MAX_MB_PLANE; plane++) {
     int w = mi_params->mi_cols << MI_SIZE_LOG2;
+    int h = mi_params->mi_rows << MI_SIZE_LOG2;
     w = ((w + MAX_SB_SIZE - 1) >> MAX_SB_SIZE_LOG2) << MAX_SB_SIZE_LOG2;
-    w >>= ((plane == 0) ? 0 : cm->seq_params.subsampling_x);
+    h = ((h + MAX_SB_SIZE - 1) >> MAX_SB_SIZE_LOG2) << MAX_SB_SIZE_LOG2;
     int stride = (w + MIN_TX_SIZE - 1) >> MIN_TX_SIZE_LOG2;
+    int rows = (h + MIN_TX_SIZE - 1) >> MIN_TX_SIZE_LOG2;
+    if (rows * stride > (int)mi_params->tx_skip_buf_size[plane]) {
+      aom_free(mi_params->tx_skip[plane]);
+      mi_params->tx_skip[plane] = aom_calloc(rows * stride, sizeof(uint8_t));
+      mi_params->tx_skip_buf_size[plane] = rows * stride;
+    }
     mi_params->tx_skip_stride[plane] = stride;
   }
 }
@@ -840,28 +846,43 @@
 }
 
 void av1_alloc_class_id_array(CommonModeInfoParams *mi_params, AV1_COMMON *cm) {
+  (void)cm;
   for (int plane = 0; plane < MAX_MB_PLANE; plane++) {
-    int w = cm->superres_upscaled_width;
+    // Allocate for the maximum possible value of cm->superres_upscaled_width,
+    // which is the coded frame width * 2, instead of just
+    // cm->superres_upscaled_width
+    int w = (mi_params->mi_cols << MI_SIZE_LOG2) * 2;
     int h = cm->superres_upscaled_height;
     w = ((w + MAX_SB_SIZE - 1) >> MAX_SB_SIZE_LOG2) << MAX_SB_SIZE_LOG2;
     h = ((h + MAX_SB_SIZE - 1) >> MAX_SB_SIZE_LOG2) << MAX_SB_SIZE_LOG2;
-    w >>= ((plane == 0) ? 0 : cm->seq_params.subsampling_x);
-    h >>= ((plane == 0) ? 0 : cm->seq_params.subsampling_y);
     int stride = (w + MIN_TX_SIZE - 1) >> MIN_TX_SIZE_LOG2;
     int rows = (h + MIN_TX_SIZE - 1) >> MIN_TX_SIZE_LOG2;
     mi_params->wiener_class_id[plane] =
         aom_calloc(rows * stride, sizeof(uint8_t));
+    mi_params->wiener_class_id_buf_size[plane] = rows * stride;
     mi_params->wiener_class_id_stride[plane] = stride;
   }
 }
 
 void av1_set_class_id_array_stride(CommonModeInfoParams *mi_params,
                                    AV1_COMMON *cm) {
+  (void)cm;
   for (int plane = 0; plane < MAX_MB_PLANE; plane++) {
-    int w = cm->superres_upscaled_width;
+    // Allocate for the maximum possible value of cm->superres_upscaled_width,
+    // which is the coded frame width * 2, instead of just
+    // cm->superres_upscaled_width
+    int w = (mi_params->mi_cols << MI_SIZE_LOG2) * 2;
+    int h = cm->superres_upscaled_height;
     w = ((w + MAX_SB_SIZE - 1) >> MAX_SB_SIZE_LOG2) << MAX_SB_SIZE_LOG2;
-    w >>= ((plane == 0) ? 0 : cm->seq_params.subsampling_x);
+    h = ((h + MAX_SB_SIZE - 1) >> MAX_SB_SIZE_LOG2) << MAX_SB_SIZE_LOG2;
     int stride = (w + MIN_TX_SIZE - 1) >> MIN_TX_SIZE_LOG2;
+    int rows = (h + MIN_TX_SIZE - 1) >> MIN_TX_SIZE_LOG2;
+    if (rows * stride > (int)mi_params->wiener_class_id_buf_size[plane]) {
+      aom_free(mi_params->wiener_class_id[plane]);
+      mi_params->wiener_class_id[plane] =
+          aom_calloc(rows * stride, sizeof(uint8_t));
+      mi_params->wiener_class_id_buf_size[plane] = rows * stride;
+    }
     mi_params->wiener_class_id_stride[plane] = stride;
   }
 }
