xref: /aosp_15_r20/external/libgav1/src/symbol_decoder_context.h (revision 095378508e87ed692bf8dfeb34008b65b3735891)
1*09537850SAkhilesh Sanikop /*
2*09537850SAkhilesh Sanikop  * Copyright 2019 The libgav1 Authors
3*09537850SAkhilesh Sanikop  *
4*09537850SAkhilesh Sanikop  * Licensed under the Apache License, Version 2.0 (the "License");
5*09537850SAkhilesh Sanikop  * you may not use this file except in compliance with the License.
6*09537850SAkhilesh Sanikop  * You may obtain a copy of the License at
7*09537850SAkhilesh Sanikop  *
8*09537850SAkhilesh Sanikop  *      http://www.apache.org/licenses/LICENSE-2.0
9*09537850SAkhilesh Sanikop  *
10*09537850SAkhilesh Sanikop  * Unless required by applicable law or agreed to in writing, software
11*09537850SAkhilesh Sanikop  * distributed under the License is distributed on an "AS IS" BASIS,
12*09537850SAkhilesh Sanikop  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*09537850SAkhilesh Sanikop  * See the License for the specific language governing permissions and
14*09537850SAkhilesh Sanikop  * limitations under the License.
15*09537850SAkhilesh Sanikop  */
16*09537850SAkhilesh Sanikop 
17*09537850SAkhilesh Sanikop #ifndef LIBGAV1_SRC_SYMBOL_DECODER_CONTEXT_H_
18*09537850SAkhilesh Sanikop #define LIBGAV1_SRC_SYMBOL_DECODER_CONTEXT_H_
19*09537850SAkhilesh Sanikop 
20*09537850SAkhilesh Sanikop #include <cassert>
21*09537850SAkhilesh Sanikop #include <cstdint>
22*09537850SAkhilesh Sanikop 
23*09537850SAkhilesh Sanikop #include "src/dsp/constants.h"
24*09537850SAkhilesh Sanikop #include "src/utils/constants.h"
25*09537850SAkhilesh Sanikop #include "src/utils/memory.h"
26*09537850SAkhilesh Sanikop 
27*09537850SAkhilesh Sanikop namespace libgav1 {
28*09537850SAkhilesh Sanikop 
29*09537850SAkhilesh Sanikop enum {
30*09537850SAkhilesh Sanikop   kPartitionContexts = 4,
31*09537850SAkhilesh Sanikop   kSegmentIdContexts = 3,
32*09537850SAkhilesh Sanikop   kUsePredictedSegmentIdContexts = 3,
33*09537850SAkhilesh Sanikop   kSkipContexts = 3,
34*09537850SAkhilesh Sanikop   kSkipModeContexts = 3,
35*09537850SAkhilesh Sanikop   kBooleanFieldCdfSize = 3,
36*09537850SAkhilesh Sanikop   kDeltaSymbolCount = 4,  // Used for both delta_q and delta_lf.
37*09537850SAkhilesh Sanikop   kIntraModeContexts = 5,
38*09537850SAkhilesh Sanikop   kYModeContexts = 4,
39*09537850SAkhilesh Sanikop   kAngleDeltaSymbolCount = 2 * kMaxAngleDelta + 1,
40*09537850SAkhilesh Sanikop   kCflAlphaSignsSymbolCount = 8,
41*09537850SAkhilesh Sanikop   kCflAlphaContexts = 6,
42*09537850SAkhilesh Sanikop   kCflAlphaSymbolCount = 16,
43*09537850SAkhilesh Sanikop   kTxDepthContexts = 3,
44*09537850SAkhilesh Sanikop   kMaxTxDepthSymbolCount = 3,
45*09537850SAkhilesh Sanikop   kTxSplitContexts = 21,
46*09537850SAkhilesh Sanikop   kCoefficientQuantizerContexts = 4,
47*09537850SAkhilesh Sanikop   kNumSquareTransformSizes = 5,
48*09537850SAkhilesh Sanikop   kAllZeroContexts = 13,
49*09537850SAkhilesh Sanikop   kNumExtendedTransformSizes = 4,
50*09537850SAkhilesh Sanikop   kEobPtContexts = 2,
51*09537850SAkhilesh Sanikop   kEobPt16SymbolCount = 5,
52*09537850SAkhilesh Sanikop   kEobPt32SymbolCount = 6,
53*09537850SAkhilesh Sanikop   kEobPt64SymbolCount = 7,
54*09537850SAkhilesh Sanikop   kEobPt128SymbolCount = 8,
55*09537850SAkhilesh Sanikop   kEobPt256SymbolCount = 9,
56*09537850SAkhilesh Sanikop   kEobPt512SymbolCount = 10,
57*09537850SAkhilesh Sanikop   kEobPt1024SymbolCount = 11,
58*09537850SAkhilesh Sanikop   kEobExtraContexts = 9,
59*09537850SAkhilesh Sanikop   kCoeffBaseEobContexts = 4,
60*09537850SAkhilesh Sanikop   kCoeffBaseEobSymbolCount = 3,
61*09537850SAkhilesh Sanikop   kCoeffBaseContexts = 42,
62*09537850SAkhilesh Sanikop   kCoeffBaseSymbolCount = 4,
63*09537850SAkhilesh Sanikop   kCoeffBaseRangeContexts = 21,
64*09537850SAkhilesh Sanikop   kCoeffBaseRangeSymbolCount = 4,
65*09537850SAkhilesh Sanikop   kDcSignContexts = 3,
66*09537850SAkhilesh Sanikop   kPaletteBlockSizeContexts = 7,
67*09537850SAkhilesh Sanikop   kPaletteYModeContexts = 3,
68*09537850SAkhilesh Sanikop   kPaletteUVModeContexts = 2,
69*09537850SAkhilesh Sanikop   kPaletteSizeSymbolCount = 7,
70*09537850SAkhilesh Sanikop   kPaletteColorIndexContexts = 5,
71*09537850SAkhilesh Sanikop   kPaletteColorIndexSymbolCount = 8,
72*09537850SAkhilesh Sanikop   kIsInterContexts = 4,
73*09537850SAkhilesh Sanikop   kUseCompoundReferenceContexts = 5,
74*09537850SAkhilesh Sanikop   kCompoundReferenceTypeContexts = 5,
75*09537850SAkhilesh Sanikop   kReferenceContexts = 3,
76*09537850SAkhilesh Sanikop   kCompoundPredictionModeContexts = 8,
77*09537850SAkhilesh Sanikop   kNewMvContexts = 6,
78*09537850SAkhilesh Sanikop   kZeroMvContexts = 2,
79*09537850SAkhilesh Sanikop   kReferenceMvContexts = 6,
80*09537850SAkhilesh Sanikop   kRefMvIndexContexts = 3,
81*09537850SAkhilesh Sanikop   kInterIntraContexts = 3,
82*09537850SAkhilesh Sanikop   kWedgeIndexSymbolCount = 16,
83*09537850SAkhilesh Sanikop   kIsExplicitCompoundTypeContexts = 6,
84*09537850SAkhilesh Sanikop   kIsCompoundTypeAverageContexts = 6,
85*09537850SAkhilesh Sanikop   kInterpolationFilterContexts = 16,
86*09537850SAkhilesh Sanikop   kMvContexts = 2,
87*09537850SAkhilesh Sanikop   kMvClassSymbolCount = 11,
88*09537850SAkhilesh Sanikop   kMvFractionSymbolCount = 4,
89*09537850SAkhilesh Sanikop   kMvBitSymbolCount = 10,
90*09537850SAkhilesh Sanikop   kNumMvComponents = 2,
91*09537850SAkhilesh Sanikop };  // anonymous enum
92*09537850SAkhilesh Sanikop 
93*09537850SAkhilesh Sanikop struct SymbolDecoderContext {
94*09537850SAkhilesh Sanikop   SymbolDecoderContext() = default;
SymbolDecoderContextSymbolDecoderContext95*09537850SAkhilesh Sanikop   explicit SymbolDecoderContext(int base_quantizer_index) {
96*09537850SAkhilesh Sanikop     Initialize(base_quantizer_index);
97*09537850SAkhilesh Sanikop   }
98*09537850SAkhilesh Sanikop 
99*09537850SAkhilesh Sanikop   void Initialize(int base_quantizer_index);
100*09537850SAkhilesh Sanikop 
101*09537850SAkhilesh Sanikop   // Partition related variables and functions.
102*09537850SAkhilesh Sanikop   static int PartitionCdfSize(int block_size_log2);
103*09537850SAkhilesh Sanikop 
104*09537850SAkhilesh Sanikop   // Returns the cdf array index for inter_tx_type or intra_tx_type based on
105*09537850SAkhilesh Sanikop   // |tx_set|.
TxTypeIndexSymbolDecoderContext106*09537850SAkhilesh Sanikop   static int TxTypeIndex(TransformSet tx_set) {
107*09537850SAkhilesh Sanikop     assert(tx_set != kTransformSetDctOnly);
108*09537850SAkhilesh Sanikop     switch (tx_set) {
109*09537850SAkhilesh Sanikop       case kTransformSetInter1:
110*09537850SAkhilesh Sanikop       case kTransformSetIntra1:
111*09537850SAkhilesh Sanikop         return 0;
112*09537850SAkhilesh Sanikop       case kTransformSetInter2:
113*09537850SAkhilesh Sanikop       case kTransformSetIntra2:
114*09537850SAkhilesh Sanikop         return 1;
115*09537850SAkhilesh Sanikop       case kTransformSetInter3:
116*09537850SAkhilesh Sanikop         return 2;
117*09537850SAkhilesh Sanikop       default:
118*09537850SAkhilesh Sanikop         return -1;
119*09537850SAkhilesh Sanikop     }
120*09537850SAkhilesh Sanikop   }
121*09537850SAkhilesh Sanikop 
122*09537850SAkhilesh Sanikop   // Resets the intra_frame_y_mode_cdf array to the default.
123*09537850SAkhilesh Sanikop   void ResetIntraFrameYModeCdf();
124*09537850SAkhilesh Sanikop 
125*09537850SAkhilesh Sanikop   // Resets the symbol counters of all the CDF arrays to zero. Symbol counter is
126*09537850SAkhilesh Sanikop   // the last used element in the innermost dimension of each of the CDF array.
127*09537850SAkhilesh Sanikop   void ResetCounters();
128*09537850SAkhilesh Sanikop 
129*09537850SAkhilesh Sanikop   // Note kMaxAlignment allows for aligned instructions to be used in the
130*09537850SAkhilesh Sanikop   // copies done in Initialize().
131*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
132*09537850SAkhilesh Sanikop       partition_cdf[kBlockWidthCount][kPartitionContexts]
133*09537850SAkhilesh Sanikop                    [kMaxPartitionTypes + 1];
134*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
135*09537850SAkhilesh Sanikop       segment_id_cdf[kSegmentIdContexts][kMaxSegments + 1];
136*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
137*09537850SAkhilesh Sanikop       use_predicted_segment_id_cdf[kUsePredictedSegmentIdContexts]
138*09537850SAkhilesh Sanikop                                   [kBooleanFieldCdfSize];
139*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t skip_cdf[kSkipContexts][kBooleanFieldCdfSize];
140*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
141*09537850SAkhilesh Sanikop       skip_mode_cdf[kSkipModeContexts][kBooleanFieldCdfSize];
142*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t delta_q_cdf[kDeltaSymbolCount + 1];
143*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t delta_lf_cdf[kDeltaSymbolCount + 1];
144*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
145*09537850SAkhilesh Sanikop       delta_lf_multi_cdf[kFrameLfCount][kDeltaSymbolCount + 1];
146*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t intra_block_copy_cdf[kBooleanFieldCdfSize];
147*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
148*09537850SAkhilesh Sanikop       intra_frame_y_mode_cdf[kIntraModeContexts][kIntraModeContexts]
149*09537850SAkhilesh Sanikop                             [kIntraPredictionModesY + 1];
150*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
151*09537850SAkhilesh Sanikop       y_mode_cdf[kYModeContexts][kIntraPredictionModesY + 1];
152*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
153*09537850SAkhilesh Sanikop       angle_delta_cdf[kDirectionalIntraModes][kAngleDeltaSymbolCount + 1];
154*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
155*09537850SAkhilesh Sanikop       uv_mode_cdf[kBooleanSymbolCount][kIntraPredictionModesY]
156*09537850SAkhilesh Sanikop                  [kIntraPredictionModesUV + 1];
157*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
158*09537850SAkhilesh Sanikop       cfl_alpha_signs_cdf[kCflAlphaSignsSymbolCount + 1];
159*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
160*09537850SAkhilesh Sanikop       cfl_alpha_cdf[kCflAlphaContexts][kCflAlphaSymbolCount + 1];
161*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
162*09537850SAkhilesh Sanikop       use_filter_intra_cdf[kMaxBlockSizes][kBooleanFieldCdfSize];
163*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
164*09537850SAkhilesh Sanikop       filter_intra_mode_cdf[kNumFilterIntraPredictors + 1];
165*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
166*09537850SAkhilesh Sanikop       tx_depth_cdf[4][kTxDepthContexts][kMaxTxDepthSymbolCount + 1];
167*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
168*09537850SAkhilesh Sanikop       tx_split_cdf[kTxSplitContexts][kBooleanFieldCdfSize];
169*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
170*09537850SAkhilesh Sanikop       all_zero_cdf[kNumSquareTransformSizes][kAllZeroContexts]
171*09537850SAkhilesh Sanikop                   [kBooleanFieldCdfSize];
172*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
173*09537850SAkhilesh Sanikop       inter_tx_type_cdf[3][kNumExtendedTransformSizes][kNumTransformTypes + 1];
174*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
175*09537850SAkhilesh Sanikop       intra_tx_type_cdf[2][kNumExtendedTransformSizes][kIntraPredictionModesY]
176*09537850SAkhilesh Sanikop                        [kNumTransformTypes + 1];
177*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
178*09537850SAkhilesh Sanikop       eob_pt_16_cdf[kNumPlaneTypes][kEobPtContexts][kEobPt16SymbolCount + 1];
179*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
180*09537850SAkhilesh Sanikop       eob_pt_32_cdf[kNumPlaneTypes][kEobPtContexts][kEobPt32SymbolCount + 1];
181*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
182*09537850SAkhilesh Sanikop       eob_pt_64_cdf[kNumPlaneTypes][kEobPtContexts][kEobPt64SymbolCount + 1];
183*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
184*09537850SAkhilesh Sanikop       eob_pt_128_cdf[kNumPlaneTypes][kEobPtContexts][kEobPt128SymbolCount + 1];
185*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
186*09537850SAkhilesh Sanikop       eob_pt_256_cdf[kNumPlaneTypes][kEobPtContexts][kEobPt256SymbolCount + 1];
187*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
188*09537850SAkhilesh Sanikop       eob_pt_512_cdf[kNumPlaneTypes][kEobPt512SymbolCount + 1];
189*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
190*09537850SAkhilesh Sanikop       eob_pt_1024_cdf[kNumPlaneTypes][kEobPt1024SymbolCount + 1];
191*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
192*09537850SAkhilesh Sanikop       eob_extra_cdf[kNumSquareTransformSizes][kNumPlaneTypes][kEobExtraContexts]
193*09537850SAkhilesh Sanikop                    [kBooleanFieldCdfSize];
194*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
195*09537850SAkhilesh Sanikop       coeff_base_eob_cdf[kNumSquareTransformSizes][kNumPlaneTypes]
196*09537850SAkhilesh Sanikop                         [kCoeffBaseEobContexts][kCoeffBaseEobSymbolCount + 1];
197*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
198*09537850SAkhilesh Sanikop       coeff_base_cdf[kNumSquareTransformSizes][kNumPlaneTypes]
199*09537850SAkhilesh Sanikop                     [kCoeffBaseContexts][kCoeffBaseSymbolCount + 1];
200*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
201*09537850SAkhilesh Sanikop       coeff_base_range_cdf[kNumSquareTransformSizes][kNumPlaneTypes]
202*09537850SAkhilesh Sanikop                           [kCoeffBaseRangeContexts]
203*09537850SAkhilesh Sanikop                           [kCoeffBaseRangeSymbolCount + 1];
204*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
205*09537850SAkhilesh Sanikop       dc_sign_cdf[kNumPlaneTypes][kDcSignContexts][kBooleanFieldCdfSize];
206*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
207*09537850SAkhilesh Sanikop       restoration_type_cdf[kRestorationTypeSymbolCount + 1];
208*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t use_wiener_cdf[kBooleanFieldCdfSize];
209*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t use_sgrproj_cdf[kBooleanFieldCdfSize];
210*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
211*09537850SAkhilesh Sanikop       has_palette_y_cdf[kPaletteBlockSizeContexts][kPaletteYModeContexts]
212*09537850SAkhilesh Sanikop                        [kBooleanFieldCdfSize];
213*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
214*09537850SAkhilesh Sanikop       palette_y_size_cdf[kPaletteBlockSizeContexts]
215*09537850SAkhilesh Sanikop                         [kPaletteSizeSymbolCount + 1];
216*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
217*09537850SAkhilesh Sanikop       has_palette_uv_cdf[kPaletteUVModeContexts][kBooleanFieldCdfSize];
218*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
219*09537850SAkhilesh Sanikop       palette_uv_size_cdf[kPaletteBlockSizeContexts]
220*09537850SAkhilesh Sanikop                          [kPaletteSizeSymbolCount + 1];
221*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
222*09537850SAkhilesh Sanikop       palette_color_index_cdf[kNumPlaneTypes][kPaletteSizeSymbolCount]
223*09537850SAkhilesh Sanikop                              [kPaletteColorIndexContexts]
224*09537850SAkhilesh Sanikop                              [kPaletteColorIndexSymbolCount + 1];
225*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
226*09537850SAkhilesh Sanikop       is_inter_cdf[kIsInterContexts][kBooleanFieldCdfSize];
227*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
228*09537850SAkhilesh Sanikop       use_compound_reference_cdf[kUseCompoundReferenceContexts]
229*09537850SAkhilesh Sanikop                                 [kBooleanFieldCdfSize];
230*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
231*09537850SAkhilesh Sanikop       compound_reference_type_cdf[kCompoundReferenceTypeContexts]
232*09537850SAkhilesh Sanikop                                  [kBooleanFieldCdfSize];
233*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
234*09537850SAkhilesh Sanikop       compound_reference_cdf[kNumCompoundReferenceTypes][kReferenceContexts][3]
235*09537850SAkhilesh Sanikop                             [kBooleanFieldCdfSize];
236*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
237*09537850SAkhilesh Sanikop       compound_backward_reference_cdf[kReferenceContexts][2]
238*09537850SAkhilesh Sanikop                                      [kBooleanFieldCdfSize];
239*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
240*09537850SAkhilesh Sanikop       single_reference_cdf[kReferenceContexts][6][kBooleanFieldCdfSize];
241*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
242*09537850SAkhilesh Sanikop       compound_prediction_mode_cdf[kCompoundPredictionModeContexts]
243*09537850SAkhilesh Sanikop                                   [kNumCompoundInterPredictionModes + 1];
244*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
245*09537850SAkhilesh Sanikop       new_mv_cdf[kNewMvContexts][kBooleanFieldCdfSize];
246*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
247*09537850SAkhilesh Sanikop       zero_mv_cdf[kZeroMvContexts][kBooleanFieldCdfSize];
248*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
249*09537850SAkhilesh Sanikop       reference_mv_cdf[kReferenceMvContexts][kBooleanFieldCdfSize];
250*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
251*09537850SAkhilesh Sanikop       ref_mv_index_cdf[kRefMvIndexContexts][kBooleanFieldCdfSize];
252*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
253*09537850SAkhilesh Sanikop       is_inter_intra_cdf[kInterIntraContexts][kBooleanFieldCdfSize];
254*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
255*09537850SAkhilesh Sanikop       inter_intra_mode_cdf[kInterIntraContexts][kNumInterIntraModes + 1];
256*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
257*09537850SAkhilesh Sanikop       is_wedge_inter_intra_cdf[kMaxBlockSizes][kBooleanFieldCdfSize];
258*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
259*09537850SAkhilesh Sanikop       wedge_index_cdf[kMaxBlockSizes][kWedgeIndexSymbolCount + 1];
260*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
261*09537850SAkhilesh Sanikop       use_obmc_cdf[kMaxBlockSizes][kBooleanFieldCdfSize];
262*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
263*09537850SAkhilesh Sanikop       motion_mode_cdf[kMaxBlockSizes][kNumMotionModes + 1];
264*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
265*09537850SAkhilesh Sanikop       is_explicit_compound_type_cdf[kIsExplicitCompoundTypeContexts]
266*09537850SAkhilesh Sanikop                                    [kBooleanFieldCdfSize];
267*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
268*09537850SAkhilesh Sanikop       is_compound_type_average_cdf[kIsCompoundTypeAverageContexts]
269*09537850SAkhilesh Sanikop                                   [kBooleanFieldCdfSize];
270*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
271*09537850SAkhilesh Sanikop       compound_type_cdf[kMaxBlockSizes]
272*09537850SAkhilesh Sanikop                        [kNumExplicitCompoundPredictionTypes + 1];
273*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
274*09537850SAkhilesh Sanikop       interpolation_filter_cdf[kInterpolationFilterContexts]
275*09537850SAkhilesh Sanikop                               [kNumExplicitInterpolationFilters + 1];
276*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
277*09537850SAkhilesh Sanikop       mv_joint_cdf[kMvContexts][kNumMvJointTypes + 1];
278*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
279*09537850SAkhilesh Sanikop       mv_sign_cdf[kMvContexts][kNumMvComponents][kBooleanFieldCdfSize];
280*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
281*09537850SAkhilesh Sanikop       mv_class_cdf[kMvContexts][kNumMvComponents][kMvClassSymbolCount + 1];
282*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
283*09537850SAkhilesh Sanikop       mv_class0_bit_cdf[kMvContexts][kNumMvComponents][kBooleanFieldCdfSize];
284*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
285*09537850SAkhilesh Sanikop       mv_class0_fraction_cdf[kMvContexts][kNumMvComponents][kBooleanSymbolCount]
286*09537850SAkhilesh Sanikop                             [kMvFractionSymbolCount + 1];
287*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
288*09537850SAkhilesh Sanikop       mv_class0_high_precision_cdf[kMvContexts][kNumMvComponents]
289*09537850SAkhilesh Sanikop                                   [kBooleanFieldCdfSize];
290*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
291*09537850SAkhilesh Sanikop       mv_bit_cdf[kMvContexts][kNumMvComponents][kMvBitSymbolCount]
292*09537850SAkhilesh Sanikop                 [kBooleanFieldCdfSize];
293*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t mv_fraction_cdf[kMvContexts][kNumMvComponents]
294*09537850SAkhilesh Sanikop                                                  [kMvFractionSymbolCount + 1];
295*09537850SAkhilesh Sanikop   alignas(kMaxAlignment) uint16_t
296*09537850SAkhilesh Sanikop       mv_high_precision_cdf[kMvContexts][kNumMvComponents]
297*09537850SAkhilesh Sanikop                            [kBooleanFieldCdfSize];
298*09537850SAkhilesh Sanikop };
299*09537850SAkhilesh Sanikop 
300*09537850SAkhilesh Sanikop }  // namespace libgav1
301*09537850SAkhilesh Sanikop #endif  // LIBGAV1_SRC_SYMBOL_DECODER_CONTEXT_H_
302