xref: /aosp_15_r20/external/libdav1d/src/levels.h (revision c09093415860a1c2373dacd84c4fde00c507cdfd)
1*c0909341SAndroid Build Coastguard Worker /*
2*c0909341SAndroid Build Coastguard Worker  * Copyright © 2018, VideoLAN and dav1d authors
3*c0909341SAndroid Build Coastguard Worker  * Copyright © 2018, Two Orioles, LLC
4*c0909341SAndroid Build Coastguard Worker  * All rights reserved.
5*c0909341SAndroid Build Coastguard Worker  *
6*c0909341SAndroid Build Coastguard Worker  * Redistribution and use in source and binary forms, with or without
7*c0909341SAndroid Build Coastguard Worker  * modification, are permitted provided that the following conditions are met:
8*c0909341SAndroid Build Coastguard Worker  *
9*c0909341SAndroid Build Coastguard Worker  * 1. Redistributions of source code must retain the above copyright notice, this
10*c0909341SAndroid Build Coastguard Worker  *    list of conditions and the following disclaimer.
11*c0909341SAndroid Build Coastguard Worker  *
12*c0909341SAndroid Build Coastguard Worker  * 2. Redistributions in binary form must reproduce the above copyright notice,
13*c0909341SAndroid Build Coastguard Worker  *    this list of conditions and the following disclaimer in the documentation
14*c0909341SAndroid Build Coastguard Worker  *    and/or other materials provided with the distribution.
15*c0909341SAndroid Build Coastguard Worker  *
16*c0909341SAndroid Build Coastguard Worker  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17*c0909341SAndroid Build Coastguard Worker  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18*c0909341SAndroid Build Coastguard Worker  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19*c0909341SAndroid Build Coastguard Worker  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
20*c0909341SAndroid Build Coastguard Worker  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21*c0909341SAndroid Build Coastguard Worker  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22*c0909341SAndroid Build Coastguard Worker  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23*c0909341SAndroid Build Coastguard Worker  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24*c0909341SAndroid Build Coastguard Worker  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25*c0909341SAndroid Build Coastguard Worker  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*c0909341SAndroid Build Coastguard Worker  */
27*c0909341SAndroid Build Coastguard Worker 
28*c0909341SAndroid Build Coastguard Worker #ifndef DAV1D_SRC_LEVELS_H
29*c0909341SAndroid Build Coastguard Worker #define DAV1D_SRC_LEVELS_H
30*c0909341SAndroid Build Coastguard Worker 
31*c0909341SAndroid Build Coastguard Worker #include <stdint.h>
32*c0909341SAndroid Build Coastguard Worker 
33*c0909341SAndroid Build Coastguard Worker #include "dav1d/headers.h"
34*c0909341SAndroid Build Coastguard Worker #include "common/attributes.h"
35*c0909341SAndroid Build Coastguard Worker 
36*c0909341SAndroid Build Coastguard Worker enum ObuMetaType {
37*c0909341SAndroid Build Coastguard Worker     OBU_META_HDR_CLL     = 1,
38*c0909341SAndroid Build Coastguard Worker     OBU_META_HDR_MDCV    = 2,
39*c0909341SAndroid Build Coastguard Worker     OBU_META_SCALABILITY = 3,
40*c0909341SAndroid Build Coastguard Worker     OBU_META_ITUT_T35    = 4,
41*c0909341SAndroid Build Coastguard Worker     OBU_META_TIMECODE    = 5,
42*c0909341SAndroid Build Coastguard Worker };
43*c0909341SAndroid Build Coastguard Worker 
44*c0909341SAndroid Build Coastguard Worker enum TxfmSize {
45*c0909341SAndroid Build Coastguard Worker     TX_4X4,
46*c0909341SAndroid Build Coastguard Worker     TX_8X8,
47*c0909341SAndroid Build Coastguard Worker     TX_16X16,
48*c0909341SAndroid Build Coastguard Worker     TX_32X32,
49*c0909341SAndroid Build Coastguard Worker     TX_64X64,
50*c0909341SAndroid Build Coastguard Worker     N_TX_SIZES,
51*c0909341SAndroid Build Coastguard Worker };
52*c0909341SAndroid Build Coastguard Worker 
53*c0909341SAndroid Build Coastguard Worker enum BlockLevel {
54*c0909341SAndroid Build Coastguard Worker     BL_128X128,
55*c0909341SAndroid Build Coastguard Worker     BL_64X64,
56*c0909341SAndroid Build Coastguard Worker     BL_32X32,
57*c0909341SAndroid Build Coastguard Worker     BL_16X16,
58*c0909341SAndroid Build Coastguard Worker     BL_8X8,
59*c0909341SAndroid Build Coastguard Worker     N_BL_LEVELS,
60*c0909341SAndroid Build Coastguard Worker };
61*c0909341SAndroid Build Coastguard Worker 
62*c0909341SAndroid Build Coastguard Worker enum RectTxfmSize {
63*c0909341SAndroid Build Coastguard Worker     RTX_4X8 = N_TX_SIZES,
64*c0909341SAndroid Build Coastguard Worker     RTX_8X4,
65*c0909341SAndroid Build Coastguard Worker     RTX_8X16,
66*c0909341SAndroid Build Coastguard Worker     RTX_16X8,
67*c0909341SAndroid Build Coastguard Worker     RTX_16X32,
68*c0909341SAndroid Build Coastguard Worker     RTX_32X16,
69*c0909341SAndroid Build Coastguard Worker     RTX_32X64,
70*c0909341SAndroid Build Coastguard Worker     RTX_64X32,
71*c0909341SAndroid Build Coastguard Worker     RTX_4X16,
72*c0909341SAndroid Build Coastguard Worker     RTX_16X4,
73*c0909341SAndroid Build Coastguard Worker     RTX_8X32,
74*c0909341SAndroid Build Coastguard Worker     RTX_32X8,
75*c0909341SAndroid Build Coastguard Worker     RTX_16X64,
76*c0909341SAndroid Build Coastguard Worker     RTX_64X16,
77*c0909341SAndroid Build Coastguard Worker     N_RECT_TX_SIZES
78*c0909341SAndroid Build Coastguard Worker };
79*c0909341SAndroid Build Coastguard Worker 
80*c0909341SAndroid Build Coastguard Worker enum TxfmType {
81*c0909341SAndroid Build Coastguard Worker     DCT_DCT,    // DCT  in both horizontal and vertical
82*c0909341SAndroid Build Coastguard Worker     ADST_DCT,   // ADST in vertical, DCT in horizontal
83*c0909341SAndroid Build Coastguard Worker     DCT_ADST,   // DCT  in vertical, ADST in horizontal
84*c0909341SAndroid Build Coastguard Worker     ADST_ADST,  // ADST in both directions
85*c0909341SAndroid Build Coastguard Worker     FLIPADST_DCT,
86*c0909341SAndroid Build Coastguard Worker     DCT_FLIPADST,
87*c0909341SAndroid Build Coastguard Worker     FLIPADST_FLIPADST,
88*c0909341SAndroid Build Coastguard Worker     ADST_FLIPADST,
89*c0909341SAndroid Build Coastguard Worker     FLIPADST_ADST,
90*c0909341SAndroid Build Coastguard Worker     IDTX,
91*c0909341SAndroid Build Coastguard Worker     V_DCT,
92*c0909341SAndroid Build Coastguard Worker     H_DCT,
93*c0909341SAndroid Build Coastguard Worker     V_ADST,
94*c0909341SAndroid Build Coastguard Worker     H_ADST,
95*c0909341SAndroid Build Coastguard Worker     V_FLIPADST,
96*c0909341SAndroid Build Coastguard Worker     H_FLIPADST,
97*c0909341SAndroid Build Coastguard Worker     N_TX_TYPES,
98*c0909341SAndroid Build Coastguard Worker     WHT_WHT = N_TX_TYPES,
99*c0909341SAndroid Build Coastguard Worker     N_TX_TYPES_PLUS_LL,
100*c0909341SAndroid Build Coastguard Worker };
101*c0909341SAndroid Build Coastguard Worker 
102*c0909341SAndroid Build Coastguard Worker enum TxClass {
103*c0909341SAndroid Build Coastguard Worker     TX_CLASS_2D,
104*c0909341SAndroid Build Coastguard Worker     TX_CLASS_H,
105*c0909341SAndroid Build Coastguard Worker     TX_CLASS_V,
106*c0909341SAndroid Build Coastguard Worker };
107*c0909341SAndroid Build Coastguard Worker 
108*c0909341SAndroid Build Coastguard Worker enum IntraPredMode {
109*c0909341SAndroid Build Coastguard Worker     DC_PRED,
110*c0909341SAndroid Build Coastguard Worker     VERT_PRED,
111*c0909341SAndroid Build Coastguard Worker     HOR_PRED,
112*c0909341SAndroid Build Coastguard Worker     DIAG_DOWN_LEFT_PRED,
113*c0909341SAndroid Build Coastguard Worker     DIAG_DOWN_RIGHT_PRED,
114*c0909341SAndroid Build Coastguard Worker     VERT_RIGHT_PRED,
115*c0909341SAndroid Build Coastguard Worker     HOR_DOWN_PRED,
116*c0909341SAndroid Build Coastguard Worker     HOR_UP_PRED,
117*c0909341SAndroid Build Coastguard Worker     VERT_LEFT_PRED,
118*c0909341SAndroid Build Coastguard Worker     SMOOTH_PRED,
119*c0909341SAndroid Build Coastguard Worker     SMOOTH_V_PRED,
120*c0909341SAndroid Build Coastguard Worker     SMOOTH_H_PRED,
121*c0909341SAndroid Build Coastguard Worker     PAETH_PRED,
122*c0909341SAndroid Build Coastguard Worker     N_INTRA_PRED_MODES,
123*c0909341SAndroid Build Coastguard Worker     CFL_PRED = N_INTRA_PRED_MODES,
124*c0909341SAndroid Build Coastguard Worker     N_UV_INTRA_PRED_MODES,
125*c0909341SAndroid Build Coastguard Worker     N_IMPL_INTRA_PRED_MODES = N_UV_INTRA_PRED_MODES,
126*c0909341SAndroid Build Coastguard Worker     LEFT_DC_PRED = DIAG_DOWN_LEFT_PRED,
127*c0909341SAndroid Build Coastguard Worker     TOP_DC_PRED,
128*c0909341SAndroid Build Coastguard Worker     DC_128_PRED,
129*c0909341SAndroid Build Coastguard Worker     Z1_PRED,
130*c0909341SAndroid Build Coastguard Worker     Z2_PRED,
131*c0909341SAndroid Build Coastguard Worker     Z3_PRED,
132*c0909341SAndroid Build Coastguard Worker     FILTER_PRED = N_INTRA_PRED_MODES,
133*c0909341SAndroid Build Coastguard Worker };
134*c0909341SAndroid Build Coastguard Worker 
135*c0909341SAndroid Build Coastguard Worker enum InterIntraPredMode {
136*c0909341SAndroid Build Coastguard Worker     II_DC_PRED,
137*c0909341SAndroid Build Coastguard Worker     II_VERT_PRED,
138*c0909341SAndroid Build Coastguard Worker     II_HOR_PRED,
139*c0909341SAndroid Build Coastguard Worker     II_SMOOTH_PRED,
140*c0909341SAndroid Build Coastguard Worker     N_INTER_INTRA_PRED_MODES,
141*c0909341SAndroid Build Coastguard Worker };
142*c0909341SAndroid Build Coastguard Worker 
143*c0909341SAndroid Build Coastguard Worker enum BlockPartition {
144*c0909341SAndroid Build Coastguard Worker     PARTITION_NONE,     // [ ] <-.
145*c0909341SAndroid Build Coastguard Worker     PARTITION_H,        // [-]   |
146*c0909341SAndroid Build Coastguard Worker     PARTITION_V,        // [|]   |
147*c0909341SAndroid Build Coastguard Worker     PARTITION_SPLIT,    // [+] --'
148*c0909341SAndroid Build Coastguard Worker     PARTITION_T_TOP_SPLIT,    // [⊥] i.e. split top, H bottom
149*c0909341SAndroid Build Coastguard Worker     PARTITION_T_BOTTOM_SPLIT, // [т] i.e. H top, split bottom
150*c0909341SAndroid Build Coastguard Worker     PARTITION_T_LEFT_SPLIT,   // [-|] i.e. split left, V right
151*c0909341SAndroid Build Coastguard Worker     PARTITION_T_RIGHT_SPLIT,  // [|-] i.e. V left, split right
152*c0909341SAndroid Build Coastguard Worker     PARTITION_H4,       // [Ⲷ]
153*c0909341SAndroid Build Coastguard Worker     PARTITION_V4,       // [Ⲽ]
154*c0909341SAndroid Build Coastguard Worker     N_PARTITIONS,
155*c0909341SAndroid Build Coastguard Worker     N_SUB8X8_PARTITIONS = PARTITION_T_TOP_SPLIT,
156*c0909341SAndroid Build Coastguard Worker };
157*c0909341SAndroid Build Coastguard Worker 
158*c0909341SAndroid Build Coastguard Worker enum BlockSize {
159*c0909341SAndroid Build Coastguard Worker     BS_128x128,
160*c0909341SAndroid Build Coastguard Worker     BS_128x64,
161*c0909341SAndroid Build Coastguard Worker     BS_64x128,
162*c0909341SAndroid Build Coastguard Worker     BS_64x64,
163*c0909341SAndroid Build Coastguard Worker     BS_64x32,
164*c0909341SAndroid Build Coastguard Worker     BS_64x16,
165*c0909341SAndroid Build Coastguard Worker     BS_32x64,
166*c0909341SAndroid Build Coastguard Worker     BS_32x32,
167*c0909341SAndroid Build Coastguard Worker     BS_32x16,
168*c0909341SAndroid Build Coastguard Worker     BS_32x8,
169*c0909341SAndroid Build Coastguard Worker     BS_16x64,
170*c0909341SAndroid Build Coastguard Worker     BS_16x32,
171*c0909341SAndroid Build Coastguard Worker     BS_16x16,
172*c0909341SAndroid Build Coastguard Worker     BS_16x8,
173*c0909341SAndroid Build Coastguard Worker     BS_16x4,
174*c0909341SAndroid Build Coastguard Worker     BS_8x32,
175*c0909341SAndroid Build Coastguard Worker     BS_8x16,
176*c0909341SAndroid Build Coastguard Worker     BS_8x8,
177*c0909341SAndroid Build Coastguard Worker     BS_8x4,
178*c0909341SAndroid Build Coastguard Worker     BS_4x16,
179*c0909341SAndroid Build Coastguard Worker     BS_4x8,
180*c0909341SAndroid Build Coastguard Worker     BS_4x4,
181*c0909341SAndroid Build Coastguard Worker     N_BS_SIZES,
182*c0909341SAndroid Build Coastguard Worker };
183*c0909341SAndroid Build Coastguard Worker 
184*c0909341SAndroid Build Coastguard Worker enum Filter2d { // order is horizontal, vertical
185*c0909341SAndroid Build Coastguard Worker     FILTER_2D_8TAP_REGULAR,
186*c0909341SAndroid Build Coastguard Worker     FILTER_2D_8TAP_REGULAR_SMOOTH,
187*c0909341SAndroid Build Coastguard Worker     FILTER_2D_8TAP_REGULAR_SHARP,
188*c0909341SAndroid Build Coastguard Worker     FILTER_2D_8TAP_SHARP_REGULAR,
189*c0909341SAndroid Build Coastguard Worker     FILTER_2D_8TAP_SHARP_SMOOTH,
190*c0909341SAndroid Build Coastguard Worker     FILTER_2D_8TAP_SHARP,
191*c0909341SAndroid Build Coastguard Worker     FILTER_2D_8TAP_SMOOTH_REGULAR,
192*c0909341SAndroid Build Coastguard Worker     FILTER_2D_8TAP_SMOOTH,
193*c0909341SAndroid Build Coastguard Worker     FILTER_2D_8TAP_SMOOTH_SHARP,
194*c0909341SAndroid Build Coastguard Worker     FILTER_2D_BILINEAR,
195*c0909341SAndroid Build Coastguard Worker     N_2D_FILTERS,
196*c0909341SAndroid Build Coastguard Worker };
197*c0909341SAndroid Build Coastguard Worker 
198*c0909341SAndroid Build Coastguard Worker enum MVJoint {
199*c0909341SAndroid Build Coastguard Worker     MV_JOINT_ZERO,
200*c0909341SAndroid Build Coastguard Worker     MV_JOINT_H,
201*c0909341SAndroid Build Coastguard Worker     MV_JOINT_V,
202*c0909341SAndroid Build Coastguard Worker     MV_JOINT_HV,
203*c0909341SAndroid Build Coastguard Worker     N_MV_JOINTS,
204*c0909341SAndroid Build Coastguard Worker };
205*c0909341SAndroid Build Coastguard Worker 
206*c0909341SAndroid Build Coastguard Worker enum InterPredMode {
207*c0909341SAndroid Build Coastguard Worker     NEARESTMV,
208*c0909341SAndroid Build Coastguard Worker     NEARMV,
209*c0909341SAndroid Build Coastguard Worker     GLOBALMV,
210*c0909341SAndroid Build Coastguard Worker     NEWMV,
211*c0909341SAndroid Build Coastguard Worker     N_INTER_PRED_MODES,
212*c0909341SAndroid Build Coastguard Worker };
213*c0909341SAndroid Build Coastguard Worker 
214*c0909341SAndroid Build Coastguard Worker enum DRL_PROXIMITY {
215*c0909341SAndroid Build Coastguard Worker     NEAREST_DRL,
216*c0909341SAndroid Build Coastguard Worker     NEARER_DRL,
217*c0909341SAndroid Build Coastguard Worker     NEAR_DRL,
218*c0909341SAndroid Build Coastguard Worker     NEARISH_DRL
219*c0909341SAndroid Build Coastguard Worker };
220*c0909341SAndroid Build Coastguard Worker 
221*c0909341SAndroid Build Coastguard Worker enum CompInterPredMode {
222*c0909341SAndroid Build Coastguard Worker     NEARESTMV_NEARESTMV,
223*c0909341SAndroid Build Coastguard Worker     NEARMV_NEARMV,
224*c0909341SAndroid Build Coastguard Worker     NEARESTMV_NEWMV,
225*c0909341SAndroid Build Coastguard Worker     NEWMV_NEARESTMV,
226*c0909341SAndroid Build Coastguard Worker     NEARMV_NEWMV,
227*c0909341SAndroid Build Coastguard Worker     NEWMV_NEARMV,
228*c0909341SAndroid Build Coastguard Worker     GLOBALMV_GLOBALMV,
229*c0909341SAndroid Build Coastguard Worker     NEWMV_NEWMV,
230*c0909341SAndroid Build Coastguard Worker     N_COMP_INTER_PRED_MODES,
231*c0909341SAndroid Build Coastguard Worker };
232*c0909341SAndroid Build Coastguard Worker 
233*c0909341SAndroid Build Coastguard Worker enum CompInterType {
234*c0909341SAndroid Build Coastguard Worker     COMP_INTER_NONE,
235*c0909341SAndroid Build Coastguard Worker     COMP_INTER_WEIGHTED_AVG,
236*c0909341SAndroid Build Coastguard Worker     COMP_INTER_AVG,
237*c0909341SAndroid Build Coastguard Worker     COMP_INTER_SEG,
238*c0909341SAndroid Build Coastguard Worker     COMP_INTER_WEDGE,
239*c0909341SAndroid Build Coastguard Worker };
240*c0909341SAndroid Build Coastguard Worker 
241*c0909341SAndroid Build Coastguard Worker enum InterIntraType {
242*c0909341SAndroid Build Coastguard Worker     INTER_INTRA_NONE,
243*c0909341SAndroid Build Coastguard Worker     INTER_INTRA_BLEND,
244*c0909341SAndroid Build Coastguard Worker     INTER_INTRA_WEDGE,
245*c0909341SAndroid Build Coastguard Worker };
246*c0909341SAndroid Build Coastguard Worker 
247*c0909341SAndroid Build Coastguard Worker typedef union mv {
248*c0909341SAndroid Build Coastguard Worker     struct {
249*c0909341SAndroid Build Coastguard Worker         int16_t y, x;
250*c0909341SAndroid Build Coastguard Worker     };
251*c0909341SAndroid Build Coastguard Worker     uint32_t n;
252*c0909341SAndroid Build Coastguard Worker } mv;
253*c0909341SAndroid Build Coastguard Worker 
254*c0909341SAndroid Build Coastguard Worker enum MotionMode {
255*c0909341SAndroid Build Coastguard Worker     MM_TRANSLATION,
256*c0909341SAndroid Build Coastguard Worker     MM_OBMC,
257*c0909341SAndroid Build Coastguard Worker     MM_WARP,
258*c0909341SAndroid Build Coastguard Worker };
259*c0909341SAndroid Build Coastguard Worker 
260*c0909341SAndroid Build Coastguard Worker #define QINDEX_RANGE 256
261*c0909341SAndroid Build Coastguard Worker 
262*c0909341SAndroid Build Coastguard Worker typedef struct Av1Block {
263*c0909341SAndroid Build Coastguard Worker     uint8_t bl, bs, bp;
264*c0909341SAndroid Build Coastguard Worker     uint8_t intra, seg_id, skip_mode, skip, uvtx;
265*c0909341SAndroid Build Coastguard Worker     union {
266*c0909341SAndroid Build Coastguard Worker         struct {
267*c0909341SAndroid Build Coastguard Worker             uint8_t y_mode, uv_mode, tx, pal_sz[2];
268*c0909341SAndroid Build Coastguard Worker             int8_t y_angle, uv_angle, cfl_alpha[2];
269*c0909341SAndroid Build Coastguard Worker         }; // intra
270*c0909341SAndroid Build Coastguard Worker         struct {
271*c0909341SAndroid Build Coastguard Worker             union {
272*c0909341SAndroid Build Coastguard Worker                 struct {
273*c0909341SAndroid Build Coastguard Worker                     union mv mv[2];
274*c0909341SAndroid Build Coastguard Worker                     uint8_t wedge_idx, mask_sign, interintra_mode;
275*c0909341SAndroid Build Coastguard Worker                 };
276*c0909341SAndroid Build Coastguard Worker                 struct {
277*c0909341SAndroid Build Coastguard Worker                     union mv mv2d;
278*c0909341SAndroid Build Coastguard Worker                     int16_t matrix[4];
279*c0909341SAndroid Build Coastguard Worker                 };
280*c0909341SAndroid Build Coastguard Worker             };
281*c0909341SAndroid Build Coastguard Worker             uint8_t comp_type, inter_mode, motion_mode, drl_idx;
282*c0909341SAndroid Build Coastguard Worker             int8_t ref[2];
283*c0909341SAndroid Build Coastguard Worker             uint8_t max_ytx, filter2d, interintra_type, tx_split0;
284*c0909341SAndroid Build Coastguard Worker             uint16_t tx_split1;
285*c0909341SAndroid Build Coastguard Worker         }; // inter
286*c0909341SAndroid Build Coastguard Worker     };
287*c0909341SAndroid Build Coastguard Worker } Av1Block;
288*c0909341SAndroid Build Coastguard Worker 
289*c0909341SAndroid Build Coastguard Worker #endif /* DAV1D_SRC_LEVELS_H */
290