Adapt the compound_type syntax element.
This syntax element was encoded using legacy tree encoding, and is
used in the compound_segment and wedge experiments.
AWCY: -0.01% all metrics (objective-1-fast, High Latency)
Change-Id: I3771ed27e13dd74841c615bec4c2918d39b76093
diff --git a/av1/common/entropy.c b/av1/common/entropy.c
index 3203c64..5b69eff 100644
--- a/av1/common/entropy.c
+++ b/av1/common/entropy.c
@@ -5713,6 +5713,9 @@
AVERAGE_TILE_CDFS(inter_compound_mode_cdf)
// interintra_mode etc
#endif
+
+ AVERAGE_TILE_CDFS(compound_type_cdf)
+
AVERAGE_TILE_CDFS(y_mode_cdf)
if (cm->interp_filter == SWITCHABLE) {
diff --git a/av1/common/entropymode.c b/av1/common/entropymode.c
index e121337..dac7104 100644
--- a/av1/common/entropymode.c
+++ b/av1/common/entropymode.c
@@ -1134,6 +1134,94 @@
[COMPOUND_TYPES - 1];
#endif // CONFIG_COMPOUND_SEGMENT && CONFIG_WEDGE
+#if CONFIG_EC_ADAPT
+#if CONFIG_COMPOUND_SEGMENT && CONFIG_WEDGE
+static const aom_cdf_prob
+ default_compound_type_cdf[BLOCK_SIZES][CDF_SIZE(COMPOUND_TYPES)] = {
+#if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
+ { AOM_ICDF(32640), AOM_ICDF(32704), AOM_ICDF(32768), 0 }, // 255, 128
+ { AOM_ICDF(32640), AOM_ICDF(32704), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(32640), AOM_ICDF(32704), AOM_ICDF(32768), 0 },
+#endif
+ { AOM_ICDF(26624), AOM_ICDF(29696), AOM_ICDF(32768), 0 }, // 208, 128
+ { AOM_ICDF(26624), AOM_ICDF(29696), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(26624), AOM_ICDF(29696), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(26624), AOM_ICDF(29696), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(26624), AOM_ICDF(29696), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(26624), AOM_ICDF(29696), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(27648), AOM_ICDF(30208), AOM_ICDF(32768), 0 }, // 216, 128
+ { AOM_ICDF(27648), AOM_ICDF(30208), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(27648), AOM_ICDF(30208), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(28672), AOM_ICDF(30720), AOM_ICDF(32768), 0 }, // 224, 128
+ { AOM_ICDF(28672), AOM_ICDF(28688), AOM_ICDF(32768), 0 }, // 224, 1
+ { AOM_ICDF(30720), AOM_ICDF(30728), AOM_ICDF(32768), 0 }, // 240, 1
+ { AOM_ICDF(30720), AOM_ICDF(30728), AOM_ICDF(32768), 0 },
+#if CONFIG_EXT_PARTITION
+ { AOM_ICDF(32640), AOM_ICDF(32641), AOM_ICDF(32768), 0 }, // 255, 1
+ { AOM_ICDF(32640), AOM_ICDF(32641), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(32640), AOM_ICDF(32641), AOM_ICDF(32768), 0 },
+#endif // CONFIG_EXT_PARTITION
+ };
+#elif !CONFIG_COMPOUND_SEGMENT && CONFIG_WEDGE
+static const aom_cdf_prob
+ default_compound_type_cdf[BLOCK_SIZES][CDF_SIZE(COMPOUND_TYPES)] = {
+#if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
+ { AOM_ICDF(32640), AOM_ICDF(32768), 0 }, // 255
+ { AOM_ICDF(32640), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(32640), AOM_ICDF(32768), 0 },
+#endif
+ { AOM_ICDF(26624), AOM_ICDF(32768), 0 }, // 208
+ { AOM_ICDF(26624), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(26624), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(26624), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(26624), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(26624), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(27648), AOM_ICDF(32768), 0 }, // 216
+ { AOM_ICDF(27648), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(27648), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(28672), AOM_ICDF(32768), 0 }, // 224
+ { AOM_ICDF(28672), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(30720), AOM_ICDF(32768), 0 }, // 240
+ { AOM_ICDF(30720), AOM_ICDF(32768), 0 },
+#if CONFIG_EXT_PARTITION
+ { AOM_ICDF(32640), AOM_ICDF(32768), 0 }, // 255
+ { AOM_ICDF(32640), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(32640), AOM_ICDF(32768), 0 },
+#endif // CONFIG_EXT_PARTITION
+ };
+#elif CONFIG_COMPOUND_SEGMENT && !CONFIG_WEDGE
+static const aom_cdf_prob
+ default_compound_type_cdf[BLOCK_SIZES][CDF_SIZE(COMPOUND_TYPES)] = {
+#if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
+ { AOM_ICDF(32640), AOM_ICDF(32768), 0 }, // 255
+ { AOM_ICDF(32640), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(32640), AOM_ICDF(32768), 0 },
+#endif
+ { AOM_ICDF(26624), AOM_ICDF(32768), 0 }, // 208
+ { AOM_ICDF(26624), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(26624), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(26624), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(26624), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(26624), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(27648), AOM_ICDF(32768), 0 }, // 216
+ { AOM_ICDF(27648), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(27648), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(28672), AOM_ICDF(32768), 0 }, // 224
+ { AOM_ICDF(28672), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(30720), AOM_ICDF(32768), 0 }, // 240
+ { AOM_ICDF(30720), AOM_ICDF(32768), 0 },
+#if CONFIG_EXT_PARTITION
+ { AOM_ICDF(32640), AOM_ICDF(32768), 0 }, // 255
+ { AOM_ICDF(32640), AOM_ICDF(32768), 0 },
+ { AOM_ICDF(32640), AOM_ICDF(32768), 0 },
+#endif // CONFIG_EXT_PARTITION
+ };
+#else
+static const aom_cdf_prob default_compound_type_cdf[BLOCK_SIZES]
+ [CDF_SIZE(COMPOUND_TYPES)];
+#endif // CONFIG_COMPOUND_SEGMENT && CONFIG_WEDGE
+#endif // CONFIG_EC_ADAPT
+
#if CONFIG_INTERINTRA
static const aom_prob default_interintra_prob[BLOCK_SIZE_GROUPS] = {
208, 208, 208, 208,
@@ -4776,6 +4864,9 @@
default_inter_singleref_comp_mode_probs);
#endif // CONFIG_COMPOUND_SINGLEREF
av1_copy(fc->compound_type_prob, default_compound_type_probs);
+#if CONFIG_EC_ADAPT
+ av1_copy(fc->compound_type_cdf, default_compound_type_cdf);
+#endif
#if CONFIG_INTERINTRA
av1_copy(fc->interintra_prob, default_interintra_prob);
av1_copy(fc->interintra_mode_prob, default_interintra_mode_prob);
diff --git a/av1/common/entropymode.h b/av1/common/entropymode.h
index 8634d6f..8de4916 100644
--- a/av1/common/entropymode.h
+++ b/av1/common/entropymode.h
@@ -204,6 +204,9 @@
[INTER_SINGLEREF_COMP_MODES - 1];
#endif // CONFIG_COMPOUND_SINGLEREF
aom_prob compound_type_prob[BLOCK_SIZES][COMPOUND_TYPES - 1];
+#if CONFIG_EC_ADAPT
+ aom_cdf_prob compound_type_cdf[BLOCK_SIZES][CDF_SIZE(COMPOUND_TYPES)];
+#endif
#if CONFIG_INTERINTRA
aom_prob interintra_prob[BLOCK_SIZE_GROUPS];
aom_prob interintra_mode_prob[BLOCK_SIZE_GROUPS][INTERINTRA_MODES - 1];
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index 1b41363..1546401 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -5130,7 +5130,7 @@
#endif // CONFIG_WEDGE
}
#endif // CONFIG_INTERINTRA
-#if CONFIG_COMPOUND_SEGMENT || CONFIG_WEDGE
+#if !CONFIG_EC_ADAPT && (CONFIG_COMPOUND_SEGMENT || CONFIG_WEDGE)
#if CONFIG_COMPOUND_SINGLEREF
if (cm->allow_masked_compound) {
#else // !CONFIG_COMPOUND_SINGLEREF
@@ -5144,7 +5144,7 @@
}
}
}
-#endif // CONFIG_COMPOUND_SEGMENT || CONFIG_WEDGE
+#endif // !CONFIG_EC_ADAPT && (CONFIG_COMPOUND_SEGMENT || CONFIG_WEDGE)
#endif // CONFIG_EXT_INTER
#if CONFIG_MOTION_VAR || CONFIG_WARPED_MOTION
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index 9003ed4..c457e2d 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -2643,9 +2643,14 @@
if (is_any_masked_compound_used(bsize)) {
#if CONFIG_COMPOUND_SEGMENT || CONFIG_WEDGE
if (cm->allow_masked_compound) {
+#if CONFIG_EC_ADAPT
+ mbmi->interinter_compound_type = aom_read_symbol(
+ r, ec_ctx->compound_type_cdf[bsize], COMPOUND_TYPES, ACCT_STR);
+#else
mbmi->interinter_compound_type =
aom_read_tree(r, av1_compound_type_tree,
cm->fc->compound_type_prob[bsize], ACCT_STR);
+#endif
#if CONFIG_WEDGE
if (mbmi->interinter_compound_type == COMPOUND_WEDGE) {
mbmi->wedge_index =
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 4797a9d..e85bf8b 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -2278,9 +2278,14 @@
is_any_masked_compound_used(bsize)) {
#if CONFIG_COMPOUND_SEGMENT || CONFIG_WEDGE
if (cm->allow_masked_compound) {
+#if CONFIG_EC_ADAPT
+ aom_write_symbol(w, mbmi->interinter_compound_type,
+ ec_ctx->compound_type_cdf[bsize], COMPOUND_TYPES);
+#else
av1_write_token(
w, av1_compound_type_tree, cm->fc->compound_type_prob[bsize],
&compound_type_encodings[mbmi->interinter_compound_type]);
+#endif
#if CONFIG_WEDGE
if (mbmi->interinter_compound_type == COMPOUND_WEDGE) {
aom_write_literal(w, mbmi->wedge_index, get_wedge_bits_lookup(bsize));
@@ -5128,7 +5133,7 @@
#endif // CONFIG_WEDGE
}
#endif // CONFIG_INTERINTRA
-#if CONFIG_COMPOUND_SEGMENT || CONFIG_WEDGE
+#if !CONFIG_EC_ADAPT && (CONFIG_COMPOUND_SEGMENT || CONFIG_WEDGE)
#if CONFIG_COMPOUND_SINGLEREF
if (cm->allow_masked_compound) {
#else // !CONFIG_COMPOUND_SINGLEREF
@@ -5142,7 +5147,7 @@
}
}
}
-#endif // CONFIG_COMPOUND_SEGMENT || CONFIG_WEDGE
+#endif // !CONFIG_EC_ADAPT && (CONFIG_COMPOUND_SEGMENT || CONFIG_WEDGE)
#endif // CONFIG_EXT_INTER
#if CONFIG_MOTION_VAR || CONFIG_WARPED_MOTION