xref: /aosp_15_r20/external/libgav1/src/symbol_decoder_context_test.cc (revision 095378508e87ed692bf8dfeb34008b65b3735891)
1*09537850SAkhilesh Sanikop // Copyright 2021 The libgav1 Authors
2*09537850SAkhilesh Sanikop //
3*09537850SAkhilesh Sanikop // Licensed under the Apache License, Version 2.0 (the "License");
4*09537850SAkhilesh Sanikop // you may not use this file except in compliance with the License.
5*09537850SAkhilesh Sanikop // You may obtain a copy of the License at
6*09537850SAkhilesh Sanikop //
7*09537850SAkhilesh Sanikop //      http://www.apache.org/licenses/LICENSE-2.0
8*09537850SAkhilesh Sanikop //
9*09537850SAkhilesh Sanikop // Unless required by applicable law or agreed to in writing, software
10*09537850SAkhilesh Sanikop // distributed under the License is distributed on an "AS IS" BASIS,
11*09537850SAkhilesh Sanikop // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*09537850SAkhilesh Sanikop // See the License for the specific language governing permissions and
13*09537850SAkhilesh Sanikop // limitations under the License.
14*09537850SAkhilesh Sanikop 
15*09537850SAkhilesh Sanikop #include "src/symbol_decoder_context.h"
16*09537850SAkhilesh Sanikop 
17*09537850SAkhilesh Sanikop #include <cstdint>
18*09537850SAkhilesh Sanikop #include <cstring>
19*09537850SAkhilesh Sanikop 
20*09537850SAkhilesh Sanikop #include "gtest/gtest.h"
21*09537850SAkhilesh Sanikop #include "src/utils/constants.h"
22*09537850SAkhilesh Sanikop 
23*09537850SAkhilesh Sanikop namespace libgav1 {
24*09537850SAkhilesh Sanikop namespace {
25*09537850SAkhilesh Sanikop 
TEST(SymbolDecoderContextTest,ResetIntraFrameYModeCdf)26*09537850SAkhilesh Sanikop TEST(SymbolDecoderContextTest, ResetIntraFrameYModeCdf) {
27*09537850SAkhilesh Sanikop   // Note these are zero-initialized separately to avoid differences in padding
28*09537850SAkhilesh Sanikop   // values added to tables for alignment purposes when comparing the contexts
29*09537850SAkhilesh Sanikop   // with memcmp().
30*09537850SAkhilesh Sanikop   libgav1::SymbolDecoderContext gold_context = {};
31*09537850SAkhilesh Sanikop   libgav1::SymbolDecoderContext context = {};
32*09537850SAkhilesh Sanikop   gold_context.Initialize(0);
33*09537850SAkhilesh Sanikop   context.Initialize(0);
34*09537850SAkhilesh Sanikop   EXPECT_EQ(memcmp(&gold_context, &context, sizeof(gold_context)), 0);
35*09537850SAkhilesh Sanikop   EXPECT_EQ(context.intra_frame_y_mode_cdf[0][0][0], 32768 - 15588);
36*09537850SAkhilesh Sanikop   EXPECT_EQ(context.intra_frame_y_mode_cdf[0][0][1], 32768 - 17027);
37*09537850SAkhilesh Sanikop   ++context.intra_frame_y_mode_cdf[0][0][0];
38*09537850SAkhilesh Sanikop   --context.intra_frame_y_mode_cdf[0][0][1];
39*09537850SAkhilesh Sanikop   EXPECT_NE(memcmp(&gold_context, &context, sizeof(gold_context)), 0);
40*09537850SAkhilesh Sanikop   context.ResetIntraFrameYModeCdf();
41*09537850SAkhilesh Sanikop   EXPECT_EQ(memcmp(&gold_context, &context, sizeof(gold_context)), 0);
42*09537850SAkhilesh Sanikop }
43*09537850SAkhilesh Sanikop 
ResetAndVerifyCounters(libgav1::SymbolDecoderContext * const context)44*09537850SAkhilesh Sanikop void ResetAndVerifyCounters(libgav1::SymbolDecoderContext* const context) {
45*09537850SAkhilesh Sanikop   libgav1::SymbolDecoderContext gold_context = {};
46*09537850SAkhilesh Sanikop   gold_context.Initialize(0);
47*09537850SAkhilesh Sanikop   EXPECT_NE(memcmp(&gold_context, context, sizeof(gold_context)), 0);
48*09537850SAkhilesh Sanikop   context->ResetCounters();
49*09537850SAkhilesh Sanikop   EXPECT_EQ(memcmp(&gold_context, context, sizeof(gold_context)), 0);
50*09537850SAkhilesh Sanikop }
51*09537850SAkhilesh Sanikop 
TEST(SymbolDecoderContextTest,ResetCounters1d)52*09537850SAkhilesh Sanikop TEST(SymbolDecoderContextTest, ResetCounters1d) {
53*09537850SAkhilesh Sanikop   libgav1::SymbolDecoderContext context = {};
54*09537850SAkhilesh Sanikop   context.Initialize(0);
55*09537850SAkhilesh Sanikop   int value = 0;
56*09537850SAkhilesh Sanikop   context.delta_q_cdf[libgav1::kDeltaSymbolCount] = ++value;
57*09537850SAkhilesh Sanikop   context.delta_lf_cdf[libgav1::kDeltaSymbolCount] = ++value;
58*09537850SAkhilesh Sanikop   context.intra_block_copy_cdf[libgav1::kBooleanSymbolCount] = ++value;
59*09537850SAkhilesh Sanikop   context.cfl_alpha_signs_cdf[libgav1::kCflAlphaSignsSymbolCount] = ++value;
60*09537850SAkhilesh Sanikop   context.filter_intra_mode_cdf[libgav1::kNumFilterIntraPredictors] = ++value;
61*09537850SAkhilesh Sanikop   context.restoration_type_cdf[libgav1::kRestorationTypeSymbolCount] = ++value;
62*09537850SAkhilesh Sanikop   context.use_wiener_cdf[libgav1::kBooleanSymbolCount] = ++value;
63*09537850SAkhilesh Sanikop   context.use_sgrproj_cdf[libgav1::kBooleanSymbolCount] = ++value;
64*09537850SAkhilesh Sanikop   ResetAndVerifyCounters(&context);
65*09537850SAkhilesh Sanikop }
66*09537850SAkhilesh Sanikop 
IncreasePartitionCounters(SymbolDecoderContext * symbol_context,int value)67*09537850SAkhilesh Sanikop void IncreasePartitionCounters(SymbolDecoderContext* symbol_context,
68*09537850SAkhilesh Sanikop                                int value) {
69*09537850SAkhilesh Sanikop   const int min_bsize_log2 = k4x4WidthLog2[kBlock8x8];
70*09537850SAkhilesh Sanikop   const int max_bsize_log2 = k4x4WidthLog2[kBlock128x128];
71*09537850SAkhilesh Sanikop   for (int block_size_log2 = min_bsize_log2; block_size_log2 <= max_bsize_log2;
72*09537850SAkhilesh Sanikop        ++block_size_log2) {
73*09537850SAkhilesh Sanikop     for (int context = 0; context < kPartitionContexts; ++context) {
74*09537850SAkhilesh Sanikop       const int cdf_size =
75*09537850SAkhilesh Sanikop           SymbolDecoderContext::PartitionCdfSize(block_size_log2);
76*09537850SAkhilesh Sanikop       symbol_context->partition_cdf[block_size_log2 - min_bsize_log2][context]
77*09537850SAkhilesh Sanikop                                    [cdf_size] += value;
78*09537850SAkhilesh Sanikop     }
79*09537850SAkhilesh Sanikop   }
80*09537850SAkhilesh Sanikop }
81*09537850SAkhilesh Sanikop 
IncreasePaletteColorIndexCounters(SymbolDecoderContext * symbol_context,int value)82*09537850SAkhilesh Sanikop void IncreasePaletteColorIndexCounters(SymbolDecoderContext* symbol_context,
83*09537850SAkhilesh Sanikop                                        int value) {
84*09537850SAkhilesh Sanikop   for (auto& palette_color_index_cdf_plane :
85*09537850SAkhilesh Sanikop        symbol_context->palette_color_index_cdf) {
86*09537850SAkhilesh Sanikop     for (int symbol_count = 0; symbol_count < kPaletteSizeSymbolCount;
87*09537850SAkhilesh Sanikop          ++symbol_count) {
88*09537850SAkhilesh Sanikop       const int cdf_size = symbol_count + kMinPaletteSize;
89*09537850SAkhilesh Sanikop       for (int context = 0; context < kPaletteColorIndexContexts; ++context) {
90*09537850SAkhilesh Sanikop         palette_color_index_cdf_plane[symbol_count][context][cdf_size] += value;
91*09537850SAkhilesh Sanikop       }
92*09537850SAkhilesh Sanikop     }
93*09537850SAkhilesh Sanikop   }
94*09537850SAkhilesh Sanikop }
95*09537850SAkhilesh Sanikop 
IncreaseTxTypeCounters(SymbolDecoderContext * context,int value)96*09537850SAkhilesh Sanikop void IncreaseTxTypeCounters(SymbolDecoderContext* context, int value) {
97*09537850SAkhilesh Sanikop   for (int set_idx = kTransformSetIntra1; set_idx <= kTransformSetIntra2;
98*09537850SAkhilesh Sanikop        ++set_idx) {
99*09537850SAkhilesh Sanikop     auto tx_set = static_cast<TransformSet>(set_idx);
100*09537850SAkhilesh Sanikop     for (int tx_size = 0; tx_size < kNumExtendedTransformSizes; ++tx_size) {
101*09537850SAkhilesh Sanikop       for (int mode = 0; mode < kIntraPredictionModesY; ++mode) {
102*09537850SAkhilesh Sanikop         context->intra_tx_type_cdf[SymbolDecoderContext::TxTypeIndex(
103*09537850SAkhilesh Sanikop             tx_set)][tx_size][mode][kNumTransformTypesInSet[tx_set]] += value;
104*09537850SAkhilesh Sanikop       }
105*09537850SAkhilesh Sanikop     }
106*09537850SAkhilesh Sanikop   }
107*09537850SAkhilesh Sanikop 
108*09537850SAkhilesh Sanikop   for (int set_idx = kTransformSetInter1; set_idx <= kTransformSetInter3;
109*09537850SAkhilesh Sanikop        ++set_idx) {
110*09537850SAkhilesh Sanikop     auto tx_set = static_cast<TransformSet>(set_idx);
111*09537850SAkhilesh Sanikop     for (int tx_size = 0; tx_size < kNumExtendedTransformSizes; ++tx_size) {
112*09537850SAkhilesh Sanikop       context->inter_tx_type_cdf[SymbolDecoderContext::TxTypeIndex(tx_set)]
113*09537850SAkhilesh Sanikop                                 [tx_size][kNumTransformTypesInSet[tx_set]] +=
114*09537850SAkhilesh Sanikop           value;
115*09537850SAkhilesh Sanikop     }
116*09537850SAkhilesh Sanikop   }
117*09537850SAkhilesh Sanikop }
118*09537850SAkhilesh Sanikop 
IncreaseTxDepthCounters(SymbolDecoderContext * symbol_context,int value)119*09537850SAkhilesh Sanikop void IncreaseTxDepthCounters(SymbolDecoderContext* symbol_context, int value) {
120*09537850SAkhilesh Sanikop   for (int context = 0; context < kTxDepthContexts; ++context) {
121*09537850SAkhilesh Sanikop     symbol_context->tx_depth_cdf[0][context][kMaxTxDepthSymbolCount - 1] +=
122*09537850SAkhilesh Sanikop         value;
123*09537850SAkhilesh Sanikop   }
124*09537850SAkhilesh Sanikop 
125*09537850SAkhilesh Sanikop   for (int plane_category = 1; plane_category < 4; ++plane_category) {
126*09537850SAkhilesh Sanikop     for (int context = 0; context < kTxDepthContexts; ++context) {
127*09537850SAkhilesh Sanikop       symbol_context
128*09537850SAkhilesh Sanikop           ->tx_depth_cdf[plane_category][context][kMaxTxDepthSymbolCount] +=
129*09537850SAkhilesh Sanikop           value;
130*09537850SAkhilesh Sanikop     }
131*09537850SAkhilesh Sanikop   }
132*09537850SAkhilesh Sanikop }
133*09537850SAkhilesh Sanikop 
IncreaseUVModeCounters(SymbolDecoderContext * symbol_context,int value)134*09537850SAkhilesh Sanikop void IncreaseUVModeCounters(SymbolDecoderContext* symbol_context, int value) {
135*09537850SAkhilesh Sanikop   for (int cfl_allowed = 0; cfl_allowed < kBooleanSymbolCount; ++cfl_allowed) {
136*09537850SAkhilesh Sanikop     for (int mode = 0; mode < kIntraPredictionModesY; ++mode) {
137*09537850SAkhilesh Sanikop       symbol_context->uv_mode_cdf[cfl_allowed][mode][kIntraPredictionModesUV -
138*09537850SAkhilesh Sanikop                                                      (1 - cfl_allowed)] +=
139*09537850SAkhilesh Sanikop           value;
140*09537850SAkhilesh Sanikop     }
141*09537850SAkhilesh Sanikop   }
142*09537850SAkhilesh Sanikop }
143*09537850SAkhilesh Sanikop 
144*09537850SAkhilesh Sanikop #define ASSIGN_COUNTER_2D(array, offset) \
145*09537850SAkhilesh Sanikop   do {                                   \
146*09537850SAkhilesh Sanikop     for (auto& d1 : context.array) {     \
147*09537850SAkhilesh Sanikop       d1[libgav1::offset] = ++value;     \
148*09537850SAkhilesh Sanikop     }                                    \
149*09537850SAkhilesh Sanikop   } while (false)
150*09537850SAkhilesh Sanikop 
TEST(SymbolDecoderContextTest,ResetCounters2d)151*09537850SAkhilesh Sanikop TEST(SymbolDecoderContextTest, ResetCounters2d) {
152*09537850SAkhilesh Sanikop   libgav1::SymbolDecoderContext context = {};
153*09537850SAkhilesh Sanikop   context.Initialize(0);
154*09537850SAkhilesh Sanikop   int value = 0;
155*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(segment_id_cdf, kMaxSegments);
156*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(use_predicted_segment_id_cdf, kBooleanSymbolCount);
157*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(skip_cdf, kBooleanSymbolCount);
158*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(skip_mode_cdf, kBooleanSymbolCount);
159*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(delta_lf_multi_cdf, kDeltaSymbolCount);
160*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(y_mode_cdf, kIntraPredictionModesY);
161*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(angle_delta_cdf, kAngleDeltaSymbolCount);
162*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(cfl_alpha_cdf, kCflAlphaSymbolCount);
163*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(use_filter_intra_cdf, kBooleanSymbolCount);
164*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(tx_split_cdf, kBooleanSymbolCount);
165*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(eob_pt_512_cdf, kEobPt512SymbolCount);
166*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(eob_pt_1024_cdf, kEobPt1024SymbolCount);
167*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(palette_y_size_cdf, kPaletteSizeSymbolCount);
168*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(has_palette_uv_cdf, kBooleanSymbolCount);
169*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(palette_uv_size_cdf, kPaletteSizeSymbolCount);
170*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(is_inter_cdf, kBooleanSymbolCount);
171*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(use_compound_reference_cdf, kBooleanSymbolCount);
172*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(compound_reference_type_cdf, kBooleanSymbolCount);
173*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(compound_prediction_mode_cdf,
174*09537850SAkhilesh Sanikop                     kNumCompoundInterPredictionModes);
175*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(new_mv_cdf, kBooleanSymbolCount);
176*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(zero_mv_cdf, kBooleanSymbolCount);
177*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(reference_mv_cdf, kBooleanSymbolCount);
178*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(ref_mv_index_cdf, kBooleanSymbolCount);
179*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(is_inter_intra_cdf, kBooleanSymbolCount);
180*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(inter_intra_mode_cdf, kNumInterIntraModes);
181*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(is_wedge_inter_intra_cdf, kBooleanSymbolCount);
182*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(wedge_index_cdf, kWedgeIndexSymbolCount);
183*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(use_obmc_cdf, kBooleanSymbolCount);
184*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(motion_mode_cdf, kNumMotionModes);
185*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(is_explicit_compound_type_cdf, kBooleanSymbolCount);
186*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(is_compound_type_average_cdf, kBooleanSymbolCount);
187*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(compound_type_cdf, kNumExplicitCompoundPredictionTypes);
188*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(interpolation_filter_cdf, kNumExplicitInterpolationFilters);
189*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_2D(mv_joint_cdf, kNumMvJointTypes);
190*09537850SAkhilesh Sanikop   ResetAndVerifyCounters(&context);
191*09537850SAkhilesh Sanikop }
192*09537850SAkhilesh Sanikop 
193*09537850SAkhilesh Sanikop #undef ASSIGN_COUNTER_2D
194*09537850SAkhilesh Sanikop 
195*09537850SAkhilesh Sanikop #define ASSIGN_COUNTER_3D(array, offset) \
196*09537850SAkhilesh Sanikop   do {                                   \
197*09537850SAkhilesh Sanikop     for (auto& d1 : context.array) {     \
198*09537850SAkhilesh Sanikop       for (auto& d2 : d1) {              \
199*09537850SAkhilesh Sanikop         d2[libgav1::offset] = ++value;   \
200*09537850SAkhilesh Sanikop       }                                  \
201*09537850SAkhilesh Sanikop     }                                    \
202*09537850SAkhilesh Sanikop   } while (false)
203*09537850SAkhilesh Sanikop 
TEST(SymbolDecoderContextTest,ResetCounters3d)204*09537850SAkhilesh Sanikop TEST(SymbolDecoderContextTest, ResetCounters3d) {
205*09537850SAkhilesh Sanikop   libgav1::SymbolDecoderContext context = {};
206*09537850SAkhilesh Sanikop   context.Initialize(0);
207*09537850SAkhilesh Sanikop   int value = 0;
208*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_3D(intra_frame_y_mode_cdf, kIntraPredictionModesY);
209*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_3D(all_zero_cdf, kBooleanSymbolCount);
210*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_3D(eob_pt_16_cdf, kEobPt16SymbolCount);
211*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_3D(eob_pt_32_cdf, kEobPt32SymbolCount);
212*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_3D(eob_pt_64_cdf, kEobPt64SymbolCount);
213*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_3D(eob_pt_128_cdf, kEobPt128SymbolCount);
214*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_3D(eob_pt_256_cdf, kEobPt256SymbolCount);
215*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_3D(dc_sign_cdf, kBooleanSymbolCount);
216*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_3D(has_palette_y_cdf, kBooleanSymbolCount);
217*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_3D(compound_backward_reference_cdf, kBooleanSymbolCount);
218*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_3D(single_reference_cdf, kBooleanSymbolCount);
219*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_3D(mv_sign_cdf, kBooleanSymbolCount);
220*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_3D(mv_class_cdf, kMvClassSymbolCount);
221*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_3D(mv_class0_bit_cdf, kBooleanSymbolCount);
222*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_3D(mv_class0_high_precision_cdf, kBooleanSymbolCount);
223*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_3D(mv_fraction_cdf, kMvFractionSymbolCount);
224*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_3D(mv_high_precision_cdf, kBooleanSymbolCount);
225*09537850SAkhilesh Sanikop   IncreasePartitionCounters(&context, value);
226*09537850SAkhilesh Sanikop   IncreaseTxTypeCounters(&context, value);
227*09537850SAkhilesh Sanikop   IncreaseTxDepthCounters(&context, value);
228*09537850SAkhilesh Sanikop   IncreaseUVModeCounters(&context, value);
229*09537850SAkhilesh Sanikop   ResetAndVerifyCounters(&context);
230*09537850SAkhilesh Sanikop }
231*09537850SAkhilesh Sanikop 
232*09537850SAkhilesh Sanikop #undef ASSIGN_COUNTER_3D
233*09537850SAkhilesh Sanikop 
234*09537850SAkhilesh Sanikop #define ASSIGN_COUNTER_4D(array, offset) \
235*09537850SAkhilesh Sanikop   do {                                   \
236*09537850SAkhilesh Sanikop     for (auto& d1 : context.array) {     \
237*09537850SAkhilesh Sanikop       for (auto& d2 : d1) {              \
238*09537850SAkhilesh Sanikop         for (auto& d3 : d2) {            \
239*09537850SAkhilesh Sanikop           d3[libgav1::offset] = ++value; \
240*09537850SAkhilesh Sanikop         }                                \
241*09537850SAkhilesh Sanikop       }                                  \
242*09537850SAkhilesh Sanikop     }                                    \
243*09537850SAkhilesh Sanikop   } while (false)
244*09537850SAkhilesh Sanikop 
TEST(SymbolDecoderContextTest,ResetCounters4d)245*09537850SAkhilesh Sanikop TEST(SymbolDecoderContextTest, ResetCounters4d) {
246*09537850SAkhilesh Sanikop   libgav1::SymbolDecoderContext context = {};
247*09537850SAkhilesh Sanikop   context.Initialize(0);
248*09537850SAkhilesh Sanikop   int value = 0;
249*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_4D(eob_extra_cdf, kBooleanSymbolCount);
250*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_4D(coeff_base_eob_cdf, kCoeffBaseEobSymbolCount);
251*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_4D(coeff_base_cdf, kCoeffBaseSymbolCount);
252*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_4D(coeff_base_range_cdf, kCoeffBaseRangeSymbolCount);
253*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_4D(compound_reference_cdf, kBooleanSymbolCount);
254*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_4D(mv_class0_fraction_cdf, kMvFractionSymbolCount);
255*09537850SAkhilesh Sanikop   ASSIGN_COUNTER_4D(mv_bit_cdf, kBooleanSymbolCount);
256*09537850SAkhilesh Sanikop   IncreasePaletteColorIndexCounters(&context, value);
257*09537850SAkhilesh Sanikop   IncreaseTxTypeCounters(&context, value);
258*09537850SAkhilesh Sanikop   ResetAndVerifyCounters(&context);
259*09537850SAkhilesh Sanikop }
260*09537850SAkhilesh Sanikop 
261*09537850SAkhilesh Sanikop #undef ASSIGN_COUNTER_4D
262*09537850SAkhilesh Sanikop 
263*09537850SAkhilesh Sanikop }  // namespace
264*09537850SAkhilesh Sanikop }  // namespace libgav1
265