xref: /aosp_15_r20/external/libhevc/common/ihevc_defs.h (revision c83a76b084498d55f252f48b2e3786804cdf24b7)
1*c83a76b0SSuyog Pawar /******************************************************************************
2*c83a76b0SSuyog Pawar *
3*c83a76b0SSuyog Pawar * Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
4*c83a76b0SSuyog Pawar *
5*c83a76b0SSuyog Pawar * Licensed under the Apache License, Version 2.0 (the "License");
6*c83a76b0SSuyog Pawar * you may not use this file except in compliance with the License.
7*c83a76b0SSuyog Pawar * You may obtain a copy of the License at:
8*c83a76b0SSuyog Pawar *
9*c83a76b0SSuyog Pawar * http://www.apache.org/licenses/LICENSE-2.0
10*c83a76b0SSuyog Pawar *
11*c83a76b0SSuyog Pawar * Unless required by applicable law or agreed to in writing, software
12*c83a76b0SSuyog Pawar * distributed under the License is distributed on an "AS IS" BASIS,
13*c83a76b0SSuyog Pawar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*c83a76b0SSuyog Pawar * See the License for the specific language governing permissions and
15*c83a76b0SSuyog Pawar * limitations under the License.
16*c83a76b0SSuyog Pawar *
17*c83a76b0SSuyog Pawar ******************************************************************************/
18*c83a76b0SSuyog Pawar /**
19*c83a76b0SSuyog Pawar *******************************************************************************
20*c83a76b0SSuyog Pawar * @file
21*c83a76b0SSuyog Pawar *  ihevc_defs.h
22*c83a76b0SSuyog Pawar *
23*c83a76b0SSuyog Pawar * @brief
24*c83a76b0SSuyog Pawar *  Definitions used in the codec
25*c83a76b0SSuyog Pawar *
26*c83a76b0SSuyog Pawar * @author
27*c83a76b0SSuyog Pawar *  Ittiam
28*c83a76b0SSuyog Pawar *
29*c83a76b0SSuyog Pawar *
30*c83a76b0SSuyog Pawar * @remarks
31*c83a76b0SSuyog Pawar *  None
32*c83a76b0SSuyog Pawar *
33*c83a76b0SSuyog Pawar *******************************************************************************
34*c83a76b0SSuyog Pawar */
35*c83a76b0SSuyog Pawar #ifndef _IHEVC_DEFS_H_
36*c83a76b0SSuyog Pawar #define _IHEVC_DEFS_H_
37*c83a76b0SSuyog Pawar 
38*c83a76b0SSuyog Pawar /*****************************************************************************/
39*c83a76b0SSuyog Pawar /* Profile and Levels                                                        */
40*c83a76b0SSuyog Pawar /*****************************************************************************/
41*c83a76b0SSuyog Pawar enum
42*c83a76b0SSuyog Pawar {
43*c83a76b0SSuyog Pawar     IHEVC_PROFILE_MAIN = 0,
44*c83a76b0SSuyog Pawar };
45*c83a76b0SSuyog Pawar 
46*c83a76b0SSuyog Pawar enum
47*c83a76b0SSuyog Pawar {
48*c83a76b0SSuyog Pawar     IHEVC_TIER_MAIN,
49*c83a76b0SSuyog Pawar     IHEVC_TIER_HIGH,
50*c83a76b0SSuyog Pawar };
51*c83a76b0SSuyog Pawar 
52*c83a76b0SSuyog Pawar 
53*c83a76b0SSuyog Pawar /* Slice type enums - Do not change the values */
54*c83a76b0SSuyog Pawar 
55*c83a76b0SSuyog Pawar enum
56*c83a76b0SSuyog Pawar {
57*c83a76b0SSuyog Pawar     BSLICE = 0,
58*c83a76b0SSuyog Pawar     PSLICE = 1,
59*c83a76b0SSuyog Pawar     ISLICE = 2,
60*c83a76b0SSuyog Pawar };
61*c83a76b0SSuyog Pawar 
62*c83a76b0SSuyog Pawar /** Enum for Level : Multiplication by 30 as per spec is implemented as multiplied by 10 and then by 3
63*c83a76b0SSuyog Pawar  * User will give level multiplied by 10 in the API
64*c83a76b0SSuyog Pawar  */
65*c83a76b0SSuyog Pawar enum
66*c83a76b0SSuyog Pawar {
67*c83a76b0SSuyog Pawar     IHEVC_LEVEL_10 = 10 * 3,
68*c83a76b0SSuyog Pawar     IHEVC_LEVEL_20 = 20 * 3,
69*c83a76b0SSuyog Pawar     IHEVC_LEVEL_21 = 21 * 3,
70*c83a76b0SSuyog Pawar     IHEVC_LEVEL_30 = 30 * 3,
71*c83a76b0SSuyog Pawar     IHEVC_LEVEL_31 = 31 * 3,
72*c83a76b0SSuyog Pawar     IHEVC_LEVEL_40 = 40 * 3,
73*c83a76b0SSuyog Pawar     IHEVC_LEVEL_41 = 41 * 3,
74*c83a76b0SSuyog Pawar     IHEVC_LEVEL_50 = 50 * 3,
75*c83a76b0SSuyog Pawar     IHEVC_LEVEL_51 = 51 * 3,
76*c83a76b0SSuyog Pawar     IHEVC_LEVEL_52 = 52 * 3,
77*c83a76b0SSuyog Pawar     IHEVC_LEVEL_60 = 60 * 3,
78*c83a76b0SSuyog Pawar     IHEVC_LEVEL_61 = 61 * 3,
79*c83a76b0SSuyog Pawar     IHEVC_LEVEL_62 = 62 * 3,
80*c83a76b0SSuyog Pawar };
81*c83a76b0SSuyog Pawar 
82*c83a76b0SSuyog Pawar 
83*c83a76b0SSuyog Pawar enum
84*c83a76b0SSuyog Pawar {
85*c83a76b0SSuyog Pawar     NAL_TRAIL_N     = 0,
86*c83a76b0SSuyog Pawar     NAL_TRAIL_R,
87*c83a76b0SSuyog Pawar     NAL_TSA_N,
88*c83a76b0SSuyog Pawar     NAL_TSA_R,
89*c83a76b0SSuyog Pawar     NAL_STSA_N,
90*c83a76b0SSuyog Pawar     NAL_STSA_R,
91*c83a76b0SSuyog Pawar     NAL_RADL_N,
92*c83a76b0SSuyog Pawar     NAL_RADL_R,
93*c83a76b0SSuyog Pawar     NAL_RASL_N,
94*c83a76b0SSuyog Pawar     NAL_RASL_R,
95*c83a76b0SSuyog Pawar     NAL_RSV_VCL_N10 = 10,
96*c83a76b0SSuyog Pawar     NAL_RSV_VCL_N12 = 12,
97*c83a76b0SSuyog Pawar     NAL_RSV_VCL_N14 = 14,
98*c83a76b0SSuyog Pawar     NAL_RSV_VCL_R11 = 11,
99*c83a76b0SSuyog Pawar     NAL_RSV_VCL_R13 = 13,
100*c83a76b0SSuyog Pawar     NAL_RSV_VCL_R15 = 15,
101*c83a76b0SSuyog Pawar 
102*c83a76b0SSuyog Pawar     NAL_BLA_W_LP    = 16,
103*c83a76b0SSuyog Pawar     NAL_BLA_W_DLP,
104*c83a76b0SSuyog Pawar     NAL_BLA_N_LP,
105*c83a76b0SSuyog Pawar     NAL_IDR_W_LP,
106*c83a76b0SSuyog Pawar     NAL_IDR_N_LP,
107*c83a76b0SSuyog Pawar     NAL_CRA,
108*c83a76b0SSuyog Pawar     NAL_RSV_RAP_VCL22 = 22,
109*c83a76b0SSuyog Pawar     NAL_RSV_RAP_VCL23 = 23,
110*c83a76b0SSuyog Pawar     NAL_RSV_VCL24 = 24,
111*c83a76b0SSuyog Pawar     NAL_RSV_VCL31 = 31,
112*c83a76b0SSuyog Pawar     NAL_VPS       = 32,
113*c83a76b0SSuyog Pawar     NAL_SPS,
114*c83a76b0SSuyog Pawar     NAL_PPS,
115*c83a76b0SSuyog Pawar     NAL_AUD,
116*c83a76b0SSuyog Pawar     NAL_EOS,
117*c83a76b0SSuyog Pawar     NAL_EOB,
118*c83a76b0SSuyog Pawar     NAL_FD,
119*c83a76b0SSuyog Pawar     NAL_PREFIX_SEI = 39,
120*c83a76b0SSuyog Pawar     NAL_SUFFIX_SEI = 40,
121*c83a76b0SSuyog Pawar     NAL_RSV_NVCL41 = 41,
122*c83a76b0SSuyog Pawar     NAL_RSV_NVCL47 = 47 ,
123*c83a76b0SSuyog Pawar     NAL_UNSPEC48   = 48 ,
124*c83a76b0SSuyog Pawar     NAL_UNSPEC63   = 49,
125*c83a76b0SSuyog Pawar };
126*c83a76b0SSuyog Pawar 
127*c83a76b0SSuyog Pawar enum
128*c83a76b0SSuyog Pawar {
129*c83a76b0SSuyog Pawar     CHROMA_FMT_IDC_MONOCHROME   = 0,
130*c83a76b0SSuyog Pawar     CHROMA_FMT_IDC_YUV420       = 1,
131*c83a76b0SSuyog Pawar     CHROMA_FMT_IDC_YUV422       = 2,
132*c83a76b0SSuyog Pawar     CHROMA_FMT_IDC_YUV444       = 3,
133*c83a76b0SSuyog Pawar     CHROMA_FMT_IDC_YUV444_PLANES = 4,
134*c83a76b0SSuyog Pawar };
135*c83a76b0SSuyog Pawar 
136*c83a76b0SSuyog Pawar typedef enum
137*c83a76b0SSuyog Pawar {
138*c83a76b0SSuyog Pawar     NULL_PLANE = -1,
139*c83a76b0SSuyog Pawar     U_PLANE = 0,
140*c83a76b0SSuyog Pawar     V_PLANE = 1
141*c83a76b0SSuyog Pawar } CHROMA_PLANE_ID_T;
142*c83a76b0SSuyog Pawar 
143*c83a76b0SSuyog Pawar /* Pred Modes */
144*c83a76b0SSuyog Pawar /* Do not change enum values */
145*c83a76b0SSuyog Pawar enum
146*c83a76b0SSuyog Pawar {
147*c83a76b0SSuyog Pawar     PRED_MODE_INTER = 0,
148*c83a76b0SSuyog Pawar     PRED_MODE_INTRA = 1,
149*c83a76b0SSuyog Pawar     PRED_MODE_SKIP  = 2
150*c83a76b0SSuyog Pawar };
151*c83a76b0SSuyog Pawar 
152*c83a76b0SSuyog Pawar /* Partition Modes */
153*c83a76b0SSuyog Pawar /* Do not change enum values */
154*c83a76b0SSuyog Pawar enum
155*c83a76b0SSuyog Pawar {
156*c83a76b0SSuyog Pawar     PART_2Nx2N  = 0,
157*c83a76b0SSuyog Pawar     PART_2NxN   = 1,
158*c83a76b0SSuyog Pawar     PART_Nx2N   = 2,
159*c83a76b0SSuyog Pawar     PART_NxN    = 3,
160*c83a76b0SSuyog Pawar     PART_2NxnU  = 4,
161*c83a76b0SSuyog Pawar     PART_2NxnD  = 5,
162*c83a76b0SSuyog Pawar     PART_nLx2N  = 6,
163*c83a76b0SSuyog Pawar     PART_nRx2N  = 7
164*c83a76b0SSuyog Pawar };
165*c83a76b0SSuyog Pawar 
166*c83a76b0SSuyog Pawar /* Prediction list */
167*c83a76b0SSuyog Pawar /* Do not change enum values */
168*c83a76b0SSuyog Pawar enum
169*c83a76b0SSuyog Pawar {
170*c83a76b0SSuyog Pawar     PRED_L0 = 0,
171*c83a76b0SSuyog Pawar     PRED_L1 = 1,
172*c83a76b0SSuyog Pawar     PRED_BI = 2
173*c83a76b0SSuyog Pawar };
174*c83a76b0SSuyog Pawar 
175*c83a76b0SSuyog Pawar /**
176*c83a76b0SSuyog Pawar  * Scan types
177*c83a76b0SSuyog Pawar  */
178*c83a76b0SSuyog Pawar enum
179*c83a76b0SSuyog Pawar {
180*c83a76b0SSuyog Pawar     SCAN_DIAG_UPRIGHT,
181*c83a76b0SSuyog Pawar     SCAN_HORZ,
182*c83a76b0SSuyog Pawar     SCAN_VERT
183*c83a76b0SSuyog Pawar };
184*c83a76b0SSuyog Pawar 
185*c83a76b0SSuyog Pawar /**
186*c83a76b0SSuyog Pawar  * VUI aspect ratio indicator
187*c83a76b0SSuyog Pawar  */
188*c83a76b0SSuyog Pawar enum
189*c83a76b0SSuyog Pawar {
190*c83a76b0SSuyog Pawar     SAR_UNUSED = 0,
191*c83a76b0SSuyog Pawar     SAR_1_1 = 1,
192*c83a76b0SSuyog Pawar     SAR_12_11,
193*c83a76b0SSuyog Pawar     SAR_10_11,
194*c83a76b0SSuyog Pawar     SAR_16_11,
195*c83a76b0SSuyog Pawar     SAR_40_33,
196*c83a76b0SSuyog Pawar     SAR_24_11,
197*c83a76b0SSuyog Pawar     SAR_20_11,
198*c83a76b0SSuyog Pawar     SAR_32_11,
199*c83a76b0SSuyog Pawar     SAR_80_33,
200*c83a76b0SSuyog Pawar     SAR_18_11,
201*c83a76b0SSuyog Pawar     SAR_15_11,
202*c83a76b0SSuyog Pawar     SAR_64_33,
203*c83a76b0SSuyog Pawar     SAR_160_99,
204*c83a76b0SSuyog Pawar     SAR_4_3,
205*c83a76b0SSuyog Pawar     SAR_3_2,
206*c83a76b0SSuyog Pawar     SAR_2_1,
207*c83a76b0SSuyog Pawar     EXTENDED_SAR = 255
208*c83a76b0SSuyog Pawar };
209*c83a76b0SSuyog Pawar 
210*c83a76b0SSuyog Pawar enum
211*c83a76b0SSuyog Pawar {
212*c83a76b0SSuyog Pawar     VID_FMT_COMPONENT = 0,
213*c83a76b0SSuyog Pawar     VID_FMT_PAL,
214*c83a76b0SSuyog Pawar     VID_FMT_NTSC,
215*c83a76b0SSuyog Pawar     VID_FMT_SECAM,
216*c83a76b0SSuyog Pawar     VID_FMT_MAC,
217*c83a76b0SSuyog Pawar     VID_FMT_UNSPECIFIED
218*c83a76b0SSuyog Pawar };
219*c83a76b0SSuyog Pawar 
220*c83a76b0SSuyog Pawar typedef enum {
221*c83a76b0SSuyog Pawar     USER_DATA_BAR_DATA       = 0,
222*c83a76b0SSuyog Pawar     USER_DATA_CC_DATA        = 1,
223*c83a76b0SSuyog Pawar     USER_DATA_AFD_DATA       = 2,
224*c83a76b0SSuyog Pawar 
225*c83a76b0SSuyog Pawar     // do not add anything below
226*c83a76b0SSuyog Pawar     USER_DATA_MAX
227*c83a76b0SSuyog Pawar } USER_DATA_SEI_TYPE_T;
228*c83a76b0SSuyog Pawar 
229*c83a76b0SSuyog Pawar /**
230*c83a76b0SSuyog Pawar  ****************************************************************************
231*c83a76b0SSuyog Pawar  * SEI payload type
232*c83a76b0SSuyog Pawar  ****************************************************************************
233*c83a76b0SSuyog Pawar  */
234*c83a76b0SSuyog Pawar enum
235*c83a76b0SSuyog Pawar {
236*c83a76b0SSuyog Pawar     SEI_BUFFERING_PERIOD                     = 0,
237*c83a76b0SSuyog Pawar     SEI_PICTURE_TIMING                       = 1,
238*c83a76b0SSuyog Pawar     SEI_PAN_SCAN_RECT                        = 2,
239*c83a76b0SSuyog Pawar     SEI_FILLER_PAYLOAD                       = 3,
240*c83a76b0SSuyog Pawar     SEI_USER_DATA_REGISTERED_ITU_T_T35       = 4,
241*c83a76b0SSuyog Pawar     SEI_USER_DATA_UNREGISTERED               = 5,
242*c83a76b0SSuyog Pawar     SEI_RECOVERY_POINT                       = 6,
243*c83a76b0SSuyog Pawar     SEI_SCENE_INFO                           = 9,
244*c83a76b0SSuyog Pawar     SEI_FULL_FRAME_SNAPSHOT                  = 15,
245*c83a76b0SSuyog Pawar     SEI_PROGRESSIVE_REFINEMENT_SEGMENT_START = 16,
246*c83a76b0SSuyog Pawar     SEI_PROGRESSIVE_REFINEMENT_SEGMENT_END   = 17,
247*c83a76b0SSuyog Pawar     SEI_FILM_GRAIN_CHARACTERISTICS           = 19,
248*c83a76b0SSuyog Pawar     SEI_POST_FILTER_HINT                     = 22,
249*c83a76b0SSuyog Pawar     SEI_TONE_MAPPING_INFO                    = 23,
250*c83a76b0SSuyog Pawar     SEI_FRAME_PACKING                        = 45,
251*c83a76b0SSuyog Pawar     SEI_DISPLAY_ORIENTATION                  = 47,
252*c83a76b0SSuyog Pawar     SEI_SOP_DESCRIPTION                      = 128,
253*c83a76b0SSuyog Pawar     SEI_ACTIVE_PARAMETER_SETS                = 129,
254*c83a76b0SSuyog Pawar     SEI_DECODING_UNIT_INFO                   = 130,
255*c83a76b0SSuyog Pawar     SEI_TEMPORAL_LEVEL0_INDEX                = 131,
256*c83a76b0SSuyog Pawar     SEI_DECODED_PICTURE_HASH                 = 132,
257*c83a76b0SSuyog Pawar     SEI_SCALABLE_NESTING                     = 133,
258*c83a76b0SSuyog Pawar     SEI_REGION_REFRESH_INFO                  = 134,
259*c83a76b0SSuyog Pawar     SEI_NO_DISPLAY                           = 135,
260*c83a76b0SSuyog Pawar     SEI_TIME_CODE                            = 136,
261*c83a76b0SSuyog Pawar     SEI_MASTERING_DISPLAY_COLOUR_VOLUME      = 137,
262*c83a76b0SSuyog Pawar     SEI_SEGM_RECT_FRAME_PACKING              = 138,
263*c83a76b0SSuyog Pawar     SEI_TEMP_MOTION_CONSTRAINED_TILE_SETS    = 139,
264*c83a76b0SSuyog Pawar     SEI_CHROMA_SAMPLING_FILTER_HINT          = 140,
265*c83a76b0SSuyog Pawar     SEI_KNEE_FUNCTION_INFO                   = 141
266*c83a76b0SSuyog Pawar };
267*c83a76b0SSuyog Pawar 
268*c83a76b0SSuyog Pawar 
269*c83a76b0SSuyog Pawar #define BIT_DEPTH           8
270*c83a76b0SSuyog Pawar #define BIT_DEPTH_LUMA      BIT_DEPTH
271*c83a76b0SSuyog Pawar #define BIT_DEPTH_CHROMA    BIT_DEPTH
272*c83a76b0SSuyog Pawar /*****************************************************************************/
273*c83a76b0SSuyog Pawar /* Profile tier level defs                                                   */
274*c83a76b0SSuyog Pawar /*****************************************************************************/
275*c83a76b0SSuyog Pawar #define MAX_PROFILE_COMPATBLTY 32
276*c83a76b0SSuyog Pawar 
277*c83a76b0SSuyog Pawar /*****************************************************************************/
278*c83a76b0SSuyog Pawar /* Reference frame defs                                                      */
279*c83a76b0SSuyog Pawar /*****************************************************************************/
280*c83a76b0SSuyog Pawar /* Maximum DPB size */
281*c83a76b0SSuyog Pawar #define MAX_DPB_SIZE 16
282*c83a76b0SSuyog Pawar 
283*c83a76b0SSuyog Pawar 
284*c83a76b0SSuyog Pawar /*****************************************************************************/
285*c83a76b0SSuyog Pawar /* VPS restrictions                                                          */
286*c83a76b0SSuyog Pawar /*****************************************************************************/
287*c83a76b0SSuyog Pawar 
288*c83a76b0SSuyog Pawar /* Number of VPS allowed  in Main Profile */
289*c83a76b0SSuyog Pawar #define MAX_VPS_CNT         16
290*c83a76b0SSuyog Pawar 
291*c83a76b0SSuyog Pawar /* Max sub layers in VPS */
292*c83a76b0SSuyog Pawar #define VPS_MAX_SUB_LAYERS  7
293*c83a76b0SSuyog Pawar 
294*c83a76b0SSuyog Pawar /* Max number of HRD parameters */
295*c83a76b0SSuyog Pawar #define VPS_MAX_HRD_PARAMS  2
296*c83a76b0SSuyog Pawar 
297*c83a76b0SSuyog Pawar /* Maximum number of operation point layers */
298*c83a76b0SSuyog Pawar #define VPS_MAX_OP_LAYERS 2
299*c83a76b0SSuyog Pawar 
300*c83a76b0SSuyog Pawar 
301*c83a76b0SSuyog Pawar /*****************************************************************************/
302*c83a76b0SSuyog Pawar /* Tile restrictions                                                         */
303*c83a76b0SSuyog Pawar /*****************************************************************************/
304*c83a76b0SSuyog Pawar /* Minimum tile width in Main Profile */
305*c83a76b0SSuyog Pawar #define MIN_TILE_WD  MAX_CTB_SIZE
306*c83a76b0SSuyog Pawar 
307*c83a76b0SSuyog Pawar /* Minimum tile height in Main Profile */
308*c83a76b0SSuyog Pawar #define MIN_TILE_HT  MAX_CTB_SIZE
309*c83a76b0SSuyog Pawar 
310*c83a76b0SSuyog Pawar /*****************************************************************************/
311*c83a76b0SSuyog Pawar /* SPS restrictions                                                          */
312*c83a76b0SSuyog Pawar /*****************************************************************************/
313*c83a76b0SSuyog Pawar 
314*c83a76b0SSuyog Pawar /* Number of SPS allowed in Main Profile*/
315*c83a76b0SSuyog Pawar /* An extra buffer is allocated to write the parsed data
316*c83a76b0SSuyog Pawar  * It is copied to the appropriate location later */
317*c83a76b0SSuyog Pawar #define MAX_SPS_CNT         (16 + 1)
318*c83a76b0SSuyog Pawar 
319*c83a76b0SSuyog Pawar /* Max sub layers in PPS */
320*c83a76b0SSuyog Pawar #define SPS_MAX_SUB_LAYERS  7
321*c83a76b0SSuyog Pawar 
322*c83a76b0SSuyog Pawar /* Maximum long term reference pics */
323*c83a76b0SSuyog Pawar #define MAX_LTREF_PICS_SPS 32
324*c83a76b0SSuyog Pawar 
325*c83a76b0SSuyog Pawar #define MAX_STREF_PICS_SPS 64
326*c83a76b0SSuyog Pawar 
327*c83a76b0SSuyog Pawar /*****************************************************************************/
328*c83a76b0SSuyog Pawar /* PPS restrictions                                                          */
329*c83a76b0SSuyog Pawar /*****************************************************************************/
330*c83a76b0SSuyog Pawar 
331*c83a76b0SSuyog Pawar /* Number of PPS allowed in Main Profile */
332*c83a76b0SSuyog Pawar /* An extra buffer is allocated to write the parsed data
333*c83a76b0SSuyog Pawar  * It is copied to the appropriate location later */
334*c83a76b0SSuyog Pawar #define MAX_PPS_CNT         (64 + 1)
335*c83a76b0SSuyog Pawar 
336*c83a76b0SSuyog Pawar /*****************************************************************************/
337*c83a76b0SSuyog Pawar /* Macro definitions for sizes of CTB, PU, TU, CU                            */
338*c83a76b0SSuyog Pawar /*****************************************************************************/
339*c83a76b0SSuyog Pawar 
340*c83a76b0SSuyog Pawar /* CTB Size Range */
341*c83a76b0SSuyog Pawar #define MAX_CTB_SIZE        64
342*c83a76b0SSuyog Pawar #define MIN_CTB_SIZE        16
343*c83a76b0SSuyog Pawar #define LOG2_MAX_CTB_SIZE   6
344*c83a76b0SSuyog Pawar #define LOG2_MIN_CTB_SIZE   4
345*c83a76b0SSuyog Pawar 
346*c83a76b0SSuyog Pawar /* TU Size Range */
347*c83a76b0SSuyog Pawar #define MAX_TU_SIZE         32
348*c83a76b0SSuyog Pawar #define MIN_TU_SIZE         4
349*c83a76b0SSuyog Pawar #define LOG2_MAX_TU_SIZE    5
350*c83a76b0SSuyog Pawar #define LOG2_MIN_TU_SIZE    2
351*c83a76b0SSuyog Pawar 
352*c83a76b0SSuyog Pawar /* Max Transform Size */
353*c83a76b0SSuyog Pawar #define MAX_TRANS_SIZE      (MAX_TU_SIZE*MAX_TU_SIZE)
354*c83a76b0SSuyog Pawar 
355*c83a76b0SSuyog Pawar /* PU Size Range */
356*c83a76b0SSuyog Pawar #define MAX_PU_SIZE         64
357*c83a76b0SSuyog Pawar #define MIN_PU_SIZE         4
358*c83a76b0SSuyog Pawar #define LOG2_MAX_PU_SIZE    6
359*c83a76b0SSuyog Pawar #define LOG2_MIN_PU_SIZE    2
360*c83a76b0SSuyog Pawar 
361*c83a76b0SSuyog Pawar /* CU Size Range */
362*c83a76b0SSuyog Pawar #define MAX_CU_SIZE         64
363*c83a76b0SSuyog Pawar #define MIN_CU_SIZE         8
364*c83a76b0SSuyog Pawar #define LOG2_MAX_CU_SIZE    6
365*c83a76b0SSuyog Pawar #define LOG2_MIN_CU_SIZE    3
366*c83a76b0SSuyog Pawar 
367*c83a76b0SSuyog Pawar /* Number of max TU in a CTB row */
368*c83a76b0SSuyog Pawar #define MAX_TU_IN_CTB_ROW   ((MAX_CTB_SIZE / MIN_TU_SIZE))
369*c83a76b0SSuyog Pawar 
370*c83a76b0SSuyog Pawar /* Number of max TU in a CTB row */
371*c83a76b0SSuyog Pawar #define MAX_CU_IN_CTB_ROW   ((MAX_CTB_SIZE / MIN_CU_SIZE))
372*c83a76b0SSuyog Pawar 
373*c83a76b0SSuyog Pawar /* Number of max PU in a CTb row */
374*c83a76b0SSuyog Pawar #define MAX_PU_IN_CTB_ROW   ((MAX_CTB_SIZE / MIN_PU_SIZE))
375*c83a76b0SSuyog Pawar 
376*c83a76b0SSuyog Pawar /* Number of max CU in a CTB */
377*c83a76b0SSuyog Pawar #define MAX_CU_IN_CTB       ((MAX_CTB_SIZE / MIN_CU_SIZE) * \
378*c83a76b0SSuyog Pawar                              (MAX_CTB_SIZE / MIN_CU_SIZE))
379*c83a76b0SSuyog Pawar 
380*c83a76b0SSuyog Pawar /* Number of max PU in a CTB */
381*c83a76b0SSuyog Pawar /*****************************************************************************/
382*c83a76b0SSuyog Pawar /* Note though for 64 x 64 CTB, Max PU in CTB is 128, in order to store      */
383*c83a76b0SSuyog Pawar /*  intra pred info, 256 entries are needed                                  */
384*c83a76b0SSuyog Pawar /*****************************************************************************/
385*c83a76b0SSuyog Pawar #define MAX_PU_IN_CTB       ((MAX_CTB_SIZE / MIN_PU_SIZE) * \
386*c83a76b0SSuyog Pawar                              (MAX_CTB_SIZE / MIN_PU_SIZE))
387*c83a76b0SSuyog Pawar 
388*c83a76b0SSuyog Pawar /* Number of max TU in a CTB */
389*c83a76b0SSuyog Pawar #define MAX_TU_IN_CTB       ((MAX_CTB_SIZE / MIN_TU_SIZE) * \
390*c83a76b0SSuyog Pawar                              (MAX_CTB_SIZE / MIN_TU_SIZE))
391*c83a76b0SSuyog Pawar 
392*c83a76b0SSuyog Pawar 
393*c83a76b0SSuyog Pawar 
394*c83a76b0SSuyog Pawar /**
395*c83a76b0SSuyog Pawar  * Maximum transform depths
396*c83a76b0SSuyog Pawar  */
397*c83a76b0SSuyog Pawar #define MAX_TRAFO_DEPTH 5
398*c83a76b0SSuyog Pawar 
399*c83a76b0SSuyog Pawar 
400*c83a76b0SSuyog Pawar 
401*c83a76b0SSuyog Pawar 
402*c83a76b0SSuyog Pawar /* Max number of deblocking edges */
403*c83a76b0SSuyog Pawar #define MAX_VERT_DEBLK_EDGES ((MAX_CTB_SIZE/8) * (MAX_CTB_SIZE/4))
404*c83a76b0SSuyog Pawar #define MAX_HORZ_DEBLK_EDGES ((MAX_CTB_SIZE/4) * (MAX_CTB_SIZE/8))
405*c83a76b0SSuyog Pawar 
406*c83a76b0SSuyog Pawar /* Qp can not change below 8x8 level */
407*c83a76b0SSuyog Pawar #define MAX_DEBLK_QP_CNT     ((MAX_CTB_SIZE/8) * (MAX_CTB_SIZE/8))
408*c83a76b0SSuyog Pawar 
409*c83a76b0SSuyog Pawar /*****************************************************************************/
410*c83a76b0SSuyog Pawar /* Parsing related macros                                                    */
411*c83a76b0SSuyog Pawar /*****************************************************************************/
412*c83a76b0SSuyog Pawar #define SUBBLK_COEFF_CNT    16
413*c83a76b0SSuyog Pawar 
414*c83a76b0SSuyog Pawar /* Quant and Trans defs */
415*c83a76b0SSuyog Pawar 
416*c83a76b0SSuyog Pawar /*****************************************************************************/
417*c83a76b0SSuyog Pawar /* Sizes for Transform functions                                             */
418*c83a76b0SSuyog Pawar /*****************************************************************************/
419*c83a76b0SSuyog Pawar #define TRANS_SIZE_4   4
420*c83a76b0SSuyog Pawar #define TRANS_SIZE_8   8
421*c83a76b0SSuyog Pawar #define TRANS_SIZE_16 16
422*c83a76b0SSuyog Pawar #define TRANS_SIZE_32 32
423*c83a76b0SSuyog Pawar 
424*c83a76b0SSuyog Pawar 
425*c83a76b0SSuyog Pawar #define IT_SHIFT_STAGE_1 7
426*c83a76b0SSuyog Pawar #define IT_SHIFT_STAGE_2 12
427*c83a76b0SSuyog Pawar 
428*c83a76b0SSuyog Pawar /**
429*c83a76b0SSuyog Pawar  * @brief  Maximum transform dynamic range (excluding sign bit)
430*c83a76b0SSuyog Pawar  */
431*c83a76b0SSuyog Pawar #define MAX_TR_DYNAMIC_RANGE  15
432*c83a76b0SSuyog Pawar 
433*c83a76b0SSuyog Pawar /**
434*c83a76b0SSuyog Pawar  * @brief  Q(QP%6) * IQ(QP%6) = 2^20
435*c83a76b0SSuyog Pawar  */
436*c83a76b0SSuyog Pawar #define QUANT_IQUANT_SHIFT    20
437*c83a76b0SSuyog Pawar 
438*c83a76b0SSuyog Pawar /**
439*c83a76b0SSuyog Pawar  * @brief Q factor for Qp%6 multiplication
440*c83a76b0SSuyog Pawar  */
441*c83a76b0SSuyog Pawar #define QUANT_SHIFT           14
442*c83a76b0SSuyog Pawar 
443*c83a76b0SSuyog Pawar /**
444*c83a76b0SSuyog Pawar  * @brief Q shift factor for flat rescale matrix weights
445*c83a76b0SSuyog Pawar  */
446*c83a76b0SSuyog Pawar #define FLAT_RESCALE_MAT_Q_SHIFT    11
447*c83a76b0SSuyog Pawar 
448*c83a76b0SSuyog Pawar /**
449*c83a76b0SSuyog Pawar  * @brief  Scaling matrix is represented in Q15 format
450*c83a76b0SSuyog Pawar  */
451*c83a76b0SSuyog Pawar #define SCALING_Q_SHIFT       15
452*c83a76b0SSuyog Pawar 
453*c83a76b0SSuyog Pawar /**
454*c83a76b0SSuyog Pawar  * @brief  rounding factor for quantization represented in Q9 format
455*c83a76b0SSuyog Pawar  */
456*c83a76b0SSuyog Pawar #define QUANT_ROUND_FACTOR_Q   9
457*c83a76b0SSuyog Pawar 
458*c83a76b0SSuyog Pawar /**
459*c83a76b0SSuyog Pawar  * @brief  Minimum qp supported in HEVC spec
460*c83a76b0SSuyog Pawar  */
461*c83a76b0SSuyog Pawar #define MIN_HEVC_QP 0
462*c83a76b0SSuyog Pawar 
463*c83a76b0SSuyog Pawar /**
464*c83a76b0SSuyog Pawar  * @brief  Maximum qp supported in HEVC spec
465*c83a76b0SSuyog Pawar  */
466*c83a76b0SSuyog Pawar #define MAX_HEVC_QP 51  //FOR MAIN Branch Encoder
467*c83a76b0SSuyog Pawar 
468*c83a76b0SSuyog Pawar #define MAX_HEVC_QP_10bit 63  //FOR HBD Branch Encoder
469*c83a76b0SSuyog Pawar 
470*c83a76b0SSuyog Pawar #define MAX_HEVC_QP_12bit 75  //FOR HBD Branch Encoder
471*c83a76b0SSuyog Pawar 
472*c83a76b0SSuyog Pawar 
473*c83a76b0SSuyog Pawar /**
474*c83a76b0SSuyog Pawar  * @brief  Total number of transform sizes
475*c83a76b0SSuyog Pawar  * used for sizeID while getting scale matrix
476*c83a76b0SSuyog Pawar  */
477*c83a76b0SSuyog Pawar #define NUM_UNIQUE_TRANS_SIZE 4
478*c83a76b0SSuyog Pawar 
479*c83a76b0SSuyog Pawar /*****************************************************************************/
480*c83a76b0SSuyog Pawar /* Number of scaling matrices for each transform size                        */
481*c83a76b0SSuyog Pawar /*****************************************************************************/
482*c83a76b0SSuyog Pawar #define SCALE_MAT_CNT_TRANS_SIZE_4    6
483*c83a76b0SSuyog Pawar #define SCALE_MAT_CNT_TRANS_SIZE_8    6
484*c83a76b0SSuyog Pawar #define SCALE_MAT_CNT_TRANS_SIZE_16   6
485*c83a76b0SSuyog Pawar #define SCALE_MAT_CNT_TRANS_SIZE_32   2
486*c83a76b0SSuyog Pawar 
487*c83a76b0SSuyog Pawar /* Maximum number of scale matrices for a given transform size */
488*c83a76b0SSuyog Pawar #define SCALE_MAT_CNT_MAX_PER_TRANS_SIZE 6
489*c83a76b0SSuyog Pawar 
490*c83a76b0SSuyog Pawar /* Total number of scale matrices */
491*c83a76b0SSuyog Pawar #define TOTAL_SCALE_MAT_COUNT   (SCALE_MAT_CNT_TRANS_SIZE_4     + \
492*c83a76b0SSuyog Pawar                                  SCALE_MAT_CNT_TRANS_SIZE_8     + \
493*c83a76b0SSuyog Pawar                                  SCALE_MAT_CNT_TRANS_SIZE_16    + \
494*c83a76b0SSuyog Pawar                                  SCALE_MAT_CNT_TRANS_SIZE_32)
495*c83a76b0SSuyog Pawar 
496*c83a76b0SSuyog Pawar 
497*c83a76b0SSuyog Pawar /*****************************************************************************/
498*c83a76b0SSuyog Pawar /* Intra pred Macros                                                         */
499*c83a76b0SSuyog Pawar /*****************************************************************************/
500*c83a76b0SSuyog Pawar /** Planar Intra prediction mode */
501*c83a76b0SSuyog Pawar #define INTRA_PLANAR             0
502*c83a76b0SSuyog Pawar 
503*c83a76b0SSuyog Pawar /** DC Intra prediction mode */
504*c83a76b0SSuyog Pawar #define INTRA_DC                 1
505*c83a76b0SSuyog Pawar 
506*c83a76b0SSuyog Pawar /** Gives angular mode for intra prediction */
507*c83a76b0SSuyog Pawar #define INTRA_ANGULAR(x) (x)
508*c83a76b0SSuyog Pawar 
509*c83a76b0SSuyog Pawar /** Following is used to signal no intra prediction in case of pcm blocks
510*c83a76b0SSuyog Pawar  */
511*c83a76b0SSuyog Pawar #define INTRA_PRED_NONE  63
512*c83a76b0SSuyog Pawar 
513*c83a76b0SSuyog Pawar 
514*c83a76b0SSuyog Pawar /** Following is used to signal no intra prediction is needed for first three
515*c83a76b0SSuyog Pawar  * 4x4 luma blocks in case of 4x4 TU sizes
516*c83a76b0SSuyog Pawar  * Also used in pcm cases
517*c83a76b0SSuyog Pawar  */
518*c83a76b0SSuyog Pawar #define INTRA_PRED_CHROMA_IDX_NONE  7
519*c83a76b0SSuyog Pawar 
520*c83a76b0SSuyog Pawar #define MAX_NUM_CLOCK_TS    3
521*c83a76b0SSuyog Pawar #define MAX_USERDATA_PAYLOAD 256
522*c83a76b0SSuyog Pawar 
523*c83a76b0SSuyog Pawar #define MAX_CPB_CNT 32
524*c83a76b0SSuyog Pawar 
525*c83a76b0SSuyog Pawar #endif /*__IHEVC_DEFS_H_*/
526