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