Add ability to have multiple compound modes for interinter
This is currently just a refactor and creates no change in performance.
It allows new compound types to be added easily in the future to
facilitate experiments with segmentation masks.
Change-Id: If48fed216d482454fabb45a304b4220ada0dbdee
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index 38b7261..4870899 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -4196,7 +4196,9 @@
if (cm->reference_mode != SINGLE_REFERENCE) {
for (i = 0; i < BLOCK_SIZES; i++) {
if (is_interinter_wedge_used(i)) {
- av1_diff_update_prob(&r, &fc->wedge_interinter_prob[i], ACCT_STR);
+ for (j = 0; j < COMPOUND_TYPES - 1; j++) {
+ av1_diff_update_prob(&r, &fc->compound_type_prob[i][j], ACCT_STR);
+ }
}
}
}
@@ -4289,8 +4291,9 @@
sizeof(cm->counts.interintra)));
assert(!memcmp(cm->counts.wedge_interintra, zero_counts.wedge_interintra,
sizeof(cm->counts.wedge_interintra)));
- assert(!memcmp(cm->counts.wedge_interinter, zero_counts.wedge_interinter,
- sizeof(cm->counts.wedge_interinter)));
+ assert(!memcmp(cm->counts.compound_interinter,
+ zero_counts.compound_interinter,
+ sizeof(cm->counts.compound_interinter)));
#endif // CONFIG_EXT_INTER
#if CONFIG_MOTION_VAR || CONFIG_WARPED_MOTION
assert(!memcmp(cm->counts.motion_mode, zero_counts.motion_mode,
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index b560f02..56311e7 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -1761,7 +1761,7 @@
#endif // CONFIG_MOTION_VAR || CONFIG_WARPED_MOTION
#if CONFIG_EXT_INTER
- mbmi->use_wedge_interinter = 0;
+ mbmi->interinter_compound = COMPOUND_AVERAGE;
if (cm->reference_mode != SINGLE_REFERENCE &&
is_inter_compound_mode(mbmi->mode) &&
#if CONFIG_MOTION_VAR || CONFIG_WARPED_MOTION
@@ -1769,11 +1769,11 @@
mbmi->motion_mode != SIMPLE_TRANSLATION) &&
#endif // CONFIG_MOTION_VAR || CONFIG_WARPED_MOTION
is_interinter_wedge_used(bsize)) {
- mbmi->use_wedge_interinter =
- aom_read(r, cm->fc->wedge_interinter_prob[bsize], ACCT_STR);
+ mbmi->interinter_compound = aom_read_tree(
+ r, av1_compound_type_tree, cm->fc->compound_type_prob[bsize], ACCT_STR);
if (xd->counts)
- xd->counts->wedge_interinter[bsize][mbmi->use_wedge_interinter]++;
- if (mbmi->use_wedge_interinter) {
+ xd->counts->compound_interinter[bsize][mbmi->interinter_compound]++;
+ if (mbmi->interinter_compound) {
mbmi->interinter_wedge_index =
aom_read_literal(r, get_wedge_bits_lookup(bsize), ACCT_STR);
mbmi->interinter_wedge_sign = aom_read_bit(r, ACCT_STR);