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