Remove subsampling dep for allocating tx_skip

Resolves reopened issue #185
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;
   }
 }