xref: /rockchip-linux_mpp/mpp/codec/dec/av1/av1d_common.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka  * Copyright 2021 Rockchip Electronics Co. LTD
3*437bfbebSnyanmisaka  *
4*437bfbebSnyanmisaka  * Licensed under the Apache License, Version 2.0 (the "License");
5*437bfbebSnyanmisaka  * you may not use this file except in compliance with the License.
6*437bfbebSnyanmisaka  * You may obtain a copy of the License at
7*437bfbebSnyanmisaka  *
8*437bfbebSnyanmisaka  *      http://www.apache.org/licenses/LICENSE-2.0
9*437bfbebSnyanmisaka  *
10*437bfbebSnyanmisaka  * Unless required by applicable law or agreed to in writing, software
11*437bfbebSnyanmisaka  * distributed under the License is distributed on an "AS IS" BASIS,
12*437bfbebSnyanmisaka  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*437bfbebSnyanmisaka  * See the License for the specific language governing permissions and
14*437bfbebSnyanmisaka  * limitations under the License.
15*437bfbebSnyanmisaka  */
16*437bfbebSnyanmisaka 
17*437bfbebSnyanmisaka #ifndef __AV1D_COMMON_H__
18*437bfbebSnyanmisaka #define __AV1D_COMMON_H__
19*437bfbebSnyanmisaka 
20*437bfbebSnyanmisaka #include "mpp_common.h"
21*437bfbebSnyanmisaka // #include "hal_av1d_common.h"
22*437bfbebSnyanmisaka #define AV1_REF_SCALE_SHIFT 14
23*437bfbebSnyanmisaka 
24*437bfbebSnyanmisaka #define NUM_REF_FRAMES 8
25*437bfbebSnyanmisaka #define NUM_REF_FRAMES_LG2 3
26*437bfbebSnyanmisaka 
27*437bfbebSnyanmisaka // Max tiles for AV1 (custom size) for Level <= 6.x
28*437bfbebSnyanmisaka #define AV1_MAX_TILES 128
29*437bfbebSnyanmisaka #define AV1_MAX_TILE_COL 64
30*437bfbebSnyanmisaka #define AV1_MAX_TILE_ROW 64
31*437bfbebSnyanmisaka 
32*437bfbebSnyanmisaka #define AV1_MIN_COMP_BASIS 8
33*437bfbebSnyanmisaka #define AV1_MAX_CODED_FRAME_SIZE \
34*437bfbebSnyanmisaka   (8192 * 4352 * 10 * 6 / 32 / AV1_MIN_COMP_BASIS) /* approx 8 MB */
35*437bfbebSnyanmisaka 
36*437bfbebSnyanmisaka #define ALLOWED_REFS_PER_FRAME_EX 7
37*437bfbebSnyanmisaka 
38*437bfbebSnyanmisaka #define NUM_FRAME_CONTEXTS_LG2_EX 3
39*437bfbebSnyanmisaka #define NUM_FRAME_CONTEXTS_EX (1 << NUM_FRAME_CONTEXTS_LG2_EX)
40*437bfbebSnyanmisaka 
41*437bfbebSnyanmisaka #define MIN_TILE_WIDTH 256
42*437bfbebSnyanmisaka #define MAX_TILE_WIDTH 4096
43*437bfbebSnyanmisaka #define MIN_TILE_WIDTH_SBS (MIN_TILE_WIDTH >> 6)
44*437bfbebSnyanmisaka #define MAX_TILE_WIDTH_SBS (MAX_TILE_WIDTH >> 6)
45*437bfbebSnyanmisaka #define FRAME_OFFSET_BITS 5
46*437bfbebSnyanmisaka #define MAX_TILE_AREA (4096 * 2304)
47*437bfbebSnyanmisaka // #define AV1_MAX_TILE_COLS 64
48*437bfbebSnyanmisaka // #define AV1_MAX_TILE_ROWS 64
49*437bfbebSnyanmisaka 
50*437bfbebSnyanmisaka #define ALLOWED_REFS_PER_FRAME 3
51*437bfbebSnyanmisaka 
52*437bfbebSnyanmisaka #define NUM_FRAME_CONTEXTS_LG2 2
53*437bfbebSnyanmisaka #define NUM_FRAME_CONTEXTS (1 << NUM_FRAME_CONTEXTS_LG2)
54*437bfbebSnyanmisaka 
55*437bfbebSnyanmisaka #define DCPREDSIMTHRESH 0
56*437bfbebSnyanmisaka #define DCPREDCNTTHRESH 3
57*437bfbebSnyanmisaka 
58*437bfbebSnyanmisaka #define PREDICTION_PROBS 3
59*437bfbebSnyanmisaka 
60*437bfbebSnyanmisaka #define DEFAULT_PRED_PROB_0 120
61*437bfbebSnyanmisaka #define DEFAULT_PRED_PROB_1 80
62*437bfbebSnyanmisaka #define DEFAULT_PRED_PROB_2 40
63*437bfbebSnyanmisaka 
64*437bfbebSnyanmisaka #define AV1_DEF_UPDATE_PROB 252
65*437bfbebSnyanmisaka 
66*437bfbebSnyanmisaka #define MBSKIP_CONTEXTS 3
67*437bfbebSnyanmisaka 
68*437bfbebSnyanmisaka #define MAX_MB_SEGMENTS 8
69*437bfbebSnyanmisaka #define MB_SEG_TREE_PROBS (MAX_MB_SEGMENTS - 1)
70*437bfbebSnyanmisaka 
71*437bfbebSnyanmisaka #define MAX_REF_LF_DELTAS_EX 8
72*437bfbebSnyanmisaka 
73*437bfbebSnyanmisaka #define MAX_REF_LF_DELTAS 4
74*437bfbebSnyanmisaka #define MAX_MODE_LF_DELTAS 2
75*437bfbebSnyanmisaka 
76*437bfbebSnyanmisaka /* Segment Feature Masks */
77*437bfbebSnyanmisaka #define SEGMENT_DELTADATA 0
78*437bfbebSnyanmisaka #define SEGMENT_ABSDATA 1
79*437bfbebSnyanmisaka #define MAX_MV_REFS 9
80*437bfbebSnyanmisaka 
81*437bfbebSnyanmisaka #define AV1_SWITCHABLE_FILTERS 3 /* number of switchable filters */
82*437bfbebSnyanmisaka #define SWITCHABLE_FILTER_CONTEXTS ((AV1_SWITCHABLE_FILTERS + 1) * 4)
83*437bfbebSnyanmisaka #ifdef DUAL_FILTER
84*437bfbebSnyanmisaka #define AV1_SWITCHABLE_EXT_FILTERS 4 /* number of switchable filters */
85*437bfbebSnyanmisaka #endif
86*437bfbebSnyanmisaka 
87*437bfbebSnyanmisaka #define COMP_PRED_CONTEXTS 2
88*437bfbebSnyanmisaka 
89*437bfbebSnyanmisaka #define COEF_UPDATE_PROB 252
90*437bfbebSnyanmisaka #define AV1_PROB_HALF 128
91*437bfbebSnyanmisaka #define AV1_NMV_UPDATE_PROB 252
92*437bfbebSnyanmisaka #define AV1_MV_UPDATE_PRECISION 7
93*437bfbebSnyanmisaka #define MV_JOINTS 4
94*437bfbebSnyanmisaka #define MV_FP_SIZE 4
95*437bfbebSnyanmisaka #define MV_CLASSES 11
96*437bfbebSnyanmisaka #define CLASS0_BITS 1
97*437bfbebSnyanmisaka #define CLASS0_SIZE (1 << CLASS0_BITS)
98*437bfbebSnyanmisaka #define MV_OFFSET_BITS (MV_CLASSES + CLASS0_BITS - 2)
99*437bfbebSnyanmisaka 
100*437bfbebSnyanmisaka #define MV_MAX_BITS (MV_CLASSES + CLASS0_BITS + 2)
101*437bfbebSnyanmisaka #define MV_MAX ((1 << MV_MAX_BITS) - 1)
102*437bfbebSnyanmisaka #define MV_VALS ((MV_MAX << 1) + 1)
103*437bfbebSnyanmisaka 
104*437bfbebSnyanmisaka #define MAX_ENTROPY_TOKENS 12
105*437bfbebSnyanmisaka #define ENTROPY_NODES 11
106*437bfbebSnyanmisaka 
107*437bfbebSnyanmisaka /* The first nodes of the entropy probs are unconstrained, the rest are
108*437bfbebSnyanmisaka  * modeled with statistic distribution. */
109*437bfbebSnyanmisaka #define UNCONSTRAINED_NODES 3
110*437bfbebSnyanmisaka #define MODEL_NODES (ENTROPY_NODES - UNCONSTRAINED_NODES)
111*437bfbebSnyanmisaka #define PIVOT_NODE 2  // which node is pivot
112*437bfbebSnyanmisaka #define COEFPROB_MODELS 128
113*437bfbebSnyanmisaka 
114*437bfbebSnyanmisaka /* Entropy nodes above is divided in two parts, first three probs in part1
115*437bfbebSnyanmisaka  * and the modeled probs in part2. Part1 is padded so that tables align with
116*437bfbebSnyanmisaka  *  32 byte addresses, so there is four bytes for each table. */
117*437bfbebSnyanmisaka #define ENTROPY_NODES_PART1 4
118*437bfbebSnyanmisaka #define ENTROPY_NODES_PART2 8
119*437bfbebSnyanmisaka #define INTER_MODE_CONTEXTS 7
120*437bfbebSnyanmisaka #define AV1_INTER_MODE_CONTEXTS 15
121*437bfbebSnyanmisaka 
122*437bfbebSnyanmisaka #define CFL_JOINT_SIGNS 8
123*437bfbebSnyanmisaka #define CFL_ALPHA_CONTEXTS 6
124*437bfbebSnyanmisaka #define CFL_ALPHABET_SIZE 16
125*437bfbebSnyanmisaka 
126*437bfbebSnyanmisaka #define NEWMV_MODE_CONTEXTS 6
127*437bfbebSnyanmisaka #define ZEROMV_MODE_CONTEXTS 2
128*437bfbebSnyanmisaka #define GLOBALMV_MODE_CONTEXTS 2
129*437bfbebSnyanmisaka #define REFMV_MODE_CONTEXTS 9
130*437bfbebSnyanmisaka #define DRL_MODE_CONTEXTS 3
131*437bfbebSnyanmisaka #define NMV_CONTEXTS 3
132*437bfbebSnyanmisaka 
133*437bfbebSnyanmisaka #define INTRA_INTER_CONTEXTS 4
134*437bfbebSnyanmisaka #define COMP_INTER_CONTEXTS 5
135*437bfbebSnyanmisaka #define REF_CONTEXTS 5
136*437bfbebSnyanmisaka #define AV1_REF_CONTEXTS 3
137*437bfbebSnyanmisaka #define FWD_REFS 4
138*437bfbebSnyanmisaka #define BWD_REFS 3
139*437bfbebSnyanmisaka #define SINGLE_REFS 7
140*437bfbebSnyanmisaka 
141*437bfbebSnyanmisaka #define BLOCK_TYPES 2
142*437bfbebSnyanmisaka #define REF_TYPES 2  // intra=0, inter=1
143*437bfbebSnyanmisaka #define COEF_BANDS 6
144*437bfbebSnyanmisaka #define PREV_COEF_CONTEXTS 6
145*437bfbebSnyanmisaka 
146*437bfbebSnyanmisaka #define MODULUS_PARAM 13 /* Modulus parameter */
147*437bfbebSnyanmisaka 
148*437bfbebSnyanmisaka #define ACTIVE_HT 110  // quantization stepsize threshold
149*437bfbebSnyanmisaka 
150*437bfbebSnyanmisaka #define MAX_MV_REF_CANDIDATES 2
151*437bfbebSnyanmisaka 
152*437bfbebSnyanmisaka /* Coefficient token alphabet */
153*437bfbebSnyanmisaka 
154*437bfbebSnyanmisaka #define ZERO_TOKEN 0         /* 0         Extra Bits 0+0 */
155*437bfbebSnyanmisaka #define ONE_TOKEN 1          /* 1         Extra Bits 0+1 */
156*437bfbebSnyanmisaka #define TWO_TOKEN 2          /* 2         Extra Bits 0+1 */
157*437bfbebSnyanmisaka #define THREE_TOKEN 3        /* 3         Extra Bits 0+1 */
158*437bfbebSnyanmisaka #define FOUR_TOKEN 4         /* 4         Extra Bits 0+1 */
159*437bfbebSnyanmisaka #define DCT_VAL_CATEGORY1 5  /* 5-6       Extra Bits 1+1 */
160*437bfbebSnyanmisaka #define DCT_VAL_CATEGORY2 6  /* 7-10      Extra Bits 2+1 */
161*437bfbebSnyanmisaka #define DCT_VAL_CATEGORY3 7  /* 11-18     Extra Bits 3+1 */
162*437bfbebSnyanmisaka #define DCT_VAL_CATEGORY4 8  /* 19-34     Extra Bits 4+1 */
163*437bfbebSnyanmisaka #define DCT_VAL_CATEGORY5 9  /* 35-66     Extra Bits 5+1 */
164*437bfbebSnyanmisaka #define DCT_VAL_CATEGORY6 10 /* 67+       Extra Bits 13+1 */
165*437bfbebSnyanmisaka #define DCT_EOB_TOKEN 11     /* EOB       Extra Bits 0+0 */
166*437bfbebSnyanmisaka #define MAX_ENTROPY_TOKENS 12
167*437bfbebSnyanmisaka 
168*437bfbebSnyanmisaka #define INTERINTRA_MODES 4
169*437bfbebSnyanmisaka #define INTER_COMPOUND_MODES 8
170*437bfbebSnyanmisaka #define COMPOUND_TYPES 3
171*437bfbebSnyanmisaka #define HEAD_TOKENS 5
172*437bfbebSnyanmisaka #define TAIL_TOKENS 9
173*437bfbebSnyanmisaka #define ONE_TOKEN_EOB 1
174*437bfbebSnyanmisaka #define ONE_TOKEN_NEOB 2
175*437bfbebSnyanmisaka 
176*437bfbebSnyanmisaka #define MULTICORE_LEFT_TILE 1
177*437bfbebSnyanmisaka #define MULTICORE_INNER_TILE 2
178*437bfbebSnyanmisaka #define MULTICORE_RIGHT_TILE 3
179*437bfbebSnyanmisaka 
180*437bfbebSnyanmisaka #define DCT_EOB_MODEL_TOKEN 3 /* EOB       Extra Bits 0+0 */
181*437bfbebSnyanmisaka 
182*437bfbebSnyanmisaka typedef RK_U32 av1_coeff_count[REF_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS]
183*437bfbebSnyanmisaka [UNCONSTRAINED_NODES + 1];
184*437bfbebSnyanmisaka typedef RK_U8 av1_coeff_probs[REF_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS]
185*437bfbebSnyanmisaka [UNCONSTRAINED_NODES];
186*437bfbebSnyanmisaka 
187*437bfbebSnyanmisaka #define BLOCK_SIZE_GROUPS 4
188*437bfbebSnyanmisaka 
189*437bfbebSnyanmisaka // AV1 extended transforms (ext_tx)
190*437bfbebSnyanmisaka #define EXT_TX_SETS_INTER 4  // Sets of transform selections for INTER
191*437bfbebSnyanmisaka #define EXT_TX_SETS_INTRA 3  // Sets of transform selections for INTRA
192*437bfbebSnyanmisaka #define EXTTX_SIZES 4        // ext_tx experiment tx sizes
193*437bfbebSnyanmisaka #define EXT_TX_TYPES 16
194*437bfbebSnyanmisaka 
195*437bfbebSnyanmisaka #define EXT_TX_SIZES 3
196*437bfbebSnyanmisaka 
197*437bfbebSnyanmisaka #define TX_TYPES 4
198*437bfbebSnyanmisaka 
199*437bfbebSnyanmisaka #define ROUND_POWER_OF_TWO(value, n) (((value) + (1 << ((n)-1))) >> (n))
200*437bfbebSnyanmisaka 
201*437bfbebSnyanmisaka /* Shift down with rounding for use when n >= 0, value >= 0 for (64 bit) */
202*437bfbebSnyanmisaka #define ROUND_POWER_OF_TWO_64(value, n) \
203*437bfbebSnyanmisaka   (((value) + ((((int64)1 << (n)) >> 1))) >> (n))
204*437bfbebSnyanmisaka 
205*437bfbebSnyanmisaka /* Shift down with rounding for signed integers, for use when n >= 0 (64 bit) */
206*437bfbebSnyanmisaka #define ROUND_POWER_OF_TWO_SIGNED_64(value, n)           \
207*437bfbebSnyanmisaka   (((value) < 0) ? -ROUND_POWER_OF_TWO_64(-(value), (n)) \
208*437bfbebSnyanmisaka                  : ROUND_POWER_OF_TWO_64((value), (n)))
209*437bfbebSnyanmisaka 
210*437bfbebSnyanmisaka /* Shift down with rounding for signed integers, for use when n >= 0 */
211*437bfbebSnyanmisaka #define ROUND_POWER_OF_TWO_SIGNED(value, n)           \
212*437bfbebSnyanmisaka   (((value) < 0) ? -ROUND_POWER_OF_TWO(-(value), (n)) \
213*437bfbebSnyanmisaka                  : ROUND_POWER_OF_TWO((value), (n)))
214*437bfbebSnyanmisaka 
215*437bfbebSnyanmisaka typedef RK_U16 av1_cdf;
216*437bfbebSnyanmisaka 
217*437bfbebSnyanmisaka #define MAX_MB_SEGMENTS 8
218*437bfbebSnyanmisaka 
219*437bfbebSnyanmisaka enum Av1SegLevelFeatures {
220*437bfbebSnyanmisaka     SEG_AV1_LVL_ALT_Q,       // Use alternate Quantizer ....
221*437bfbebSnyanmisaka     SEG_AV1_LVL_ALT_LF_Y_V,  // Use alternate loop filter value on y plane
222*437bfbebSnyanmisaka     // vertical
223*437bfbebSnyanmisaka     SEG_AV1_LVL_ALT_LF_Y_H,  // Use alternate loop filter value on y plane
224*437bfbebSnyanmisaka     // horizontal
225*437bfbebSnyanmisaka     SEG_AV1_LVL_ALT_LF_U,    // Use alternate loop filter value on u plane
226*437bfbebSnyanmisaka     SEG_AV1_LVL_ALT_LF_V,    // Use alternate loop filter value on v plane
227*437bfbebSnyanmisaka     SEG_AV1_LVL_REF_FRAME,   // Optional Segment reference frame
228*437bfbebSnyanmisaka     SEG_AV1_LVL_SKIP,        // Optional Segment (0,0) + skip mode
229*437bfbebSnyanmisaka     SEG_AV1_LVL_GLOBALMV,
230*437bfbebSnyanmisaka     SEG_AV1_LVL_MAX
231*437bfbebSnyanmisaka };
232*437bfbebSnyanmisaka 
233*437bfbebSnyanmisaka #define AV1_ACTIVE_REFS 3
234*437bfbebSnyanmisaka #define AV1_ACTIVE_REFS_EX 7
235*437bfbebSnyanmisaka #define AV1_REF_LIST_SIZE 8
236*437bfbebSnyanmisaka #define AV1_REF_SCALE_SHIFT 14
237*437bfbebSnyanmisaka 
238*437bfbebSnyanmisaka enum MvReferenceFrame {
239*437bfbebSnyanmisaka     NONE              = -1,
240*437bfbebSnyanmisaka     INTRA_FRAME       = 0,
241*437bfbebSnyanmisaka     LAST_FRAME        = 1,
242*437bfbebSnyanmisaka     LAST2_FRAME_EX    = 2,
243*437bfbebSnyanmisaka     LAST3_FRAME_EX    = 3,
244*437bfbebSnyanmisaka     GOLDEN_FRAME_EX   = 4,
245*437bfbebSnyanmisaka     BWDREF_FRAME_EX   = 5,
246*437bfbebSnyanmisaka     ALTREF2_FRAME_EX  = 6,
247*437bfbebSnyanmisaka     ALTREF_FRAME_EX   = 7,
248*437bfbebSnyanmisaka     MAX_REF_FRAMES_EX = 8,
249*437bfbebSnyanmisaka     GOLDEN_FRAME      = 2,
250*437bfbebSnyanmisaka     ALTREF_FRAME      = 3,
251*437bfbebSnyanmisaka 
252*437bfbebSnyanmisaka     MAX_REF_FRAMES    = 4
253*437bfbebSnyanmisaka };
254*437bfbebSnyanmisaka 
255*437bfbebSnyanmisaka enum BlockSizeType {
256*437bfbebSnyanmisaka     BLOCK_SIZE_AB4X4,
257*437bfbebSnyanmisaka     BLOCK_SIZE_SB4X8,
258*437bfbebSnyanmisaka     BLOCK_SIZE_SB8X4,
259*437bfbebSnyanmisaka     BLOCK_SIZE_SB8X8,
260*437bfbebSnyanmisaka     BLOCK_SIZE_SB8X16,
261*437bfbebSnyanmisaka     BLOCK_SIZE_SB16X8,
262*437bfbebSnyanmisaka     BLOCK_SIZE_MB16X16,
263*437bfbebSnyanmisaka     BLOCK_SIZE_SB16X32,
264*437bfbebSnyanmisaka     BLOCK_SIZE_SB32X16,
265*437bfbebSnyanmisaka     BLOCK_SIZE_SB32X32,
266*437bfbebSnyanmisaka     BLOCK_SIZE_SB32X64,
267*437bfbebSnyanmisaka     BLOCK_SIZE_SB64X32,
268*437bfbebSnyanmisaka     BLOCK_SIZE_SB64X64,
269*437bfbebSnyanmisaka     BLOCK_SIZE_SB64X128,
270*437bfbebSnyanmisaka     BLOCK_SIZE_SB128X64,
271*437bfbebSnyanmisaka     BLOCK_SIZE_SB128X128,
272*437bfbebSnyanmisaka     BLOCK_SIZE_SB4X16,
273*437bfbebSnyanmisaka     BLOCK_SIZE_SB16X4,
274*437bfbebSnyanmisaka     BLOCK_SIZE_SB8X32,
275*437bfbebSnyanmisaka     BLOCK_SIZE_SB32X8,
276*437bfbebSnyanmisaka     BLOCK_SIZE_SB16X64,
277*437bfbebSnyanmisaka     BLOCK_SIZE_SB64X16,
278*437bfbebSnyanmisaka     BLOCK_SIZE_TYPES,
279*437bfbebSnyanmisaka     BLOCK_SIZES_ALL = BLOCK_SIZE_TYPES
280*437bfbebSnyanmisaka 
281*437bfbebSnyanmisaka };
282*437bfbebSnyanmisaka 
283*437bfbebSnyanmisaka enum PartitionType {
284*437bfbebSnyanmisaka     PARTITION_NONE,
285*437bfbebSnyanmisaka     PARTITION_HORZ,
286*437bfbebSnyanmisaka     PARTITION_VERT,
287*437bfbebSnyanmisaka     PARTITION_SPLIT,
288*437bfbebSnyanmisaka     /*
289*437bfbebSnyanmisaka     PARTITION_HORZ_A,
290*437bfbebSnyanmisaka     PARTITION_HORZ_B,
291*437bfbebSnyanmisaka     PARTITION_VERT_A,
292*437bfbebSnyanmisaka     PARTITION_VERT_B,
293*437bfbebSnyanmisaka     PARTITION_HORZ_4,
294*437bfbebSnyanmisaka     PARTITION_VERT_4,
295*437bfbebSnyanmisaka     */
296*437bfbebSnyanmisaka     PARTITION_TYPES
297*437bfbebSnyanmisaka };
298*437bfbebSnyanmisaka 
299*437bfbebSnyanmisaka #define PARTITION_PLOFFSET 4  // number of probability models per block size
300*437bfbebSnyanmisaka #define NUM_PARTITION_CONTEXTS (4 * PARTITION_PLOFFSET)
301*437bfbebSnyanmisaka 
302*437bfbebSnyanmisaka enum FrameType {
303*437bfbebSnyanmisaka     KEY_FRAME = 0,
304*437bfbebSnyanmisaka     INTER_FRAME = 1,
305*437bfbebSnyanmisaka     NUM_FRAME_TYPES,
306*437bfbebSnyanmisaka };
307*437bfbebSnyanmisaka 
308*437bfbebSnyanmisaka enum MbPredictionMode {
309*437bfbebSnyanmisaka     DC_PRED,  /* average of above and left pixels */
310*437bfbebSnyanmisaka     V_PRED,   /* vertical prediction */
311*437bfbebSnyanmisaka     H_PRED,   /* horizontal prediction */
312*437bfbebSnyanmisaka     D45_PRED, /* Directional 45 deg prediction  [anti-clockwise from 0 deg hor] */
313*437bfbebSnyanmisaka     D135_PRED, /* Directional 135 deg prediction [anti-clockwise from 0 deg hor]
314*437bfbebSnyanmisaka               */
315*437bfbebSnyanmisaka     D117_PRED, /* Directional 112 deg prediction [anti-clockwise from 0 deg hor]
316*437bfbebSnyanmisaka               */
317*437bfbebSnyanmisaka     D153_PRED, /* Directional 157 deg prediction [anti-clockwise from 0 deg hor]
318*437bfbebSnyanmisaka               */
319*437bfbebSnyanmisaka     D27_PRED, /* Directional 22 deg prediction  [anti-clockwise from 0 deg hor] */
320*437bfbebSnyanmisaka     D63_PRED, /* Directional 67 deg prediction  [anti-clockwise from 0 deg hor] */
321*437bfbebSnyanmisaka     SMOOTH_PRED,
322*437bfbebSnyanmisaka     TM_PRED_AV1 = SMOOTH_PRED,
323*437bfbebSnyanmisaka     SMOOTH_V_PRED,  // Vertical interpolation
324*437bfbebSnyanmisaka     SMOOTH_H_PRED,  // Horizontal interpolation
325*437bfbebSnyanmisaka     TM_PRED,        /* Truemotion prediction */
326*437bfbebSnyanmisaka     PAETH_PRED = TM_PRED,
327*437bfbebSnyanmisaka     NEARESTMV,
328*437bfbebSnyanmisaka     NEARMV,
329*437bfbebSnyanmisaka     ZEROMV,
330*437bfbebSnyanmisaka     NEWMV,
331*437bfbebSnyanmisaka     NEAREST_NEARESTMV,
332*437bfbebSnyanmisaka     NEAR_NEARMV,
333*437bfbebSnyanmisaka     NEAREST_NEWMV,
334*437bfbebSnyanmisaka     NEW_NEARESTMV,
335*437bfbebSnyanmisaka     NEAR_NEWMV,
336*437bfbebSnyanmisaka     NEW_NEARMV,
337*437bfbebSnyanmisaka     ZERO_ZEROMV,
338*437bfbebSnyanmisaka     NEW_NEWMV,
339*437bfbebSnyanmisaka     SPLITMV,
340*437bfbebSnyanmisaka     MB_MODE_COUNT
341*437bfbebSnyanmisaka };
342*437bfbebSnyanmisaka 
343*437bfbebSnyanmisaka // Must match hardware/src/include/common_defs.h
344*437bfbebSnyanmisaka #define AV1_INTRA_MODES 13
345*437bfbebSnyanmisaka 
346*437bfbebSnyanmisaka #define MAX_INTRA_MODES AV1_INTRA_MODES
347*437bfbebSnyanmisaka 
348*437bfbebSnyanmisaka #define MAX_INTRA_MODES_DRAM_ALIGNED ((MAX_INTRA_MODES + 15) & (~15))
349*437bfbebSnyanmisaka 
350*437bfbebSnyanmisaka #define AV1_INTER_MODES (1 + NEWMV - NEARESTMV)
351*437bfbebSnyanmisaka 
352*437bfbebSnyanmisaka #define MOTION_MODE_CONTEXTS 10
353*437bfbebSnyanmisaka 
354*437bfbebSnyanmisaka #define DIRECTIONAL_MODES 8
355*437bfbebSnyanmisaka #define MAX_ANGLE_DELTA 3
356*437bfbebSnyanmisaka 
357*437bfbebSnyanmisaka enum FilterIntraModeType {
358*437bfbebSnyanmisaka     FILTER_DC_PRED,
359*437bfbebSnyanmisaka     FILTER_V_PRED,
360*437bfbebSnyanmisaka     FILTER_H_PRED,
361*437bfbebSnyanmisaka     FILTER_D153_PRED,
362*437bfbebSnyanmisaka     FILTER_PAETH_PRED,
363*437bfbebSnyanmisaka     FILTER_INTRA_MODES,
364*437bfbebSnyanmisaka     FILTER_INTRA_UNUSED = 7
365*437bfbebSnyanmisaka };
366*437bfbebSnyanmisaka 
367*437bfbebSnyanmisaka #define FILTER_INTRA_SIZES 19
368*437bfbebSnyanmisaka 
369*437bfbebSnyanmisaka enum { SIMPLE_TRANSLATION, OBMC_CAUSAL, MOTION_MODE_COUNT };
370*437bfbebSnyanmisaka 
371*437bfbebSnyanmisaka #define SUBMVREF_COUNT 5
372*437bfbebSnyanmisaka 
373*437bfbebSnyanmisaka /* Integer pel reference mv threshold for use of high-precision 1/8 mv */
374*437bfbebSnyanmisaka #define COMPANDED_MVREF_THRESH 8
375*437bfbebSnyanmisaka 
376*437bfbebSnyanmisaka #define TX_SIZE_CONTEXTS 2
377*437bfbebSnyanmisaka #define AV1_TX_SIZE_CONTEXTS 3
378*437bfbebSnyanmisaka #define VARTX_PART_CONTEXTS 22
379*437bfbebSnyanmisaka #define TXFM_PARTITION_CONTEXTS 22
380*437bfbebSnyanmisaka 
381*437bfbebSnyanmisaka enum InterpolationFilterType {
382*437bfbebSnyanmisaka     EIGHTTAP_SMOOTH,
383*437bfbebSnyanmisaka     EIGHTTAP,
384*437bfbebSnyanmisaka     EIGHTTAP_SHARP,
385*437bfbebSnyanmisaka #ifdef DUAL_FILTER
386*437bfbebSnyanmisaka     EIGHTTAP_SMOOTH2,
387*437bfbebSnyanmisaka     BILINEAR,
388*437bfbebSnyanmisaka     SWITCHABLE, /* should be the last one */
389*437bfbebSnyanmisaka #else
390*437bfbebSnyanmisaka     BILINEAR,
391*437bfbebSnyanmisaka     SWITCHABLE, /* should be the last one */
392*437bfbebSnyanmisaka #endif
393*437bfbebSnyanmisaka     MULTITAP_SHARP = EIGHTTAP_SHARP
394*437bfbebSnyanmisaka };
395*437bfbebSnyanmisaka 
396*437bfbebSnyanmisaka static const int av1_literal_to_filter[4] = {EIGHTTAP_SMOOTH, EIGHTTAP,
397*437bfbebSnyanmisaka                                              EIGHTTAP_SHARP, BILINEAR
398*437bfbebSnyanmisaka                                             };
399*437bfbebSnyanmisaka 
400*437bfbebSnyanmisaka extern const enum InterpolationFilterType
401*437bfbebSnyanmisaka av1hwd_switchable_interp[AV1_SWITCHABLE_FILTERS];
402*437bfbebSnyanmisaka 
403*437bfbebSnyanmisaka enum CompPredModeType {
404*437bfbebSnyanmisaka     SINGLE_PREDICTION_ONLY = 0,
405*437bfbebSnyanmisaka     COMP_PREDICTION_ONLY = 1,
406*437bfbebSnyanmisaka     HYBRID_PREDICTION = 2,
407*437bfbebSnyanmisaka     NB_PREDICTION_TYPES = 3,
408*437bfbebSnyanmisaka };
409*437bfbebSnyanmisaka 
410*437bfbebSnyanmisaka enum TxfmMode {
411*437bfbebSnyanmisaka     ONLY_4X4 = 0,
412*437bfbebSnyanmisaka     TX_MODE_LARGEST,
413*437bfbebSnyanmisaka     TX_MODE_SELECT,
414*437bfbebSnyanmisaka     NB_TXFM_MODES,
415*437bfbebSnyanmisaka };
416*437bfbebSnyanmisaka 
417*437bfbebSnyanmisaka enum SegLevelFeatures {
418*437bfbebSnyanmisaka     SEG_LVL_ALT_Q = 0,
419*437bfbebSnyanmisaka     SEG_LVL_ALT_LF = 1,
420*437bfbebSnyanmisaka     SEG_LVL_REF_FRAME = 2,
421*437bfbebSnyanmisaka     SEG_LVL_SKIP = 3,
422*437bfbebSnyanmisaka     SEG_LVL_MAX = 4
423*437bfbebSnyanmisaka };
424*437bfbebSnyanmisaka 
425*437bfbebSnyanmisaka enum { AV1_SEG_FEATURE_DELTA, AV1_SEG_FEATURE_ABS };
426*437bfbebSnyanmisaka 
427*437bfbebSnyanmisaka static const int av1_seg_feature_data_signed[SEG_AV1_LVL_MAX] = {1, 1, 1, 1,
428*437bfbebSnyanmisaka                                                                  1, 0, 0
429*437bfbebSnyanmisaka                                                                 };
430*437bfbebSnyanmisaka static const int av1_seg_feature_data_max[SEG_AV1_LVL_MAX] = {255, 63, 63, 63,
431*437bfbebSnyanmisaka                                                               63,  7,  0
432*437bfbebSnyanmisaka                                                              };
433*437bfbebSnyanmisaka static const int av1_seg_feature_data_bits[SEG_AV1_LVL_MAX] = {8, 6, 6, 6,
434*437bfbebSnyanmisaka                                                                6, 3, 0
435*437bfbebSnyanmisaka                                                               };
436*437bfbebSnyanmisaka 
437*437bfbebSnyanmisaka enum TxSize {
438*437bfbebSnyanmisaka     TX_4X4 = 0,
439*437bfbebSnyanmisaka     TX_8X8 = 1,
440*437bfbebSnyanmisaka     TX_16X16 = 2,
441*437bfbebSnyanmisaka     TX_32X32 = 3,
442*437bfbebSnyanmisaka     TX_SIZE_MAX_SB,
443*437bfbebSnyanmisaka };
444*437bfbebSnyanmisaka #define MAX_TX_DEPTH 2
445*437bfbebSnyanmisaka 
446*437bfbebSnyanmisaka enum TxType { DCT_DCT = 0, ADST_DCT = 1, DCT_ADST = 2, ADST_ADST = 3 };
447*437bfbebSnyanmisaka 
448*437bfbebSnyanmisaka enum SplitMvPartitioningType {
449*437bfbebSnyanmisaka     PARTITIONING_16X8 = 0,
450*437bfbebSnyanmisaka     PARTITIONING_8X16,
451*437bfbebSnyanmisaka     PARTITIONING_8X8,
452*437bfbebSnyanmisaka     PARTITIONING_4X4,
453*437bfbebSnyanmisaka     NB_PARTITIONINGS,
454*437bfbebSnyanmisaka };
455*437bfbebSnyanmisaka 
456*437bfbebSnyanmisaka enum PredId {
457*437bfbebSnyanmisaka     PRED_SEG_ID = 0,
458*437bfbebSnyanmisaka     PRED_MBSKIP = 1,
459*437bfbebSnyanmisaka     PRED_SWITCHABLE_INTERP = 2,
460*437bfbebSnyanmisaka     PRED_INTRA_INTER = 3,
461*437bfbebSnyanmisaka     PRED_COMP_INTER_INTER = 4,
462*437bfbebSnyanmisaka     PRED_SINGLE_REF_P1 = 5,
463*437bfbebSnyanmisaka     PRED_SINGLE_REF_P2 = 6,
464*437bfbebSnyanmisaka     PRED_COMP_REF_P = 7,
465*437bfbebSnyanmisaka     PRED_TX_SIZE = 8
466*437bfbebSnyanmisaka };
467*437bfbebSnyanmisaka 
468*437bfbebSnyanmisaka /* Symbols for coding which components are zero jointly */
469*437bfbebSnyanmisaka enum MvJointType {
470*437bfbebSnyanmisaka     MV_JOINT_ZERO = 0,   /* Zero vector */
471*437bfbebSnyanmisaka     MV_JOINT_HNZVZ = 1,  /* Vert zero, hor nonzero */
472*437bfbebSnyanmisaka     MV_JOINT_HZVNZ = 2,  /* Hor zero, vert nonzero */
473*437bfbebSnyanmisaka     MV_JOINT_HNZVNZ = 3, /* Both components nonzero */
474*437bfbebSnyanmisaka };
475*437bfbebSnyanmisaka 
476*437bfbebSnyanmisaka /* Symbols for coding magnitude class of nonzero components */
477*437bfbebSnyanmisaka enum MvClassType {
478*437bfbebSnyanmisaka     MV_CLASS_0 = 0,   /* (0, 2]     integer pel */
479*437bfbebSnyanmisaka     MV_CLASS_1 = 1,   /* (2, 4]     integer pel */
480*437bfbebSnyanmisaka     MV_CLASS_2 = 2,   /* (4, 8]     integer pel */
481*437bfbebSnyanmisaka     MV_CLASS_3 = 3,   /* (8, 16]    integer pel */
482*437bfbebSnyanmisaka     MV_CLASS_4 = 4,   /* (16, 32]   integer pel */
483*437bfbebSnyanmisaka     MV_CLASS_5 = 5,   /* (32, 64]   integer pel */
484*437bfbebSnyanmisaka     MV_CLASS_6 = 6,   /* (64, 128]  integer pel */
485*437bfbebSnyanmisaka     MV_CLASS_7 = 7,   /* (128, 256] integer pel */
486*437bfbebSnyanmisaka     MV_CLASS_8 = 8,   /* (256, 512] integer pel */
487*437bfbebSnyanmisaka     MV_CLASS_9 = 9,   /* (512, 1024] integer pel */
488*437bfbebSnyanmisaka     MV_CLASS_10 = 10, /* (1024,2048] integer pel */
489*437bfbebSnyanmisaka };
490*437bfbebSnyanmisaka 
491*437bfbebSnyanmisaka enum RefreshFrameContextModeAv1 {
492*437bfbebSnyanmisaka     /**
493*437bfbebSnyanmisaka      * AV1 Only, no refresh
494*437bfbebSnyanmisaka      */
495*437bfbebSnyanmisaka     AV1_REFRESH_FRAME_CONTEXT_NONE,
496*437bfbebSnyanmisaka     /**
497*437bfbebSnyanmisaka      * Update frame context to values resulting from backward probability
498*437bfbebSnyanmisaka      * updates based on entropy/counts in the decoded frame
499*437bfbebSnyanmisaka      */
500*437bfbebSnyanmisaka     AV1_REFRESH_FRAME_CONTEXT_BACKWARD
501*437bfbebSnyanmisaka };
502*437bfbebSnyanmisaka 
503*437bfbebSnyanmisaka // 75B
504*437bfbebSnyanmisaka struct NmvContext {
505*437bfbebSnyanmisaka     // Start at +27B offset
506*437bfbebSnyanmisaka     RK_U8 joints[MV_JOINTS - 1];  // 3B
507*437bfbebSnyanmisaka     RK_U8 sign[2];                // 2B
508*437bfbebSnyanmisaka 
509*437bfbebSnyanmisaka     // A+1
510*437bfbebSnyanmisaka     RK_U8 class0[2][CLASS0_SIZE - 1];  // 2B
511*437bfbebSnyanmisaka     RK_U8 fp[2][MV_FP_SIZE - 1];       // 6B
512*437bfbebSnyanmisaka     RK_U8 class0_hp[2];                // 2B
513*437bfbebSnyanmisaka     RK_U8 hp[2];                       // 2B
514*437bfbebSnyanmisaka     RK_U8 classes[2][MV_CLASSES - 1];  // 20B
515*437bfbebSnyanmisaka 
516*437bfbebSnyanmisaka     // A+2
517*437bfbebSnyanmisaka     RK_U8 class0_fp[2][CLASS0_SIZE][MV_FP_SIZE - 1];  // 12B
518*437bfbebSnyanmisaka     RK_U8 bits[2][MV_OFFSET_BITS];                    // 20B
519*437bfbebSnyanmisaka };
520*437bfbebSnyanmisaka 
521*437bfbebSnyanmisaka struct NmvContextCounts {
522*437bfbebSnyanmisaka     // 8dw (u32) / DRAM word (u256)
523*437bfbebSnyanmisaka     RK_U32 joints[MV_JOINTS];
524*437bfbebSnyanmisaka     RK_U32 sign[2][2];
525*437bfbebSnyanmisaka     RK_U32 classes[2][MV_CLASSES];
526*437bfbebSnyanmisaka     RK_U32 class0[2][CLASS0_SIZE];
527*437bfbebSnyanmisaka     RK_U32 bits[2][MV_OFFSET_BITS][2];
528*437bfbebSnyanmisaka     RK_U32 class0_fp[2][CLASS0_SIZE][4];
529*437bfbebSnyanmisaka     RK_U32 fp[2][4];
530*437bfbebSnyanmisaka     RK_U32 class0_hp[2][2];
531*437bfbebSnyanmisaka     RK_U32 hp[2][2];
532*437bfbebSnyanmisaka };
533*437bfbebSnyanmisaka 
534*437bfbebSnyanmisaka typedef RK_U8 av1_prob;
535*437bfbebSnyanmisaka 
536*437bfbebSnyanmisaka #define ICDF(x) (32768U - (x))
537*437bfbebSnyanmisaka #define CDF_SIZE(x) ((x)-1)
538*437bfbebSnyanmisaka 
539*437bfbebSnyanmisaka #define AV1HWPAD(x, y) RK_U8 x[y]
540*437bfbebSnyanmisaka 
541*437bfbebSnyanmisaka struct NmvJointSign {
542*437bfbebSnyanmisaka     RK_U8 joints[MV_JOINTS - 1];  // 3B
543*437bfbebSnyanmisaka     RK_U8 sign[2];                // 2B
544*437bfbebSnyanmisaka };
545*437bfbebSnyanmisaka struct NmvMagnitude {
546*437bfbebSnyanmisaka     RK_U8 class0[2][CLASS0_SIZE - 1];
547*437bfbebSnyanmisaka     RK_U8 fp[2][MV_FP_SIZE - 1];
548*437bfbebSnyanmisaka     RK_U8 class0_hp[2];
549*437bfbebSnyanmisaka     RK_U8 hp[2];
550*437bfbebSnyanmisaka     RK_U8 classes[2][MV_CLASSES - 1];
551*437bfbebSnyanmisaka     RK_U8 class0_fp[2][CLASS0_SIZE][MV_FP_SIZE - 1];
552*437bfbebSnyanmisaka     RK_U8 bits[2][MV_OFFSET_BITS];
553*437bfbebSnyanmisaka };
554*437bfbebSnyanmisaka 
555*437bfbebSnyanmisaka struct RefMvNmvContext {
556*437bfbebSnyanmisaka     // Starts at +4B offset (for mbskip)
557*437bfbebSnyanmisaka     struct NmvJointSign joints_sign[NMV_CONTEXTS];  // 15B
558*437bfbebSnyanmisaka     AV1HWPAD(pad1, 13);
559*437bfbebSnyanmisaka 
560*437bfbebSnyanmisaka     // A+1
561*437bfbebSnyanmisaka     struct NmvMagnitude magnitude[NMV_CONTEXTS];
562*437bfbebSnyanmisaka };
563*437bfbebSnyanmisaka 
564*437bfbebSnyanmisaka /* Adaptive entropy contexts, padding elements are added to have
565*437bfbebSnyanmisaka  * 256 bit aligned tables for HW access.
566*437bfbebSnyanmisaka  * Compile with TRACE_PROB_TABLES to print bases for each table. */
567*437bfbebSnyanmisaka struct Av1AdaptiveEntropyProbs {
568*437bfbebSnyanmisaka     // address A (56)
569*437bfbebSnyanmisaka 
570*437bfbebSnyanmisaka     // Address A+0
571*437bfbebSnyanmisaka     RK_U8 inter_mode_prob[INTER_MODE_CONTEXTS][4];  // 7*4 = 28B
572*437bfbebSnyanmisaka     RK_U8 intra_inter_prob[INTRA_INTER_CONTEXTS];   // 4B
573*437bfbebSnyanmisaka 
574*437bfbebSnyanmisaka     // Address A+1
575*437bfbebSnyanmisaka     RK_U8 uv_mode_prob[MAX_INTRA_MODES]
576*437bfbebSnyanmisaka     [MAX_INTRA_MODES_DRAM_ALIGNED];  // 10*16/32 = 5 addrs
577*437bfbebSnyanmisaka 
578*437bfbebSnyanmisaka #if ((MAX_INTRA_MODES * MAX_INTRA_MODES_DRAM_ALIGNED) % 32)
579*437bfbebSnyanmisaka     AV1HWPAD(pad1,
580*437bfbebSnyanmisaka              ((MAX_INTRA_MODES * MAX_INTRA_MODES_DRAM_ALIGNED) % 32 == 0)
581*437bfbebSnyanmisaka              ? 0
582*437bfbebSnyanmisaka              : 32 - (MAX_INTRA_MODES * MAX_INTRA_MODES_DRAM_ALIGNED) % 32);
583*437bfbebSnyanmisaka #endif
584*437bfbebSnyanmisaka 
585*437bfbebSnyanmisaka     // Address A+6
586*437bfbebSnyanmisaka     RK_U8 tx8x8_prob[TX_SIZE_CONTEXTS][TX_SIZE_MAX_SB - 3];    // 2*(4-3) = 2B
587*437bfbebSnyanmisaka     RK_U8 tx16x16_prob[TX_SIZE_CONTEXTS][TX_SIZE_MAX_SB - 2];  // 2*(4-2) = 4B
588*437bfbebSnyanmisaka     RK_U8 tx32x32_prob[TX_SIZE_CONTEXTS][TX_SIZE_MAX_SB - 1];  // 2*(4-1) = 6B
589*437bfbebSnyanmisaka 
590*437bfbebSnyanmisaka     RK_U8 switchable_interp_prob[AV1_SWITCHABLE_FILTERS + 1]
591*437bfbebSnyanmisaka     [AV1_SWITCHABLE_FILTERS - 1];  // 8B
592*437bfbebSnyanmisaka     RK_U8 comp_inter_prob[COMP_INTER_CONTEXTS];                // 5B
593*437bfbebSnyanmisaka 
594*437bfbebSnyanmisaka     AV1HWPAD(pad6, 7);
595*437bfbebSnyanmisaka 
596*437bfbebSnyanmisaka     // Address A+7
597*437bfbebSnyanmisaka     RK_U8 sb_ymode_prob[BLOCK_SIZE_GROUPS]
598*437bfbebSnyanmisaka     [MAX_INTRA_MODES_DRAM_ALIGNED];  // 4*16/32 = 2 addrs
599*437bfbebSnyanmisaka 
600*437bfbebSnyanmisaka     // Address A+9
601*437bfbebSnyanmisaka     RK_U8 partition_prob[NUM_FRAME_TYPES][NUM_PARTITION_CONTEXTS]
602*437bfbebSnyanmisaka     [PARTITION_TYPES];  // 2*16*4 = 4 addrs
603*437bfbebSnyanmisaka 
604*437bfbebSnyanmisaka     // Address A+13
605*437bfbebSnyanmisaka     AV1HWPAD(pad13, 24);
606*437bfbebSnyanmisaka     RK_U8 mbskip_probs[MBSKIP_CONTEXTS];  // 3B
607*437bfbebSnyanmisaka     struct NmvContext nmvc;
608*437bfbebSnyanmisaka 
609*437bfbebSnyanmisaka     // Address A+16
610*437bfbebSnyanmisaka     RK_U8 single_ref_prob[REF_CONTEXTS][2];          // 10B
611*437bfbebSnyanmisaka     RK_U8 comp_ref_prob[REF_CONTEXTS];               // 5B
612*437bfbebSnyanmisaka     RK_U8 mb_segment_tree_probs[MB_SEG_TREE_PROBS];  // 7B
613*437bfbebSnyanmisaka     RK_U8 segment_pred_probs[PREDICTION_PROBS];      // 3B
614*437bfbebSnyanmisaka     AV1HWPAD(pad16, 7);
615*437bfbebSnyanmisaka 
616*437bfbebSnyanmisaka     // Address A+17
617*437bfbebSnyanmisaka     RK_U8 prob_coeffs[BLOCK_TYPES][REF_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS]
618*437bfbebSnyanmisaka     [ENTROPY_NODES_PART1];  // 18 addrs
619*437bfbebSnyanmisaka     RK_U8 prob_coeffs8x8[BLOCK_TYPES][REF_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS]
620*437bfbebSnyanmisaka     [ENTROPY_NODES_PART1];
621*437bfbebSnyanmisaka     RK_U8 prob_coeffs16x16[BLOCK_TYPES][REF_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS]
622*437bfbebSnyanmisaka     [ENTROPY_NODES_PART1];
623*437bfbebSnyanmisaka     RK_U8 prob_coeffs32x32[BLOCK_TYPES][REF_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS]
624*437bfbebSnyanmisaka     [ENTROPY_NODES_PART1];
625*437bfbebSnyanmisaka };
626*437bfbebSnyanmisaka 
627*437bfbebSnyanmisaka /* Entropy contexts */
628*437bfbebSnyanmisaka struct Av1EntropyProbs {
629*437bfbebSnyanmisaka     /* Default keyframe probs */
630*437bfbebSnyanmisaka     /* Table formatted for 256b memory, probs 0to7 for all tables followed by
631*437bfbebSnyanmisaka      * probs 8toN for all tables.
632*437bfbebSnyanmisaka      * Compile with TRACE_PROB_TABLES to print bases for each table. */
633*437bfbebSnyanmisaka 
634*437bfbebSnyanmisaka     // In AOM code, this table is [M][M][M-1]; we pad to 16B so each entry is 1/2
635*437bfbebSnyanmisaka     // DRAM word.
636*437bfbebSnyanmisaka     RK_U8 kf_bmode_prob[MAX_INTRA_MODES][MAX_INTRA_MODES]
637*437bfbebSnyanmisaka     [MAX_INTRA_MODES_DRAM_ALIGNED];
638*437bfbebSnyanmisaka 
639*437bfbebSnyanmisaka #if ((MAX_INTRA_MODES * MAX_INTRA_MODES * MAX_INTRA_MODES_DRAM_ALIGNED) % 32)
640*437bfbebSnyanmisaka     AV1HWPAD(pad0, (((MAX_INTRA_MODES * MAX_INTRA_MODES *
641*437bfbebSnyanmisaka                       MAX_INTRA_MODES_DRAM_ALIGNED) %
642*437bfbebSnyanmisaka                      32) == 0)
643*437bfbebSnyanmisaka              ? 0
644*437bfbebSnyanmisaka              : 32 - ((MAX_INTRA_MODES * MAX_INTRA_MODES *
645*437bfbebSnyanmisaka                       MAX_INTRA_MODES_DRAM_ALIGNED) %
646*437bfbebSnyanmisaka                      32));
647*437bfbebSnyanmisaka #endif
648*437bfbebSnyanmisaka 
649*437bfbebSnyanmisaka     // Address 50
650*437bfbebSnyanmisaka     AV1HWPAD(unused_bytes, 4);  // 4B of padding to maintain the old alignments.
651*437bfbebSnyanmisaka     RK_U8 ref_pred_probs[PREDICTION_PROBS];   // 3B
652*437bfbebSnyanmisaka     RK_U8 ref_scores[MAX_REF_FRAMES];         // 4B
653*437bfbebSnyanmisaka     RK_U8 prob_comppred[COMP_PRED_CONTEXTS];  // 2B
654*437bfbebSnyanmisaka 
655*437bfbebSnyanmisaka     AV1HWPAD(pad1, 19);
656*437bfbebSnyanmisaka 
657*437bfbebSnyanmisaka     // Address 51
658*437bfbebSnyanmisaka     RK_U8 kf_uv_mode_prob[MAX_INTRA_MODES][MAX_INTRA_MODES_DRAM_ALIGNED];
659*437bfbebSnyanmisaka 
660*437bfbebSnyanmisaka #if ((MAX_INTRA_MODES * MAX_INTRA_MODES_DRAM_ALIGNED) % 32)
661*437bfbebSnyanmisaka     AV1HWPAD(pad51,
662*437bfbebSnyanmisaka              ((MAX_INTRA_MODES * MAX_INTRA_MODES_DRAM_ALIGNED) % 32 == 0)
663*437bfbebSnyanmisaka              ? 0
664*437bfbebSnyanmisaka              : 32 - (MAX_INTRA_MODES * MAX_INTRA_MODES_DRAM_ALIGNED) % 32);
665*437bfbebSnyanmisaka #endif
666*437bfbebSnyanmisaka 
667*437bfbebSnyanmisaka     // Address 56
668*437bfbebSnyanmisaka     struct Av1AdaptiveEntropyProbs a;  // Probs with backward adaptation
669*437bfbebSnyanmisaka };
670*437bfbebSnyanmisaka 
671*437bfbebSnyanmisaka /* Counters for adaptive entropy contexts */
672*437bfbebSnyanmisaka struct Av1EntropyCounts {
673*437bfbebSnyanmisaka     RK_U32 inter_mode_counts[INTER_MODE_CONTEXTS][AV1_INTER_MODES - 1][2];
674*437bfbebSnyanmisaka     RK_U32 sb_ymode_counts[BLOCK_SIZE_GROUPS][MAX_INTRA_MODES];
675*437bfbebSnyanmisaka     RK_U32 uv_mode_counts[MAX_INTRA_MODES][MAX_INTRA_MODES];
676*437bfbebSnyanmisaka     RK_U32 partition_counts[NUM_PARTITION_CONTEXTS][PARTITION_TYPES];
677*437bfbebSnyanmisaka     RK_U32 switchable_interp_counts[AV1_SWITCHABLE_FILTERS + 1]
678*437bfbebSnyanmisaka     [AV1_SWITCHABLE_FILTERS];
679*437bfbebSnyanmisaka     RK_U32 intra_inter_count[INTRA_INTER_CONTEXTS][2];
680*437bfbebSnyanmisaka     RK_U32 comp_inter_count[COMP_INTER_CONTEXTS][2];
681*437bfbebSnyanmisaka     RK_U32 single_ref_count[REF_CONTEXTS][2][2];
682*437bfbebSnyanmisaka     RK_U32 comp_ref_count[REF_CONTEXTS][2];
683*437bfbebSnyanmisaka     RK_U32 tx32x32_count[TX_SIZE_CONTEXTS][TX_SIZE_MAX_SB];
684*437bfbebSnyanmisaka     RK_U32 tx16x16_count[TX_SIZE_CONTEXTS][TX_SIZE_MAX_SB - 1];
685*437bfbebSnyanmisaka     RK_U32 tx8x8_count[TX_SIZE_CONTEXTS][TX_SIZE_MAX_SB - 2];
686*437bfbebSnyanmisaka     RK_U32 mbskip_count[MBSKIP_CONTEXTS][2];
687*437bfbebSnyanmisaka 
688*437bfbebSnyanmisaka     struct NmvContextCounts nmvcount;
689*437bfbebSnyanmisaka 
690*437bfbebSnyanmisaka     RK_U32 count_coeffs[BLOCK_TYPES][REF_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS]
691*437bfbebSnyanmisaka     [UNCONSTRAINED_NODES + 1];
692*437bfbebSnyanmisaka     RK_U32 count_coeffs8x8[BLOCK_TYPES][REF_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS]
693*437bfbebSnyanmisaka     [UNCONSTRAINED_NODES + 1];
694*437bfbebSnyanmisaka     RK_U32 count_coeffs16x16[BLOCK_TYPES][REF_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS]
695*437bfbebSnyanmisaka     [UNCONSTRAINED_NODES + 1];
696*437bfbebSnyanmisaka     RK_U32 count_coeffs32x32[BLOCK_TYPES][REF_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS]
697*437bfbebSnyanmisaka     [UNCONSTRAINED_NODES + 1];
698*437bfbebSnyanmisaka 
699*437bfbebSnyanmisaka     RK_U32 count_eobs[TX_SIZE_MAX_SB][BLOCK_TYPES][REF_TYPES][COEF_BANDS]
700*437bfbebSnyanmisaka     [PREV_COEF_CONTEXTS];
701*437bfbebSnyanmisaka };
702*437bfbebSnyanmisaka 
703*437bfbebSnyanmisaka struct CoeffHeadCDFModel {
704*437bfbebSnyanmisaka     RK_U16 band0[3][5];
705*437bfbebSnyanmisaka     RK_U16 bands[5][6][4];
706*437bfbebSnyanmisaka };
707*437bfbebSnyanmisaka 
708*437bfbebSnyanmisaka struct CoeffTailCDFModel {
709*437bfbebSnyanmisaka     RK_U16 band0[3][9];
710*437bfbebSnyanmisaka     RK_U16 bands[5][6][9];
711*437bfbebSnyanmisaka };
712*437bfbebSnyanmisaka 
713*437bfbebSnyanmisaka // 135
714*437bfbebSnyanmisaka typedef struct CoeffHeadCDFModel coeff_head_cdf_model[BLOCK_TYPES][REF_TYPES];
715*437bfbebSnyanmisaka // 297
716*437bfbebSnyanmisaka typedef struct CoeffTailCDFModel coeff_tail_cdf_model[BLOCK_TYPES][REF_TYPES];
717*437bfbebSnyanmisaka 
718*437bfbebSnyanmisaka //#define PALETTE_BLOCK_SIZES (BLOCK_SIZE_SB64X64 - BLOCK_SIZE_SB8X8 + 1)
719*437bfbebSnyanmisaka #define PALETTE_BLOCK_SIZES 7
720*437bfbebSnyanmisaka #define PALETTE_SIZES 7
721*437bfbebSnyanmisaka #define PALETTE_Y_MODE_CONTEXTS 3
722*437bfbebSnyanmisaka #define PALETTE_UV_MODE_CONTEXTS 2
723*437bfbebSnyanmisaka #define PALETTE_COLOR_INDEX_CONTEXTS 5
724*437bfbebSnyanmisaka #define PALETTE_IDX_CONTEXTS 18
725*437bfbebSnyanmisaka #define PALETTE_COLORS 8
726*437bfbebSnyanmisaka #define KF_MODE_CONTEXTS 5
727*437bfbebSnyanmisaka 
728*437bfbebSnyanmisaka #define PLANE_TYPES 2
729*437bfbebSnyanmisaka #define TX_SIZES 5
730*437bfbebSnyanmisaka #define TXB_SKIP_CONTEXTS 13
731*437bfbebSnyanmisaka #define DC_SIGN_CONTEXTS 3
732*437bfbebSnyanmisaka #define SIG_COEF_CONTEXTS_EOB 4
733*437bfbebSnyanmisaka #define SIG_COEF_CONTEXTS 42
734*437bfbebSnyanmisaka #define COEFF_BASE_CONTEXTS 42
735*437bfbebSnyanmisaka #define EOB_COEF_CONTEXTS 9
736*437bfbebSnyanmisaka #define LEVEL_CONTEXTS 21
737*437bfbebSnyanmisaka #define NUM_BASE_LEVELS 2
738*437bfbebSnyanmisaka #define BR_CDF_SIZE 4
739*437bfbebSnyanmisaka #define MOTION_MODES 3
740*437bfbebSnyanmisaka #define DELTA_Q_PROBS 3
741*437bfbebSnyanmisaka #define COMP_REF_TYPE_CONTEXTS 5
742*437bfbebSnyanmisaka #define UNI_COMP_REF_CONTEXTS 3
743*437bfbebSnyanmisaka #define UNIDIR_COMP_REFS 4
744*437bfbebSnyanmisaka //#define FILTER_INTRA_MODES 5
745*437bfbebSnyanmisaka #define SKIP_MODE_CONTEXTS 3
746*437bfbebSnyanmisaka #define SKIP_CONTEXTS 3
747*437bfbebSnyanmisaka #define COMP_INDEX_CONTEXTS 6
748*437bfbebSnyanmisaka #define COMP_GROUP_IDX_CONTEXTS 7
749*437bfbebSnyanmisaka #define MAX_TX_CATS 4
750*437bfbebSnyanmisaka #define CFL_ALLOWED_TYPES 2
751*437bfbebSnyanmisaka #define UV_INTRA_MODES 14
752*437bfbebSnyanmisaka #define EXT_PARTITION_TYPES 10
753*437bfbebSnyanmisaka #define AV1_PARTITION_CONTEXTS (5 * PARTITION_PLOFFSET)
754*437bfbebSnyanmisaka 
755*437bfbebSnyanmisaka #define RESTORE_SWITCHABLE_TYPES 3
756*437bfbebSnyanmisaka #define DELTA_LF_PROBS 3
757*437bfbebSnyanmisaka #define FRAME_LF_COUNT 4
758*437bfbebSnyanmisaka #define MAX_SEGMENTS 8
759*437bfbebSnyanmisaka #define TOKEN_CDF_Q_CTXS 4
760*437bfbebSnyanmisaka #define SEG_TEMPORAL_PRED_CTXS 3
761*437bfbebSnyanmisaka #define SPATIAL_PREDICTION_PROBS 3
762*437bfbebSnyanmisaka 
763*437bfbebSnyanmisaka typedef RK_U16 aom_cdf_prob;
764*437bfbebSnyanmisaka 
765*437bfbebSnyanmisaka typedef struct {
766*437bfbebSnyanmisaka     RK_U16 joint_cdf[3];
767*437bfbebSnyanmisaka     RK_U16 sign_cdf[2];
768*437bfbebSnyanmisaka     RK_U16 clsss_cdf[2][10];
769*437bfbebSnyanmisaka     RK_U16 clsss0_fp_cdf[2][2][3];
770*437bfbebSnyanmisaka     RK_U16 fp_cdf[2][3];
771*437bfbebSnyanmisaka     RK_U16 class0_hp_cdf[2];
772*437bfbebSnyanmisaka     RK_U16 hp_cdf[2];
773*437bfbebSnyanmisaka     RK_U16 class0_cdf[2];
774*437bfbebSnyanmisaka     RK_U16 bits_cdf[2][10];
775*437bfbebSnyanmisaka } MvCDFs;
776*437bfbebSnyanmisaka 
777*437bfbebSnyanmisaka typedef struct {
778*437bfbebSnyanmisaka     RK_U16 partition_cdf[13][16];
779*437bfbebSnyanmisaka     // 64
780*437bfbebSnyanmisaka     RK_U16 kf_ymode_cdf[KF_MODE_CONTEXTS][KF_MODE_CONTEXTS][AV1_INTRA_MODES - 1];
781*437bfbebSnyanmisaka     RK_U16 segment_pred_cdf[PREDICTION_PROBS];
782*437bfbebSnyanmisaka     RK_U16 spatial_pred_seg_tree_cdf[SPATIAL_PREDICTION_PROBS][MAX_MB_SEGMENTS - 1];
783*437bfbebSnyanmisaka     RK_U16 mbskip_cdf[MBSKIP_CONTEXTS];
784*437bfbebSnyanmisaka     RK_U16 delta_q_cdf[DELTA_Q_PROBS];
785*437bfbebSnyanmisaka     RK_U16 delta_lf_multi_cdf[FRAME_LF_COUNT][DELTA_LF_PROBS];
786*437bfbebSnyanmisaka     RK_U16 delta_lf_cdf[DELTA_LF_PROBS];
787*437bfbebSnyanmisaka     RK_U16 skip_mode_cdf[SKIP_MODE_CONTEXTS];
788*437bfbebSnyanmisaka     RK_U16 vartx_part_cdf[VARTX_PART_CONTEXTS][1];
789*437bfbebSnyanmisaka     RK_U16 tx_size_cdf[MAX_TX_CATS][AV1_TX_SIZE_CONTEXTS][MAX_TX_DEPTH];
790*437bfbebSnyanmisaka     RK_U16 if_ymode_cdf[BLOCK_SIZE_GROUPS][AV1_INTRA_MODES - 1];
791*437bfbebSnyanmisaka     RK_U16 uv_mode_cdf[2][AV1_INTRA_MODES][AV1_INTRA_MODES - 1 + 1];
792*437bfbebSnyanmisaka     RK_U16 intra_inter_cdf[INTRA_INTER_CONTEXTS];
793*437bfbebSnyanmisaka     RK_U16 comp_inter_cdf[COMP_INTER_CONTEXTS];
794*437bfbebSnyanmisaka     RK_U16 single_ref_cdf[AV1_REF_CONTEXTS][SINGLE_REFS - 1];
795*437bfbebSnyanmisaka     RK_U16 comp_ref_type_cdf[COMP_REF_TYPE_CONTEXTS][1];
796*437bfbebSnyanmisaka     RK_U16 uni_comp_ref_cdf[UNI_COMP_REF_CONTEXTS][UNIDIR_COMP_REFS - 1][1];
797*437bfbebSnyanmisaka     RK_U16 comp_ref_cdf[AV1_REF_CONTEXTS][FWD_REFS - 1];
798*437bfbebSnyanmisaka     RK_U16 comp_bwdref_cdf[AV1_REF_CONTEXTS][BWD_REFS - 1];
799*437bfbebSnyanmisaka     RK_U16 newmv_cdf[NEWMV_MODE_CONTEXTS];
800*437bfbebSnyanmisaka     RK_U16 zeromv_cdf[ZEROMV_MODE_CONTEXTS];
801*437bfbebSnyanmisaka     RK_U16 refmv_cdf[REFMV_MODE_CONTEXTS];
802*437bfbebSnyanmisaka     RK_U16 drl_cdf[DRL_MODE_CONTEXTS];
803*437bfbebSnyanmisaka     RK_U16 interp_filter_cdf[SWITCHABLE_FILTER_CONTEXTS][AV1_SWITCHABLE_FILTERS - 1];
804*437bfbebSnyanmisaka 
805*437bfbebSnyanmisaka     MvCDFs mv_cdf;
806*437bfbebSnyanmisaka 
807*437bfbebSnyanmisaka     RK_U16 obmc_cdf[BLOCK_SIZE_TYPES];
808*437bfbebSnyanmisaka     RK_U16 motion_mode_cdf[BLOCK_SIZE_TYPES][2];
809*437bfbebSnyanmisaka 
810*437bfbebSnyanmisaka     RK_U16 inter_compound_mode_cdf[AV1_INTER_MODE_CONTEXTS][INTER_COMPOUND_MODES - 1];
811*437bfbebSnyanmisaka     RK_U16 compound_type_cdf[BLOCK_SIZE_TYPES][CDF_SIZE(COMPOUND_TYPES - 1)];
812*437bfbebSnyanmisaka     RK_U16 interintra_cdf[BLOCK_SIZE_GROUPS];
813*437bfbebSnyanmisaka     RK_U16 interintra_mode_cdf[BLOCK_SIZE_GROUPS][INTERINTRA_MODES - 1];
814*437bfbebSnyanmisaka     RK_U16 wedge_interintra_cdf[BLOCK_SIZE_TYPES];
815*437bfbebSnyanmisaka     RK_U16 wedge_idx_cdf[BLOCK_SIZE_TYPES][CDF_SIZE(16)];
816*437bfbebSnyanmisaka 
817*437bfbebSnyanmisaka     RK_U16 palette_y_mode_cdf[PALETTE_BLOCK_SIZES][PALETTE_Y_MODE_CONTEXTS][1];
818*437bfbebSnyanmisaka     RK_U16 palette_uv_mode_cdf[PALETTE_UV_MODE_CONTEXTS][1];
819*437bfbebSnyanmisaka     RK_U16 palette_y_size_cdf[PALETTE_BLOCK_SIZES][PALETTE_SIZES - 1];
820*437bfbebSnyanmisaka     RK_U16 palette_uv_size_cdf[PALETTE_BLOCK_SIZES][PALETTE_SIZES - 1];
821*437bfbebSnyanmisaka 
822*437bfbebSnyanmisaka     RK_U16 cfl_sign_cdf[CFL_JOINT_SIGNS - 1];
823*437bfbebSnyanmisaka     RK_U16 cfl_alpha_cdf[CFL_ALPHA_CONTEXTS][CFL_ALPHABET_SIZE - 1];
824*437bfbebSnyanmisaka 
825*437bfbebSnyanmisaka     RK_U16 intrabc_cdf[1];
826*437bfbebSnyanmisaka     RK_U16 angle_delta_cdf[DIRECTIONAL_MODES][6];
827*437bfbebSnyanmisaka 
828*437bfbebSnyanmisaka     RK_U16 filter_intra_mode_cdf[FILTER_INTRA_MODES - 1];
829*437bfbebSnyanmisaka     RK_U16 filter_intra_cdf[BLOCK_SIZES_ALL];
830*437bfbebSnyanmisaka     RK_U16 comp_group_idx_cdf[COMP_GROUP_IDX_CONTEXTS][CDF_SIZE(2)];
831*437bfbebSnyanmisaka     RK_U16 compound_idx_cdf[COMP_INDEX_CONTEXTS][CDF_SIZE(2)];
832*437bfbebSnyanmisaka 
833*437bfbebSnyanmisaka     RK_U16 dummy0[14];
834*437bfbebSnyanmisaka 
835*437bfbebSnyanmisaka     // Palette index contexts; sizes 1/7, 2/6, 3/5 packed together
836*437bfbebSnyanmisaka     RK_U16 palette_y_color_index_cdf[PALETTE_IDX_CONTEXTS][8];
837*437bfbebSnyanmisaka     RK_U16 palette_uv_color_index_cdf[PALETTE_IDX_CONTEXTS][8];
838*437bfbebSnyanmisaka     // RK_U16 dummy1[0];
839*437bfbebSnyanmisaka 
840*437bfbebSnyanmisaka     // Note: cdf space can be optimized (most sets have fewer than EXT_TX_TYPES
841*437bfbebSnyanmisaka     // symbols)
842*437bfbebSnyanmisaka     RK_U16 tx_type_intra0_cdf[EXTTX_SIZES][AV1_INTRA_MODES][8];
843*437bfbebSnyanmisaka     RK_U16 tx_type_intra1_cdf[EXTTX_SIZES][AV1_INTRA_MODES][4];
844*437bfbebSnyanmisaka     RK_U16 tx_type_inter_cdf[2][EXTTX_SIZES][EXT_TX_TYPES];
845*437bfbebSnyanmisaka 
846*437bfbebSnyanmisaka     aom_cdf_prob txb_skip_cdf[TX_SIZES][TXB_SKIP_CONTEXTS][CDF_SIZE(2)];
847*437bfbebSnyanmisaka     aom_cdf_prob eob_extra_cdf[TX_SIZES][PLANE_TYPES][EOB_COEF_CONTEXTS][CDF_SIZE(2)];
848*437bfbebSnyanmisaka     RK_U16 dummy_[5];
849*437bfbebSnyanmisaka 
850*437bfbebSnyanmisaka     aom_cdf_prob eob_flag_cdf16[PLANE_TYPES][2][4];
851*437bfbebSnyanmisaka     aom_cdf_prob eob_flag_cdf32[PLANE_TYPES][2][8];
852*437bfbebSnyanmisaka     aom_cdf_prob eob_flag_cdf64[PLANE_TYPES][2][8];
853*437bfbebSnyanmisaka     aom_cdf_prob eob_flag_cdf128[PLANE_TYPES][2][8];
854*437bfbebSnyanmisaka     aom_cdf_prob eob_flag_cdf256[PLANE_TYPES][2][8];
855*437bfbebSnyanmisaka     aom_cdf_prob eob_flag_cdf512[PLANE_TYPES][2][16];
856*437bfbebSnyanmisaka     aom_cdf_prob eob_flag_cdf1024[PLANE_TYPES][2][16];
857*437bfbebSnyanmisaka     aom_cdf_prob coeff_base_eob_cdf[TX_SIZES][PLANE_TYPES][SIG_COEF_CONTEXTS_EOB][CDF_SIZE(3)];
858*437bfbebSnyanmisaka     aom_cdf_prob coeff_base_cdf[TX_SIZES][PLANE_TYPES][SIG_COEF_CONTEXTS][CDF_SIZE(4) + 1];
859*437bfbebSnyanmisaka     aom_cdf_prob dc_sign_cdf[PLANE_TYPES][DC_SIGN_CONTEXTS][CDF_SIZE(2)];
860*437bfbebSnyanmisaka     RK_U16 dummy_2[2];
861*437bfbebSnyanmisaka     aom_cdf_prob coeff_br_cdf[TX_SIZES][PLANE_TYPES][LEVEL_CONTEXTS][CDF_SIZE(BR_CDF_SIZE) + 1];
862*437bfbebSnyanmisaka     RK_U16 dummy2[16];
863*437bfbebSnyanmisaka } AV1CDFs;
864*437bfbebSnyanmisaka 
865*437bfbebSnyanmisaka typedef struct {
866*437bfbebSnyanmisaka     RK_U8 scaling_lut_y[256];
867*437bfbebSnyanmisaka     RK_U8 scaling_lut_cb[256];
868*437bfbebSnyanmisaka     RK_U8 scaling_lut_cr[256];
869*437bfbebSnyanmisaka     RK_S16 cropped_luma_grain_block[4096];
870*437bfbebSnyanmisaka     RK_S16 cropped_chroma_grain_block[1024 * 2];
871*437bfbebSnyanmisaka } AV1FilmGrainMemory;
872*437bfbebSnyanmisaka 
873*437bfbebSnyanmisaka #endif  // __AV1COMMONDEC_H__
874