FG8 combined test: Test 27

Bypass coding of y_second_mode (related to CONFIG_AIMC)

STATS_CHANGED
diff --git a/av1/common/entropy.c b/av1/common/entropy.c
index ba828e7..ee46d8f 100644
--- a/av1/common/entropy.c
+++ b/av1/common/entropy.c
@@ -409,7 +409,9 @@
 #if CONFIG_AIMC
   RESET_CDF_COUNTER(fc->y_mode_set_cdf, INTRA_MODE_SETS);
   RESET_CDF_COUNTER(fc->y_mode_idx_cdf_0, FIRST_MODE_COUNT);
+#if !TEST_27
   RESET_CDF_COUNTER(fc->y_mode_idx_cdf_1, SECOND_MODE_COUNT);
+#endif  // !TEST_27
 #else
   RESET_CDF_COUNTER(fc->y_mode_cdf, INTRA_MODES);
 #endif  // CONFIG_AIMC
diff --git a/av1/common/entropymode.c b/av1/common/entropymode.c
index f215e83..b109c52 100644
--- a/av1/common/entropymode.c
+++ b/av1/common/entropymode.c
@@ -246,7 +246,7 @@
                   29340, 31013, 31870),
         75 },
     };
-
+#if !TEST_27
 static const aom_cdf_prob
     default_y_second_mode_cdf[Y_MODE_CONTEXTS][CDF_SIZE(SECOND_MODE_COUNT)] = {
       { AOM_CDF16(2614, 4872, 7327, 9645, 11546, 13349, 15504, 17424, 19397,
@@ -259,7 +259,7 @@
                   19690, 21835, 25356, 27731, 29157, 30362),
         76 },
     };
-
+#endif  // !TEST_27
 static const aom_cdf_prob
     default_uv_mode_cdf[UV_MODE_CONTEXTS][CDF_SIZE(UV_INTRA_MODES - 1)] = {
       { AOM_CDF13(13848, 18930, 20641, 22133, 23986, 25450, 28075, 28950, 29740,
@@ -287,6 +287,7 @@
       { AOM_CDF13(7000, 12000, 14000, 16000, 17000, 22000, 26000, 27000, 28000,
                   29000, 30000, 31000) }
     };
+#if !TEST_27
 static const aom_cdf_prob
     default_y_second_mode_cdf[Y_MODE_CONTEXTS][CDF_SIZE(SECOND_MODE_COUNT)] = {
       { AOM_CDF16(2048, 4096, 6144, 8192, 10240, 12288, 14336, 16384, 18432,
@@ -296,6 +297,7 @@
       { AOM_CDF16(2048, 4096, 6144, 8192, 10240, 12288, 14336, 16384, 18432,
                   20480, 22528, 24576, 26624, 28672, 30720) }
     };
+#endif  // !TEST_27
 static const aom_cdf_prob
     default_uv_mode_cdf[UV_MODE_CONTEXTS][CDF_SIZE(UV_INTRA_MODES - 1)] = {
       { AOM_CDF13(20545, 22597, 24087, 24753, 24995, 25621, 26273, 27089, 28510,
@@ -8556,7 +8558,9 @@
 #if CONFIG_AIMC
   av1_copy(fc->y_mode_set_cdf, default_y_mode_set_cdf);
   av1_copy(fc->y_mode_idx_cdf_0, default_y_first_mode_cdf);
+#if !TEST_27
   av1_copy(fc->y_mode_idx_cdf_1, default_y_second_mode_cdf);
+#endif  // !TEST_27
 #else
   av1_copy(fc->y_mode_cdf, default_if_y_mode_cdf);
 #endif  // CONFIG_AIMC
@@ -9085,8 +9089,10 @@
                          INTRA_MODE_SETS);
   CUMULATIVE_AVERAGE_CDF(ctx_left->y_mode_idx_cdf_0, ctx_tr->y_mode_idx_cdf_0,
                          FIRST_MODE_COUNT);
+#if !TEST_27
   CUMULATIVE_AVERAGE_CDF(ctx_left->y_mode_idx_cdf_1, ctx_tr->y_mode_idx_cdf_1,
                          SECOND_MODE_COUNT);
+#endif  // !TEST_27
 #else
   CUMULATIVE_AVERAGE_CDF(ctx_left->y_mode_cdf, ctx_tr->y_mode_cdf, INTRA_MODES);
 #endif  // CONFIG_AIMC
@@ -9511,7 +9517,9 @@
 #if CONFIG_AIMC
   SHIFT_CDF(ctx_ptr->y_mode_set_cdf, INTRA_MODE_SETS);
   SHIFT_CDF(ctx_ptr->y_mode_idx_cdf_0, FIRST_MODE_COUNT);
+#if !TEST_27
   SHIFT_CDF(ctx_ptr->y_mode_idx_cdf_1, SECOND_MODE_COUNT);
+#endif  // !TEST_27
 #else
   SHIFT_CDF(ctx_ptr->y_mode_cdf, INTRA_MODES);
 #endif  // CONFIG_AIMC
@@ -9980,8 +9988,10 @@
               INTRA_MODE_SETS);
   AVERAGE_CDF(ctx_left->y_mode_idx_cdf_0, ctx_tr->y_mode_idx_cdf_0,
               FIRST_MODE_COUNT);
+#if !TEST_27
   AVERAGE_CDF(ctx_left->y_mode_idx_cdf_1, ctx_tr->y_mode_idx_cdf_1,
               SECOND_MODE_COUNT);
+#endif  // !TEST_27
 #else
   AVERAGE_CDF(ctx_left->y_mode_cdf, ctx_tr->y_mode_cdf, INTRA_MODES);
 #endif  // CONFIG_AIMC
diff --git a/av1/common/entropymode.h b/av1/common/entropymode.h
index 411c0dd..8a6778a 100644
--- a/av1/common/entropymode.h
+++ b/av1/common/entropymode.h
@@ -581,7 +581,9 @@
   // y mode cdf
   aom_cdf_prob y_mode_set_cdf[CDF_SIZE(INTRA_MODE_SETS)];
   aom_cdf_prob y_mode_idx_cdf_0[Y_MODE_CONTEXTS][CDF_SIZE(FIRST_MODE_COUNT)];
+#if !TEST_27
   aom_cdf_prob y_mode_idx_cdf_1[Y_MODE_CONTEXTS][CDF_SIZE(SECOND_MODE_COUNT)];
+#endif  // !TEST_27
   aom_cdf_prob uv_mode_cdf[UV_MODE_CONTEXTS][CDF_SIZE(UV_INTRA_MODES - 1)];
   aom_cdf_prob cfl_cdf[CFL_CONTEXTS][CDF_SIZE(2)];
 #endif  // CONFIG_AIMC
diff --git a/av1/common/enums.h b/av1/common/enums.h
index 90dc0e6..3df0fa9 100644
--- a/av1/common/enums.h
+++ b/av1/common/enums.h
@@ -29,6 +29,8 @@
 
 #undef MAX_SB_SIZE
 
+#define TEST_27 1  // literal coding of y_second_mode
+
 #define BAWP_BUGFIX 1
 #define ADJUST_SUPER_RES_Q 1
 
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index 6ec926a..72f2836 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -2153,10 +2153,14 @@
         aom_read_symbol(r, ec_ctx->y_mode_idx_cdf_0[context], FIRST_MODE_COUNT,
                         ACCT_INFO("mode_idx", "y_mode_idx_cdf_0"));
   } else {
-    mode_idx =
-        FIRST_MODE_COUNT + (mode_set_index - 1) * SECOND_MODE_COUNT +
-        aom_read_symbol(r, ec_ctx->y_mode_idx_cdf_1[context], SECOND_MODE_COUNT,
-                        ACCT_INFO("mode_idx", "y_mode_idx_cdf_1"));
+    mode_idx = FIRST_MODE_COUNT + (mode_set_index - 1) * SECOND_MODE_COUNT +
+#if TEST_27
+               aom_read_literal(r, 4, ACCT_INFO("mode_idx"));
+#else
+               aom_read_symbol(r, ec_ctx->y_mode_idx_cdf_1[context],
+                               SECOND_MODE_COUNT,
+                               ACCT_INFO("mode_idx", "y_mode_idx_cdf_1"));
+#endif  // TEST_27
   }
   assert(mode_idx < LUMA_MODE_COUNT);
   get_y_intra_mode_set(mbmi, xd);
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 4668853..8e86f44 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -2125,10 +2125,17 @@
     aom_write_symbol(w, mode_idx, ec_ctx->y_mode_idx_cdf_0[context],
                      FIRST_MODE_COUNT);
   } else {
+#if TEST_27
+    aom_write_literal(
+        w,
+        mode_idx - FIRST_MODE_COUNT - (mode_set_index - 1) * SECOND_MODE_COUNT,
+        4);
+#else
     aom_write_symbol(
         w,
         mode_idx - FIRST_MODE_COUNT - (mode_set_index - 1) * SECOND_MODE_COUNT,
         ec_ctx->y_mode_idx_cdf_1[context], SECOND_MODE_COUNT);
+#endif  // !TEST_27
   }
   if (mbmi->joint_y_mode_delta_angle < NON_DIRECTIONAL_MODES_COUNT)
     assert(mbmi->joint_y_mode_delta_angle == mbmi->y_mode_idx);
diff --git a/av1/encoder/block.h b/av1/encoder/block.h
index e6a626c..93fca27 100644
--- a/av1/encoder/block.h
+++ b/av1/encoder/block.h
@@ -985,7 +985,9 @@
   //! y first mode cost
   int y_first_mode_costs[Y_MODE_CONTEXTS][FIRST_MODE_COUNT];
   //! y second mode cost
+#if !TEST_27
   int y_second_mode_costs[Y_MODE_CONTEXTS][SECOND_MODE_COUNT];
+#endif  // !TEST_27
   //! uv mode cost
   int intra_uv_mode_cost[UV_MODE_CONTEXTS][UV_INTRA_MODES - 1];
   //! CFL mode cost
diff --git a/av1/encoder/encodeframe_utils.c b/av1/encoder/encodeframe_utils.c
index 5d7cc4a..24434c4 100644
--- a/av1/encoder/encodeframe_utils.c
+++ b/av1/encoder/encodeframe_utils.c
@@ -598,7 +598,9 @@
           ++counts->y_mode_idx_0[context][mode_idx];
 #endif
           update_cdf(fc->y_mode_idx_cdf_0[context], mode_idx, FIRST_MODE_COUNT);
-        } else {
+        }
+#if !TEST_27
+        else {
           const int mode_idx_in_set = mode_idx - FIRST_MODE_COUNT -
                                       SECOND_MODE_COUNT * (mode_set_index - 1);
 #if CONFIG_ENTROPY_STATS
@@ -607,6 +609,7 @@
           update_cdf(fc->y_mode_idx_cdf_1[context], mode_idx_in_set,
                      SECOND_MODE_COUNT);
         }
+#endif  // !TEST_27
       } else {
         update_cdf(fc->dpcm_vert_horz_cdf, mbmi->dpcm_mode_y, 2);
       }
@@ -624,7 +627,9 @@
         ++counts->y_mode_idx_0[context][mode_idx];
 #endif
         update_cdf(fc->y_mode_idx_cdf_0[context], mode_idx, FIRST_MODE_COUNT);
-      } else {
+      }
+#if !TEST_27
+      else {
         const int mode_idx_in_set = mode_idx - FIRST_MODE_COUNT -
                                     SECOND_MODE_COUNT * (mode_set_index - 1);
 #if CONFIG_ENTROPY_STATS
@@ -633,6 +638,7 @@
         update_cdf(fc->y_mode_idx_cdf_1[context], mode_idx_in_set,
                    SECOND_MODE_COUNT);
       }
+#endif  // !TEST_27
     }
 #else  // CONFIG_LOSSLESS_DPCM
     const int context = get_y_mode_idx_ctx(xd);
@@ -648,7 +654,9 @@
       ++counts->y_mode_idx_0[context][mode_idx];
 #endif
       update_cdf(fc->y_mode_idx_cdf_0[context], mode_idx, FIRST_MODE_COUNT);
-    } else {
+    }
+#if !TEST_27
+    else {
       const int mode_idx_in_set = mode_idx - FIRST_MODE_COUNT -
                                   SECOND_MODE_COUNT * (mode_set_index - 1);
 #if CONFIG_ENTROPY_STATS
@@ -657,6 +665,7 @@
       update_cdf(fc->y_mode_idx_cdf_1[context], mode_idx_in_set,
                  SECOND_MODE_COUNT);
     }
+#endif  // !TEST_27
 #endif  // CONFIG_LOSSLESS_DPCM
     update_fsc_cdf(cm, xd,
 #if CONFIG_ENTROPY_STATS
@@ -1737,8 +1746,10 @@
               INTRA_MODE_SETS);
   AVERAGE_CDF(ctx_left->y_mode_idx_cdf_0, ctx_tr->y_mode_idx_cdf_0,
               FIRST_MODE_COUNT);
+#if !TEST_27
   AVERAGE_CDF(ctx_left->y_mode_idx_cdf_1, ctx_tr->y_mode_idx_cdf_1,
               SECOND_MODE_COUNT);
+#endif  // !TEST_27
 #else
   AVERAGE_CDF(ctx_left->y_mode_cdf, ctx_tr->y_mode_cdf, INTRA_MODES);
 #endif  // CONFIG_AIMC
diff --git a/av1/encoder/intra_mode_search.c b/av1/encoder/intra_mode_search.c
index ab2c6d9..35ba94c 100644
--- a/av1/encoder/intra_mode_search.c
+++ b/av1/encoder/intra_mode_search.c
@@ -1532,11 +1532,15 @@
         mode_cost +=
             x->mode_costs.y_first_mode_costs[context][mbmi->y_mode_idx];
       } else {
+#if TEST_27
+        mode_cost += av1_cost_literal(4);
+#else
         mode_cost +=
             x->mode_costs
                 .y_second_mode_costs[context]
                                     [mbmi->y_mode_idx - FIRST_MODE_COUNT -
                                      SECOND_MODE_COUNT * (mode_set_index - 1)];
+#endif  // TEST_27
       }
       mode_cost += ref_frame_cost;
       mode_cost += mrl_idx_cost;
@@ -1552,11 +1556,15 @@
     if (mbmi->y_mode_idx < FIRST_MODE_COUNT) {
       mode_cost += x->mode_costs.y_first_mode_costs[context][mbmi->y_mode_idx];
     } else {
+#if TEST_27
+      mode_cost += av1_cost_literal(4);
+#else
       mode_cost +=
           x->mode_costs
               .y_second_mode_costs[context]
                                   [mbmi->y_mode_idx - FIRST_MODE_COUNT -
                                    SECOND_MODE_COUNT * (mode_set_index - 1)];
+#endif  // TEST_27
     }
     mode_cost += ref_frame_cost;
     mode_cost += mrl_idx_cost;
@@ -1569,11 +1577,15 @@
   if (mbmi->y_mode_idx < FIRST_MODE_COUNT) {
     mode_cost += x->mode_costs.y_first_mode_costs[context][mbmi->y_mode_idx];
   } else {
+#if TEST_27
+    mode_cost += av1_cost_literal(4);
+#else
     mode_cost +=
         x->mode_costs
             .y_second_mode_costs[context]
                                 [mbmi->y_mode_idx - FIRST_MODE_COUNT -
                                  SECOND_MODE_COUNT * (mode_set_index - 1)];
+#endif  // TEST_27
   }
 #if CONFIG_EXTENDED_SDP
   if (mbmi->region_type != INTRA_REGION)
@@ -1935,10 +1947,13 @@
           if (mode_idx < FIRST_MODE_COUNT) {
             mode_costs += x->mode_costs.y_first_mode_costs[context][mode_idx];
           } else {
-            mode_costs +=
-                x->mode_costs.y_second_mode_costs
-                    [context][mbmi->y_mode_idx - FIRST_MODE_COUNT -
-                              SECOND_MODE_COUNT * (mode_set_index - 1)];
+#if TEST_27
+            mode_costs += av1_cost_literal(4);
+#else
+          mode_costs += x->mode_costs.y_second_mode_costs
+                            [context][mbmi->y_mode_idx - FIRST_MODE_COUNT -
+                                      SECOND_MODE_COUNT * (mode_set_index - 1)];
+#endif  // TEST_27
           }
 #if CONFIG_LOSSLESS_DPCM
         } else {
@@ -2257,10 +2272,13 @@
           if (mode_idx < FIRST_MODE_COUNT) {
             mode_costs += x->mode_costs.y_first_mode_costs[context][mode_idx];
           } else {
-            mode_costs +=
-                x->mode_costs.y_second_mode_costs
-                    [context][mbmi->y_mode_idx - FIRST_MODE_COUNT -
-                              SECOND_MODE_COUNT * (mode_set_index - 1)];
+#if TEST_27
+            mode_costs += av1_cost_literal(4);
+#else
+          mode_costs += x->mode_costs.y_second_mode_costs
+                            [context][mbmi->y_mode_idx - FIRST_MODE_COUNT -
+                                      SECOND_MODE_COUNT * (mode_set_index - 1)];
+#endif  // TEST_27
           }
 #if CONFIG_LOSSLESS_DPCM
         } else {
diff --git a/av1/encoder/rd.c b/av1/encoder/rd.c
index 3d0d244..75c660c 100644
--- a/av1/encoder/rd.c
+++ b/av1/encoder/rd.c
@@ -208,8 +208,10 @@
     // y mode costs
     av1_cost_tokens_from_cdf(mode_costs->y_first_mode_costs[i],
                              fc->y_mode_idx_cdf_0[i], NULL);
+#if !TEST_27
     av1_cost_tokens_from_cdf(mode_costs->y_second_mode_costs[i],
                              fc->y_mode_idx_cdf_1[i], NULL);
+#endif  // !TEST_27
   }
 #else
   for (i = 0; i < KF_MODE_CONTEXTS; ++i)