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