xref: /rockchip-linux_mpp/mpp/common/h265_syntax.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
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