1*437bfbebSnyanmisaka /* 2*437bfbebSnyanmisaka * 3*437bfbebSnyanmisaka * Copyright 2015 Rockchip Electronics Co. LTD 4*437bfbebSnyanmisaka * 5*437bfbebSnyanmisaka * Licensed under the Apache License, Version 2.0 (the "License"); 6*437bfbebSnyanmisaka * you may not use this file except in compliance with the License. 7*437bfbebSnyanmisaka * You may obtain a copy of the License at 8*437bfbebSnyanmisaka * 9*437bfbebSnyanmisaka * http://www.apache.org/licenses/LICENSE-2.0 10*437bfbebSnyanmisaka * 11*437bfbebSnyanmisaka * Unless required by applicable law or agreed to in writing, software 12*437bfbebSnyanmisaka * distributed under the License is distributed on an "AS IS" BASIS, 13*437bfbebSnyanmisaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*437bfbebSnyanmisaka * See the License for the specific language governing permissions and 15*437bfbebSnyanmisaka * limitations under the License. 16*437bfbebSnyanmisaka */ 17*437bfbebSnyanmisaka 18*437bfbebSnyanmisaka 19*437bfbebSnyanmisaka #ifndef __H265_SYNTAX_H__ 20*437bfbebSnyanmisaka #define __H265_SYNTAX_H__ 21*437bfbebSnyanmisaka 22*437bfbebSnyanmisaka #define PIXW_1080P (1920) 23*437bfbebSnyanmisaka #define PIXH_1080P (1088) 24*437bfbebSnyanmisaka #define PIXW_4Kx2K (4096) 25*437bfbebSnyanmisaka #define PIXH_4Kx2K (2304) 26*437bfbebSnyanmisaka #define PIXW_8Kx4K (8192) 27*437bfbebSnyanmisaka #define PIXH_8Kx4K (4320) 28*437bfbebSnyanmisaka 29*437bfbebSnyanmisaka #if 0 30*437bfbebSnyanmisaka 31*437bfbebSnyanmisaka #define REF_PIC_LIST_NUM_IDX 32 32*437bfbebSnyanmisaka #define H265E_UUID_LENGTH 16 33*437bfbebSnyanmisaka 34*437bfbebSnyanmisaka #define MAX_CPB_CNT 32 ///< Upper bound of (cpb_cnt_minus1 + 1) 35*437bfbebSnyanmisaka #define MAX_NUM_LAYER_IDS 64 36*437bfbebSnyanmisaka #define MAX_NUM_VPS 16 37*437bfbebSnyanmisaka #define MAX_NUM_SPS 16 38*437bfbebSnyanmisaka #define MAX_NUM_PPS 64 39*437bfbebSnyanmisaka #define MAX_TLAYER 7 ///< max number of temporal layer 40*437bfbebSnyanmisaka #define MAX_VPS_NUM_HRD_PARAMETERS 1 41*437bfbebSnyanmisaka #define MAX_VPS_OP_SETS_PLUS1 1024 42*437bfbebSnyanmisaka #define MAX_VPS_NUH_RESERVED_ZERO_LAYER_ID_PLUS1 1 43*437bfbebSnyanmisaka #define MAX_NUM_REF_PICS 16 ///< max. number of pictures used for reference 44*437bfbebSnyanmisaka #define MAX_NUM_REF 16 ///< max. number of entries in picture reference list 45*437bfbebSnyanmisaka #define MAX_CU_DEPTH 6 // log2(LCUSize) 46*437bfbebSnyanmisaka 47*437bfbebSnyanmisaka #define REF_PIC_LIST_0 0 48*437bfbebSnyanmisaka #define REF_PIC_LIST_1 1 49*437bfbebSnyanmisaka #define REF_PIC_LIST_X 100 50*437bfbebSnyanmisaka #define REF_BY_RECN(idx) (0x00000001 << idx) 51*437bfbebSnyanmisaka #define REF_BY_REFR(idx) (0x00000001 << idx) 52*437bfbebSnyanmisaka #define MAX_NUM_REF_PICS 16 53*437bfbebSnyanmisaka 54*437bfbebSnyanmisaka #endif 55*437bfbebSnyanmisaka 56*437bfbebSnyanmisaka #define MAX_DPB_SIZE 17 // A.4.1 57*437bfbebSnyanmisaka #define MAX_REFS 16 58*437bfbebSnyanmisaka 59*437bfbebSnyanmisaka /** 60*437bfbebSnyanmisaka * 7.4.2.1 61*437bfbebSnyanmisaka */ 62*437bfbebSnyanmisaka #define MAX_SUB_LAYERS 7 63*437bfbebSnyanmisaka #define MAX_VPS_COUNT 16 64*437bfbebSnyanmisaka #define MAX_SPS_COUNT 16 65*437bfbebSnyanmisaka #define MAX_PPS_COUNT 64 66*437bfbebSnyanmisaka #define MAX_SHORT_TERM_RPS_COUNT 64 67*437bfbebSnyanmisaka #define MAX_CU_SIZE 128 68*437bfbebSnyanmisaka 69*437bfbebSnyanmisaka //TODO: check if this is really the maximum 70*437bfbebSnyanmisaka #define MAX_TRANSFORM_DEPTH 5 71*437bfbebSnyanmisaka 72*437bfbebSnyanmisaka #define MAX_TB_SIZE 32 73*437bfbebSnyanmisaka #define MAX_PB_SIZE 64 74*437bfbebSnyanmisaka #define MAX_LOG2_CTB_SIZE 6 75*437bfbebSnyanmisaka #define MAX_QP 51 76*437bfbebSnyanmisaka #define DEFAULT_INTRA_TC_OFFSET 2 77*437bfbebSnyanmisaka 78*437bfbebSnyanmisaka #define HEVC_CONTEXTS 183 79*437bfbebSnyanmisaka 80*437bfbebSnyanmisaka #define MRG_MAX_NUM_CANDS 5 81*437bfbebSnyanmisaka 82*437bfbebSnyanmisaka #define L0 0 83*437bfbebSnyanmisaka #define L1 1 84*437bfbebSnyanmisaka 85*437bfbebSnyanmisaka #define REF_PIC_LIST_NUM_IDX 32 86*437bfbebSnyanmisaka #define MAX_CPB_CNT 32 //< Upper bound of (cpb_cnt_minus1 + 1) 87*437bfbebSnyanmisaka #define MAX_CU_DEPTH 6 // log2(LCUSize) 88*437bfbebSnyanmisaka #define MAX_VPS_NUM_HRD_PARAMETERS 1 89*437bfbebSnyanmisaka #define MAX_VPS_OP_SETS_PLUS1 1024 90*437bfbebSnyanmisaka #define MAX_VPS_NUH_RESERVED_ZERO_LAYER_ID_PLUS1 1 91*437bfbebSnyanmisaka #define MAX_NUM_LONG_TERM_REF_PIC_POC 20 92*437bfbebSnyanmisaka #define REF_BY_RECN(idx) (0x00000001 << idx) 93*437bfbebSnyanmisaka #define REF_BY_REFR(idx) (0x00000001 << idx) 94*437bfbebSnyanmisaka 95*437bfbebSnyanmisaka 96*437bfbebSnyanmisaka 97*437bfbebSnyanmisaka 98*437bfbebSnyanmisaka #define EPEL_EXTRA_BEFORE 1 99*437bfbebSnyanmisaka #define EPEL_EXTRA_AFTER 2 100*437bfbebSnyanmisaka #define EPEL_EXTRA 3 101*437bfbebSnyanmisaka #define QPEL_EXTRA_BEFORE 3 102*437bfbebSnyanmisaka #define QPEL_EXTRA_AFTER 4 103*437bfbebSnyanmisaka #define QPEL_EXTRA 7 104*437bfbebSnyanmisaka 105*437bfbebSnyanmisaka #define EDGE_EMU_BUFFER_STRIDE 80 106*437bfbebSnyanmisaka 107*437bfbebSnyanmisaka #define MPP_INPUT_BUFFER_PADDING_SIZE 8 108*437bfbebSnyanmisaka 109*437bfbebSnyanmisaka #define MPP_PROFILE_HEVC_MAIN 1 110*437bfbebSnyanmisaka #define MPP_PROFILE_HEVC_MAIN_10 2 111*437bfbebSnyanmisaka #define MPP_PROFILE_HEVC_MAIN_STILL_PICTURE 3 112*437bfbebSnyanmisaka #define MPP_PROFILE_HEVC_FORMAT_RANGE_EXTENDIONS 4 113*437bfbebSnyanmisaka 114*437bfbebSnyanmisaka #define LOG2_MAX_CTB_SIZE 6 115*437bfbebSnyanmisaka #define LOG2_MIN_CTB_SIZE 4 116*437bfbebSnyanmisaka #define LOG2_MAX_PU_SIZE 6 117*437bfbebSnyanmisaka #define LOG2_MIN_PU_SIZE 2 118*437bfbebSnyanmisaka #define LOG2_MAX_TU_SIZE 5 119*437bfbebSnyanmisaka #define LOG2_MIN_TU_SIZE 2 120*437bfbebSnyanmisaka #define LOG2_MAX_CU_SIZE 6 121*437bfbebSnyanmisaka #define LOG2_MIN_CU_SIZE 3 122*437bfbebSnyanmisaka 123*437bfbebSnyanmisaka /** 124*437bfbebSnyanmisaka * Value of the luma sample at position (x, y) in the 2D array tab. 125*437bfbebSnyanmisaka */ 126*437bfbebSnyanmisaka #define IS_IDR(s) (s->nal_unit_type == NAL_IDR_W_RADL || s->nal_unit_type == NAL_IDR_N_LP) 127*437bfbebSnyanmisaka #define IS_BLA(s) (s->nal_unit_type == NAL_BLA_W_RADL || s->nal_unit_type == NAL_BLA_W_LP || \ 128*437bfbebSnyanmisaka s->nal_unit_type == NAL_BLA_N_LP) 129*437bfbebSnyanmisaka #define IS_IRAP(s) (s->nal_unit_type >= 16 && s->nal_unit_type <= 23) 130*437bfbebSnyanmisaka #define IS_CRA(s) (s->nal_unit_type == NAL_CRA_NUT) 131*437bfbebSnyanmisaka 132*437bfbebSnyanmisaka /** 133*437bfbebSnyanmisaka * Table 7-3: NAL unit type codes 134*437bfbebSnyanmisaka */ 135*437bfbebSnyanmisaka enum NALUnitType { 136*437bfbebSnyanmisaka NAL_INIT_VALUE = -1, 137*437bfbebSnyanmisaka NAL_TRAIL_N = 0, 138*437bfbebSnyanmisaka NAL_TRAIL_R = 1, 139*437bfbebSnyanmisaka NAL_TSA_N = 2, 140*437bfbebSnyanmisaka NAL_TSA_R = 3, 141*437bfbebSnyanmisaka NAL_STSA_N = 4, 142*437bfbebSnyanmisaka NAL_STSA_R = 5, 143*437bfbebSnyanmisaka NAL_RADL_N = 6, 144*437bfbebSnyanmisaka NAL_RADL_R = 7, 145*437bfbebSnyanmisaka NAL_RASL_N = 8, 146*437bfbebSnyanmisaka NAL_RASL_R = 9, 147*437bfbebSnyanmisaka NAL_BLA_W_LP = 16, 148*437bfbebSnyanmisaka NAL_BLA_W_RADL = 17, 149*437bfbebSnyanmisaka NAL_BLA_N_LP = 18, 150*437bfbebSnyanmisaka NAL_IDR_W_RADL = 19, 151*437bfbebSnyanmisaka NAL_IDR_N_LP = 20, 152*437bfbebSnyanmisaka NAL_CRA_NUT = 21, 153*437bfbebSnyanmisaka NAL_VPS = 32, 154*437bfbebSnyanmisaka NAL_SPS = 33, 155*437bfbebSnyanmisaka NAL_PPS = 34, 156*437bfbebSnyanmisaka NAL_AUD = 35, 157*437bfbebSnyanmisaka NAL_EOS_NUT = 36, 158*437bfbebSnyanmisaka NAL_EOB_NUT = 37, 159*437bfbebSnyanmisaka NAL_FD_NUT = 38, 160*437bfbebSnyanmisaka NAL_SEI_PREFIX = 39, 161*437bfbebSnyanmisaka NAL_SEI_SUFFIX = 40, 162*437bfbebSnyanmisaka NAL_UNSPEC62 = 62, 163*437bfbebSnyanmisaka }; 164*437bfbebSnyanmisaka 165*437bfbebSnyanmisaka typedef enum H265NalPriority_t { 166*437bfbebSnyanmisaka H265_NAL_PRIORITY_DISPOSABLE = 0, 167*437bfbebSnyanmisaka H265_NAL_PRIORITY_LOW = 1, 168*437bfbebSnyanmisaka H265_NAL_PRIORITY_HIGH = 2, 169*437bfbebSnyanmisaka H265_NAL_PRIORITY_HIGHEST = 3, 170*437bfbebSnyanmisaka } H265NalPriority; 171*437bfbebSnyanmisaka 172*437bfbebSnyanmisaka typedef enum { 173*437bfbebSnyanmisaka H265_LEVEL_NONE = 0, 174*437bfbebSnyanmisaka H265_LEVEL1 = 30, 175*437bfbebSnyanmisaka H265_LEVEL2 = 60, 176*437bfbebSnyanmisaka H265_LEVEL2_1 = 63, 177*437bfbebSnyanmisaka H265_LEVEL3 = 90, 178*437bfbebSnyanmisaka H265_LEVEL3_1 = 93, 179*437bfbebSnyanmisaka H265_LEVEL4 = 120, 180*437bfbebSnyanmisaka H265_LEVEL4_1 = 123, 181*437bfbebSnyanmisaka H265_LEVEL5 = 150, 182*437bfbebSnyanmisaka H265_LEVEL5_1 = 153, 183*437bfbebSnyanmisaka H265_LEVEL5_2 = 156, 184*437bfbebSnyanmisaka H265_LEVEL6 = 180, 185*437bfbebSnyanmisaka H265_LEVEL6_1 = 183, 186*437bfbebSnyanmisaka H265_LEVEL6_2 = 186, 187*437bfbebSnyanmisaka H265_LEVEL8_5 = 255, 188*437bfbebSnyanmisaka } H265Level; 189*437bfbebSnyanmisaka 190*437bfbebSnyanmisaka typedef enum H265ChromaFmt_e { 191*437bfbebSnyanmisaka H265_CHROMA_400 = 0, //!< Monochrome 192*437bfbebSnyanmisaka H265_CHROMA_420 = 1, //!< 4:2:0 193*437bfbebSnyanmisaka H265_CHROMA_422 = 2, //!< 4:2:2 194*437bfbebSnyanmisaka H265_CHROMA_444 = 3 //!< 4:4:4 195*437bfbebSnyanmisaka } H265ChromaFmt; 196*437bfbebSnyanmisaka 197*437bfbebSnyanmisaka typedef enum SliceType_t { 198*437bfbebSnyanmisaka B_SLICE = 0, 199*437bfbebSnyanmisaka P_SLICE = 1, 200*437bfbebSnyanmisaka I_SLICE = 2, 201*437bfbebSnyanmisaka } SliceType; 202*437bfbebSnyanmisaka 203*437bfbebSnyanmisaka enum RPSType { 204*437bfbebSnyanmisaka ST_CURR_BEF = 0, 205*437bfbebSnyanmisaka ST_CURR_AFT, 206*437bfbebSnyanmisaka ST_FOLL, 207*437bfbebSnyanmisaka LT_CURR, 208*437bfbebSnyanmisaka LT_FOLL, 209*437bfbebSnyanmisaka NB_RPS_TYPE, 210*437bfbebSnyanmisaka }; 211*437bfbebSnyanmisaka 212*437bfbebSnyanmisaka #endif 213