/*
|
*
|
* Copyright 2015 Rockchip Electronics Co. LTD
|
*
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
*/
|
|
|
#ifndef __H265_SYNTAX_H__
|
#define __H265_SYNTAX_H__
|
|
#define PIXW_1080P (1920)
|
#define PIXH_1080P (1088)
|
#define PIXW_4Kx2K (4096)
|
#define PIXH_4Kx2K (2304)
|
#define PIXW_8Kx4K (8192)
|
#define PIXH_8Kx4K (4320)
|
|
#if 0
|
|
#define REF_PIC_LIST_NUM_IDX 32
|
#define H265E_UUID_LENGTH 16
|
|
#define MAX_CPB_CNT 32 ///< Upper bound of (cpb_cnt_minus1 + 1)
|
#define MAX_NUM_LAYER_IDS 64
|
#define MAX_NUM_VPS 16
|
#define MAX_NUM_SPS 16
|
#define MAX_NUM_PPS 64
|
#define MAX_TLAYER 7 ///< max number of temporal layer
|
#define MAX_VPS_NUM_HRD_PARAMETERS 1
|
#define MAX_VPS_OP_SETS_PLUS1 1024
|
#define MAX_VPS_NUH_RESERVED_ZERO_LAYER_ID_PLUS1 1
|
#define MAX_NUM_REF_PICS 16 ///< max. number of pictures used for reference
|
#define MAX_NUM_REF 16 ///< max. number of entries in picture reference list
|
#define MAX_CU_DEPTH 6 // log2(LCUSize)
|
|
#define REF_PIC_LIST_0 0
|
#define REF_PIC_LIST_1 1
|
#define REF_PIC_LIST_X 100
|
#define REF_BY_RECN(idx) (0x00000001 << idx)
|
#define REF_BY_REFR(idx) (0x00000001 << idx)
|
#define MAX_NUM_REF_PICS 16
|
|
#endif
|
|
#define MAX_DPB_SIZE 17 // A.4.1
|
#define MAX_REFS 16
|
|
/**
|
* 7.4.2.1
|
*/
|
#define MAX_SUB_LAYERS 7
|
#define MAX_VPS_COUNT 16
|
#define MAX_SPS_COUNT 16
|
#define MAX_PPS_COUNT 64
|
#define MAX_SHORT_TERM_RPS_COUNT 64
|
#define MAX_CU_SIZE 128
|
|
//TODO: check if this is really the maximum
|
#define MAX_TRANSFORM_DEPTH 5
|
|
#define MAX_TB_SIZE 32
|
#define MAX_PB_SIZE 64
|
#define MAX_LOG2_CTB_SIZE 6
|
#define MAX_QP 51
|
#define DEFAULT_INTRA_TC_OFFSET 2
|
|
#define HEVC_CONTEXTS 183
|
|
#define MRG_MAX_NUM_CANDS 5
|
|
#define L0 0
|
#define L1 1
|
|
#define REF_PIC_LIST_NUM_IDX 32
|
#define MAX_CPB_CNT 32 //< Upper bound of (cpb_cnt_minus1 + 1)
|
#define MAX_CU_DEPTH 6 // log2(LCUSize)
|
#define MAX_VPS_NUM_HRD_PARAMETERS 1
|
#define MAX_VPS_OP_SETS_PLUS1 1024
|
#define MAX_VPS_NUH_RESERVED_ZERO_LAYER_ID_PLUS1 1
|
#define MAX_NUM_LONG_TERM_REF_PIC_POC 20
|
#define REF_BY_RECN(idx) (0x00000001 << idx)
|
#define REF_BY_REFR(idx) (0x00000001 << idx)
|
|
|
|
|
#define EPEL_EXTRA_BEFORE 1
|
#define EPEL_EXTRA_AFTER 2
|
#define EPEL_EXTRA 3
|
#define QPEL_EXTRA_BEFORE 3
|
#define QPEL_EXTRA_AFTER 4
|
#define QPEL_EXTRA 7
|
|
#define EDGE_EMU_BUFFER_STRIDE 80
|
|
#define MPP_INPUT_BUFFER_PADDING_SIZE 8
|
|
#define MPP_PROFILE_HEVC_MAIN 1
|
#define MPP_PROFILE_HEVC_MAIN_10 2
|
#define MPP_PROFILE_HEVC_MAIN_STILL_PICTURE 3
|
|
#define LOG2_MAX_CTB_SIZE 6
|
#define LOG2_MIN_CTB_SIZE 4
|
#define LOG2_MAX_PU_SIZE 6
|
#define LOG2_MIN_PU_SIZE 2
|
#define LOG2_MAX_TU_SIZE 5
|
#define LOG2_MIN_TU_SIZE 2
|
#define LOG2_MAX_CU_SIZE 6
|
#define LOG2_MIN_CU_SIZE 3
|
|
/**
|
* Value of the luma sample at position (x, y) in the 2D array tab.
|
*/
|
#define IS_IDR(s) (s->nal_unit_type == NAL_IDR_W_RADL || s->nal_unit_type == NAL_IDR_N_LP)
|
#define IS_BLA(s) (s->nal_unit_type == NAL_BLA_W_RADL || s->nal_unit_type == NAL_BLA_W_LP || \
|
s->nal_unit_type == NAL_BLA_N_LP)
|
#define IS_IRAP(s) (s->nal_unit_type >= 16 && s->nal_unit_type <= 23)
|
|
/**
|
* Table 7-3: NAL unit type codes
|
*/
|
enum NALUnitType {
|
NAL_TRAIL_N = 0,
|
NAL_TRAIL_R = 1,
|
NAL_TSA_N = 2,
|
NAL_TSA_R = 3,
|
NAL_STSA_N = 4,
|
NAL_STSA_R = 5,
|
NAL_RADL_N = 6,
|
NAL_RADL_R = 7,
|
NAL_RASL_N = 8,
|
NAL_RASL_R = 9,
|
NAL_BLA_W_LP = 16,
|
NAL_BLA_W_RADL = 17,
|
NAL_BLA_N_LP = 18,
|
NAL_IDR_W_RADL = 19,
|
NAL_IDR_N_LP = 20,
|
NAL_CRA_NUT = 21,
|
NAL_VPS = 32,
|
NAL_SPS = 33,
|
NAL_PPS = 34,
|
NAL_AUD = 35,
|
NAL_EOS_NUT = 36,
|
NAL_EOB_NUT = 37,
|
NAL_FD_NUT = 38,
|
NAL_SEI_PREFIX = 39,
|
NAL_SEI_SUFFIX = 40,
|
};
|
|
typedef enum H265NalPriority_t {
|
H265_NAL_PRIORITY_DISPOSABLE = 0,
|
H265_NAL_PRIORITY_LOW = 1,
|
H265_NAL_PRIORITY_HIGH = 2,
|
H265_NAL_PRIORITY_HIGHEST = 3,
|
} H265NalPriority;
|
|
|
enum RPSType {
|
ST_CURR_BEF = 0,
|
ST_CURR_AFT,
|
ST_FOLL,
|
LT_CURR,
|
LT_FOLL,
|
NB_RPS_TYPE,
|
};
|
|
typedef enum SliceType_t {
|
B_SLICE = 0,
|
P_SLICE = 1,
|
I_SLICE = 2,
|
} SliceType;
|
|
typedef enum {
|
H265_LEVEL_NONE = 0,
|
H265_LEVEL1 = 30,
|
H265_LEVEL2 = 60,
|
H265_LEVEL2_1 = 63,
|
H265_LEVEL3 = 90,
|
H265_LEVEL3_1 = 93,
|
H265_LEVEL4 = 120,
|
H265_LEVEL4_1 = 123,
|
H265_LEVEL5 = 150,
|
H265_LEVEL5_1 = 153,
|
H265_LEVEL5_2 = 156,
|
H265_LEVEL6 = 180,
|
H265_LEVEL6_1 = 183,
|
H265_LEVEL6_2 = 186,
|
H265_LEVEL8_5 = 255,
|
} H265Level;
|
|
#endif
|