NEW_MULTISYMBOL: adapt transform partition split.

Change-Id: I9c8201c7053dba11e9ac0f02c1bffbb4a322e654
diff --git a/av1/common/entropy.c b/av1/common/entropy.c
index 98732a8..69966a7 100644
--- a/av1/common/entropy.c
+++ b/av1/common/entropy.c
@@ -5654,12 +5654,6 @@
 
   AVERAGE_TILE_CDFS(tx_size_cdf);
 
-#if CONFIG_VAR_TX
-// FIXME: txfm_partition probs
-#endif
-
-  // FIXME: skip probs
-
   AVERAGE_TILE_CDFS(intra_ext_tx_cdf)
   AVERAGE_TILE_CDFS(inter_ext_tx_cdf);
 
@@ -5680,6 +5674,9 @@
 
 #if CONFIG_NEW_MULTISYMBOL
   AVERAGE_TILE_CDFS(skip_cdfs)
+#if CONFIG_VAR_TX
+  AVERAGE_TILE_CDFS(txfm_partition_cdf)
+#endif
 #endif
 }
 
diff --git a/av1/common/entropymode.c b/av1/common/entropymode.c
index 4169ad4..c16f0e4 100644
--- a/av1/common/entropymode.c
+++ b/av1/common/entropymode.c
@@ -2130,6 +2130,27 @@
 static const aom_prob default_txfm_partition_probs[TXFM_PARTITION_CONTEXTS] = {
   250, 231, 212, 241, 166, 66, 241, 230, 135, 243, 154, 64, 248, 161, 63, 128,
 };
+#if CONFIG_NEW_MULTISYMBOL
+static const aom_cdf_prob
+    default_txfm_partition_cdf[TXFM_PARTITION_CONTEXTS][CDF_SIZE(2)] = {
+      { AOM_ICDF(250 * 128), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(231 * 128), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(212 * 128), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(241 * 128), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(166 * 128), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(66 * 128), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(241 * 128), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(230 * 128), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(135 * 128), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(243 * 128), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(154 * 128), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(64 * 128), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(248 * 128), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(161 * 128), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(63 * 128), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(128 * 128), AOM_ICDF(32768), 0 }
+    };
+#endif  // CONFIG_NEW_MULTISYMBOL
 #endif
 
 static const aom_prob default_skip_probs[SKIP_CONTEXTS] = { 192, 128, 64 };
@@ -4880,6 +4901,9 @@
 #endif  // CONFIG_EXT_TX && CONFIG_RECT_TX && CONFIG_RECT_TX_EXT
 #if CONFIG_VAR_TX
   av1_copy(fc->txfm_partition_prob, default_txfm_partition_probs);
+#if CONFIG_NEW_MULTISYMBOL
+  av1_copy(fc->txfm_partition_cdf, default_txfm_partition_cdf);
+#endif
 #endif
   av1_copy(fc->skip_probs, default_skip_probs);
   av1_copy(fc->newmv_prob, default_newmv_prob);
diff --git a/av1/common/entropymode.h b/av1/common/entropymode.h
index 0f3b65a..c8a1a3c 100644
--- a/av1/common/entropymode.h
+++ b/av1/common/entropymode.h
@@ -266,7 +266,10 @@
 #endif  // CONFIG_EXT_TX && CONFIG_RECT_TX && CONFIG_RECT_TX_EXT
 #if CONFIG_VAR_TX
   aom_prob txfm_partition_prob[TXFM_PARTITION_CONTEXTS];
+#if CONFIG_NEW_MULTISYMBOL
+  aom_cdf_prob txfm_partition_cdf[TXFM_PARTITION_CONTEXTS][CDF_SIZE(2)];
 #endif
+#endif  // CONFIG_VAR_TX
   aom_prob skip_probs[SKIP_CONTEXTS];
 #if CONFIG_NEW_MULTISYMBOL
   aom_cdf_prob skip_cdfs[SKIP_CONTEXTS][CDF_SIZE(2)];
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index f37ccbd..35116bf 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -5044,11 +5044,11 @@
 #endif  // !CONFIG_PVQ
 #endif  // CONFIG_LV_MAP
 
+#if !CONFIG_NEW_MULTISYMBOL
 #if CONFIG_VAR_TX
   for (i = 0; i < TXFM_PARTITION_CONTEXTS; ++i)
     av1_diff_update_prob(&r, &fc->txfm_partition_prob[i], ACCT_STR);
 #endif  // CONFIG_VAR_TX
-#if !CONFIG_NEW_MULTISYMBOL
   for (i = 0; i < SKIP_CONTEXTS; ++i)
     av1_diff_update_prob(&r, &fc->skip_probs[i], ACCT_STR);
 #endif
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index be7a591..5f3e83d 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -432,6 +432,10 @@
                                MB_MODE_INFO *mbmi, FRAME_COUNTS *counts,
                                TX_SIZE tx_size, int depth, int blk_row,
                                int blk_col, aom_reader *r) {
+#if CONFIG_NEW_MULTISYMBOL
+  FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
+  (void)cm;
+#endif
   int is_split = 0;
   const int tx_row = blk_row >> 1;
   const int tx_col = blk_col >> 1;
@@ -459,7 +463,11 @@
     return;
   }
 
+#if CONFIG_NEW_MULTISYMBOL
+  is_split = aom_read_symbol(r, ec_ctx->txfm_partition_cdf[ctx], 2, ACCT_STR);
+#else
   is_split = aom_read(r, cm->fc->txfm_partition_prob[ctx], ACCT_STR);
+#endif
 
   if (is_split) {
     const TX_SIZE sub_txs = sub_tx_size_map[tx_size];
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index c4bd5d2..0fca4ca 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -390,10 +390,14 @@
 #endif  // !CONFIG_EC_ADAPT || CONFIG_COMPOUND_SINGLEREF
 
 #if CONFIG_VAR_TX
-static void write_tx_size_vartx(const AV1_COMMON *cm, const MACROBLOCKD *xd,
+static void write_tx_size_vartx(const AV1_COMMON *cm, MACROBLOCKD *xd,
                                 const MB_MODE_INFO *mbmi, TX_SIZE tx_size,
                                 int depth, int blk_row, int blk_col,
                                 aom_writer *w) {
+#if CONFIG_NEW_MULTISYMBOL
+  FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
+  (void)cm;
+#endif
   const int tx_row = blk_row >> 1;
   const int tx_col = blk_col >> 1;
   const int max_blocks_high = max_block_high(xd, mbmi->sb_type, 0);
@@ -412,7 +416,12 @@
   }
 
   if (tx_size == mbmi->inter_tx_size[tx_row][tx_col]) {
+#if CONFIG_NEW_MULTISYMBOL
+    aom_write_symbol(w, 0, ec_ctx->txfm_partition_cdf[ctx], 2);
+#else
     aom_write(w, 0, cm->fc->txfm_partition_prob[ctx]);
+#endif
+
     txfm_partition_update(xd->above_txfm_context + blk_col,
                           xd->left_txfm_context + blk_row, tx_size, tx_size);
   } else {
@@ -420,7 +429,11 @@
     const int bsl = tx_size_wide_unit[sub_txs];
     int i;
 
+#if CONFIG_NEW_MULTISYMBOL
+    aom_write_symbol(w, 1, ec_ctx->txfm_partition_cdf[ctx], 2);
+#else
     aom_write(w, 1, cm->fc->txfm_partition_prob[ctx]);
+#endif
 
     if (tx_size == TX_8X8) {
       txfm_partition_update(xd->above_txfm_context + blk_col,
@@ -438,6 +451,7 @@
   }
 }
 
+#if !CONFIG_NEW_MULTISYMBOL
 static void update_txfm_partition_probs(AV1_COMMON *cm, aom_writer *w,
                                         FRAME_COUNTS *counts, int probwt) {
   int k;
@@ -445,6 +459,7 @@
     av1_cond_prob_diff_update(w, &cm->fc->txfm_partition_prob[k],
                               counts->txfm_partition[k], probwt);
 }
+#endif  // CONFIG_NEW_MULTISYMBOL
 #endif
 
 static void write_selected_tx_size(const AV1_COMMON *cm, const MACROBLOCKD *xd,
@@ -5030,7 +5045,7 @@
 #endif  // CONFIG_PVQ
 #endif  // CONFIG_LV_MAP
 
-#if CONFIG_VAR_TX
+#if CONFIG_VAR_TX && !CONFIG_NEW_MULTISYMBOL
   update_txfm_partition_probs(cm, header_bc, counts, probwt);
 #endif