FG8 combined test 2 (CT2): CT1 + Test 19, Test 20 and Test 21
Combined tests for FG8 context reduction activity: Tests 1, 3, 4,11, 19, 20 and 21
STATS_CHANGED
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index d0f60dd..15c1f0d 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -576,6 +576,12 @@
}
int max_idx_bits = mbmi->max_num_warp_candidates - 1;
for (int bit_idx = 0; bit_idx < max_idx_bits; ++bit_idx) {
+ if ((CONFIG_CTX_WARP_REFIDX_REDUCTION >> bit_idx) & 1) {
+ int warp_idx = aom_read_literal(r, 1, ACCT_INFO("warp_idx"));
+ mbmi->warp_ref_idx = bit_idx + warp_idx;
+ if (!warp_idx) break;
+ continue;
+ }
aom_cdf_prob *warp_ref_idx_cdf = av1_get_warp_ref_idx_cdf(ec_ctx, bit_idx);
int warp_idx =
aom_read_symbol(r, warp_ref_idx_cdf, 2, ACCT_INFO("warp_idx"));
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 623ee03..d53987b 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -220,6 +220,11 @@
}
int max_idx_bits = mbmi->max_num_warp_candidates - 1;
for (int bit_idx = 0; bit_idx < max_idx_bits; ++bit_idx) {
+ if ((CONFIG_CTX_WARP_REFIDX_REDUCTION >> bit_idx) & 1) {
+ aom_write_literal(w, mbmi->warp_ref_idx != bit_idx, 1);
+ if (mbmi->warp_ref_idx == bit_idx) break;
+ continue;
+ }
aom_cdf_prob *warp_ref_idx_cdf = av1_get_warp_ref_idx_cdf(ec_ctx, bit_idx);
aom_write_symbol(w, mbmi->warp_ref_idx != bit_idx, warp_ref_idx_cdf, 2);
diff --git a/av1/encoder/rd.c b/av1/encoder/rd.c
index e5c94ce..9c870e9 100644
--- a/av1/encoder/rd.c
+++ b/av1/encoder/rd.c
@@ -795,9 +795,16 @@
#endif // CONFIG_WARP_PRECISION
for (i = 0; i < 3; i++) {
- for (j = 0; j < WARP_REF_CONTEXTS; j++) {
- av1_cost_tokens_from_cdf(mode_costs->warp_ref_idx_cost[i][j],
- fc->warp_ref_idx_cdf[i][j], NULL);
+ if ((CONFIG_CTX_WARP_REFIDX_REDUCTION >> i) & 1) {
+ for (j = 0; j < WARP_REF_CONTEXTS; j++) {
+ mode_costs->warp_ref_idx_cost[i][j][0] = av1_cost_literal(1);
+ mode_costs->warp_ref_idx_cost[i][j][1] = av1_cost_literal(1);
+ }
+ } else {
+ for (j = 0; j < WARP_REF_CONTEXTS; j++) {
+ av1_cost_tokens_from_cdf(mode_costs->warp_ref_idx_cost[i][j],
+ fc->warp_ref_idx_cdf[i][j], NULL);
+ }
}
}
diff --git a/build/cmake/aom_config_defaults.cmake b/build/cmake/aom_config_defaults.cmake
index 7b209ce..3771ea1 100644
--- a/build/cmake/aom_config_defaults.cmake
+++ b/build/cmake/aom_config_defaults.cmake
@@ -150,6 +150,8 @@
set_aom_config_var(CONFIG_CTX_MV_SHELL_OFFSET_OTHER 1 "FG8-Test3.")
set_aom_config_var(CONFIG_EOB_PT_CTX_REDUCTION 1 "FG8-Test4.")
set_aom_config_var(CONFIG_BY_PASS_V_SIGN 1 "FG8-Test11.")
+set_aom_config_var(CONFIG_CTX_WARP_REFIDX_REDUCTION 7
+ "FG8-Test19, Test20, Test21")
# AV2 experiment flags.
set_aom_config_var(CONFIG_IMPROVEIDTX 1