COMPOUND_SINGLEREF: replace deprecated tree coding.

Use multi-symbol CDF coding instead.

Change-Id: I8a69364c8672474021d2ea5933e344d493186967
diff --git a/av1/common/entropy.c b/av1/common/entropy.c
index 153be17..59a4deb 100644
--- a/av1/common/entropy.c
+++ b/av1/common/entropy.c
@@ -5714,6 +5714,9 @@
   AVERAGE_TILE_CDFS(inter_compound_mode_cdf)
 
   AVERAGE_TILE_CDFS(compound_type_cdf)
+#if CONFIG_COMPOUND_SINGLEREF
+  AVERAGE_TILE_CDFS(inter_singleref_comp_mode_cdf)
+#endif
 
 #if CONFIG_INTERINTRA
 #if CONFIG_NEW_MULTISYMBOL
diff --git a/av1/common/entropymode.c b/av1/common/entropymode.c
index c3e3f54..0c2f9e3 100644
--- a/av1/common/entropymode.c
+++ b/av1/common/entropymode.c
@@ -490,6 +490,18 @@
       { 17, 81, 52 },   // 5 = one intra neighbour
       { 25, 29, 50 },   // 6 = two intra neighbours
     };
+
+static const aom_cdf_prob
+    default_inter_singleref_comp_mode_cdf[INTER_MODE_CONTEXTS][CDF_SIZE(
+        INTER_SINGLEREF_COMP_MODES)] = {
+      { AOM_ICDF(21971), AOM_ICDF(24771), AOM_ICDF(25027), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(18053), AOM_ICDF(26690), AOM_ICDF(27586), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(20667), AOM_ICDF(26182), AOM_ICDF(27078), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(11703), AOM_ICDF(22103), AOM_ICDF(22999), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(7936), AOM_ICDF(13888), AOM_ICDF(14912), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(9679), AOM_ICDF(13927), AOM_ICDF(16103), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(3349), AOM_ICDF(8470), AOM_ICDF(11670), AOM_ICDF(32768), 0 }
+    };
 #endif  // CONFIG_COMPOUND_SINGLEREF
 
 #if CONFIG_COMPOUND_SEGMENT && CONFIG_WEDGE
@@ -4827,6 +4839,8 @@
 #if CONFIG_COMPOUND_SINGLEREF
   av1_copy(fc->inter_singleref_comp_mode_probs,
            default_inter_singleref_comp_mode_probs);
+  av1_copy(fc->inter_singleref_comp_mode_cdf,
+           default_inter_singleref_comp_mode_cdf);
 #endif  // CONFIG_COMPOUND_SINGLEREF
   av1_copy(fc->compound_type_prob, default_compound_type_probs);
   av1_copy(fc->compound_type_cdf, default_compound_type_cdf);
diff --git a/av1/common/entropymode.h b/av1/common/entropymode.h
index 61525c0..2b89d67 100644
--- a/av1/common/entropymode.h
+++ b/av1/common/entropymode.h
@@ -200,6 +200,8 @@
 #if CONFIG_COMPOUND_SINGLEREF
   aom_prob inter_singleref_comp_mode_probs[INTER_MODE_CONTEXTS]
                                           [INTER_SINGLEREF_COMP_MODES - 1];
+  aom_cdf_prob inter_singleref_comp_mode_cdf[INTER_MODE_CONTEXTS][CDF_SIZE(
+      INTER_SINGLEREF_COMP_MODES)];
 #endif  // CONFIG_COMPOUND_SINGLEREF
   aom_prob compound_type_prob[BLOCK_SIZES_ALL][COMPOUND_TYPES - 1];
   aom_cdf_prob compound_type_cdf[BLOCK_SIZES_ALL][CDF_SIZE(COMPOUND_TYPES)];
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index ee5cce7..5fa0097 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -177,21 +177,6 @@
 }
 #endif
 
-#if CONFIG_EXT_INTER && CONFIG_COMPOUND_SINGLEREF
-static void read_inter_singleref_comp_mode_probs(FRAME_CONTEXT *fc,
-                                                 aom_reader *r) {
-  int i, j;
-  if (aom_read(r, GROUP_DIFF_UPDATE_PROB, ACCT_STR)) {
-    for (j = 0; j < INTER_MODE_CONTEXTS; ++j) {
-      for (i = 0; i < INTER_SINGLEREF_COMP_MODES - 1; ++i) {
-        av1_diff_update_prob(r, &fc->inter_singleref_comp_mode_probs[j][i],
-                             ACCT_STR);
-      }
-    }
-  }
-}
-#endif  // CONFIG_EXT_INTER && CONFIG_COMPOUND_SINGLEREF
-
 static REFERENCE_MODE read_frame_reference_mode(
     const AV1_COMMON *cm, struct aom_read_bit_buffer *rb) {
   if (is_compound_reference_allowed(cm)) {
@@ -4932,10 +4917,6 @@
 #endif
 
 #if CONFIG_EXT_INTER
-#if CONFIG_COMPOUND_SINGLEREF
-    read_inter_singleref_comp_mode_probs(fc, &r);
-#endif  // CONFIG_COMPOUND_SINGLEREF
-
 #if CONFIG_INTERINTRA
     if (cm->reference_mode != COMPOUND_REFERENCE &&
         cm->allow_interintra_compound) {
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index 2049cff..53de878 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -404,13 +404,12 @@
 }
 
 #if CONFIG_COMPOUND_SINGLEREF
-static PREDICTION_MODE read_inter_singleref_comp_mode(AV1_COMMON *cm,
-                                                      MACROBLOCKD *xd,
+static PREDICTION_MODE read_inter_singleref_comp_mode(MACROBLOCKD *xd,
                                                       aom_reader *r,
                                                       int16_t ctx) {
   const int mode =
-      aom_read_tree(r, av1_inter_singleref_comp_mode_tree,
-                    cm->fc->inter_singleref_comp_mode_probs[ctx], ACCT_STR);
+      aom_read_symbol(r, xd->tile_ctx->inter_singleref_comp_mode_cdf[ctx],
+                      INTER_SINGLEREF_COMP_MODES, ACCT_STR);
   FRAME_COUNTS *counts = xd->counts;
 
   if (counts) ++counts->inter_singleref_comp_mode[ctx][mode];
@@ -2284,7 +2283,7 @@
         mbmi->mode = read_inter_compound_mode(cm, xd, r, mode_ctx);
 #if CONFIG_COMPOUND_SINGLEREF
       else if (is_singleref_comp_mode)
-        mbmi->mode = read_inter_singleref_comp_mode(cm, xd, r, mode_ctx);
+        mbmi->mode = read_inter_singleref_comp_mode(xd, r, mode_ctx);
 #endif  // CONFIG_COMPOUND_SINGLEREF
       else
 #endif  // CONFIG_EXT_INTER
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 253988d..439d99a 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -308,16 +308,15 @@
 }
 
 #if CONFIG_COMPOUND_SINGLEREF
-static void write_inter_singleref_comp_mode(AV1_COMMON *cm, aom_writer *w,
+static void write_inter_singleref_comp_mode(MACROBLOCKD *xd, aom_writer *w,
                                             PREDICTION_MODE mode,
                                             const int16_t mode_ctx) {
   assert(is_inter_singleref_comp_mode(mode));
-  const aom_prob *const inter_singleref_comp_probs =
-      cm->fc->inter_singleref_comp_mode_probs[mode_ctx];
+  aom_cdf_prob *const inter_singleref_comp_cdf =
+      xd->tile_ctx->inter_singleref_comp_mode_cdf[mode_ctx];
 
-  av1_write_token(
-      w, av1_inter_singleref_comp_mode_tree, inter_singleref_comp_probs,
-      &inter_singleref_comp_mode_encodings[INTER_SINGLEREF_COMP_OFFSET(mode)]);
+  aom_write_symbol(w, INTER_SINGLEREF_COMP_OFFSET(mode),
+                   inter_singleref_comp_cdf, INTER_SINGLEREF_COMP_MODES);
 }
 #endif  // CONFIG_COMPOUND_SINGLEREF
 #endif  // CONFIG_EXT_INTER
@@ -327,7 +326,7 @@
   aom_wb_write_literal(wb, data, get_unsigned_bits(max));
 }
 
-#if CONFIG_NCOBMC_ADAPT_WEIGHT || CONFIG_COMPOUND_SINGLEREF
+#if CONFIG_NCOBMC_ADAPT_WEIGHT
 static void prob_diff_update(const aom_tree_index *tree,
                              aom_prob probs[/*n - 1*/],
                              const unsigned int counts[/* n */], int n,
@@ -344,26 +343,6 @@
 }
 #endif
 
-#if CONFIG_COMPOUND_SINGLEREF
-static int prob_diff_update_savings(const aom_tree_index *tree,
-                                    aom_prob probs[/*n - 1*/],
-                                    const unsigned int counts[/*n - 1*/], int n,
-                                    int probwt) {
-  int i;
-  unsigned int branch_ct[32][2];
-  int savings = 0;
-
-  // Assuming max number of probabilities <= 32
-  assert(n <= 32);
-  av1_tree_probs_from_distribution(tree, branch_ct, counts);
-  for (i = 0; i < n - 1; ++i) {
-    savings +=
-        av1_cond_prob_diff_update_savings(&probs[i], branch_ct[i], probwt);
-  }
-  return savings;
-}
-#endif  // CONFIG_COMPOUND_SINGLEREF
-
 #if CONFIG_VAR_TX
 static void write_tx_size_vartx(const AV1_COMMON *cm, MACROBLOCKD *xd,
                                 const MB_MODE_INFO *mbmi, TX_SIZE tx_size,
@@ -494,34 +473,6 @@
 }
 #endif
 
-#if CONFIG_EXT_INTER && CONFIG_COMPOUND_SINGLEREF
-static void update_inter_singleref_comp_mode_probs(AV1_COMMON *cm, int probwt,
-                                                   aom_writer *w) {
-  const int savings_thresh = av1_cost_one(GROUP_DIFF_UPDATE_PROB) -
-                             av1_cost_zero(GROUP_DIFF_UPDATE_PROB);
-  int i;
-  int savings = 0;
-  int do_update = 0;
-  for (i = 0; i < INTER_MODE_CONTEXTS; ++i) {
-    savings +=
-        prob_diff_update_savings(av1_inter_singleref_comp_mode_tree,
-                                 cm->fc->inter_singleref_comp_mode_probs[i],
-                                 cm->counts.inter_singleref_comp_mode[i],
-                                 INTER_SINGLEREF_COMP_MODES, probwt);
-  }
-  do_update = savings > savings_thresh;
-  aom_write(w, do_update, GROUP_DIFF_UPDATE_PROB);
-  if (do_update) {
-    for (i = 0; i < INTER_MODE_CONTEXTS; ++i) {
-      prob_diff_update(av1_inter_singleref_comp_mode_tree,
-                       cm->fc->inter_singleref_comp_mode_probs[i],
-                       cm->counts.inter_singleref_comp_mode[i],
-                       INTER_SINGLEREF_COMP_MODES, probwt, w);
-    }
-  }
-}
-#endif  // CONFIG_EXT_INTER && CONFIG_COMPOUND_SINGLEREF
-
 static int write_skip(const AV1_COMMON *cm, const MACROBLOCKD *xd,
                       int segment_id, const MODE_INFO *mi, aom_writer *w) {
   if (segfeature_active(&cm->seg, segment_id, SEG_LVL_SKIP)) {
@@ -1915,7 +1866,7 @@
           write_inter_compound_mode(cm, xd, w, mode, mode_ctx);
 #if CONFIG_COMPOUND_SINGLEREF
         else if (is_inter_singleref_comp_mode(mode))
-          write_inter_singleref_comp_mode(cm, w, mode, mode_ctx);
+          write_inter_singleref_comp_mode(xd, w, mode, mode_ctx);
 #endif  // CONFIG_COMPOUND_SINGLEREF
         else if (is_inter_singleref_mode(mode))
 #endif  // CONFIG_EXT_INTER
@@ -4625,10 +4576,6 @@
     update_inter_mode_probs(cm, header_bc, counts);
 #endif
 #if CONFIG_EXT_INTER
-#if CONFIG_COMPOUND_SINGLEREF
-    update_inter_singleref_comp_mode_probs(cm, probwt, header_bc);
-#endif  // CONFIG_COMPOUND_SINGLEREF
-
 #if CONFIG_INTERINTRA
     if (cm->reference_mode != COMPOUND_REFERENCE &&
         cm->allow_interintra_compound) {