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