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