xref: /rockchip-linux_mpp/mpp/common/h264_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 __H264_SYNTAX_H__
20*437bfbebSnyanmisaka #define __H264_SYNTAX_H__
21*437bfbebSnyanmisaka 
22*437bfbebSnyanmisaka /* H.264/AVC-specific definition */
23*437bfbebSnyanmisaka 
24*437bfbebSnyanmisaka //!< define
25*437bfbebSnyanmisaka #define MAXSPS                      32
26*437bfbebSnyanmisaka #define MAXPPS                      256
27*437bfbebSnyanmisaka 
28*437bfbebSnyanmisaka //!< aspect ratio explicitly specified as width:height
29*437bfbebSnyanmisaka #define H264_EXTENDED_SAR           255
30*437bfbebSnyanmisaka 
31*437bfbebSnyanmisaka //!< values for nal_ref_idc
32*437bfbebSnyanmisaka typedef enum H264NalRefIdcType_e {
33*437bfbebSnyanmisaka     H264_NALU_PRIORITY_DISPOSABLE   = 0,
34*437bfbebSnyanmisaka     H264_NALU_PRIORITY_LOW          = 1,
35*437bfbebSnyanmisaka     H264_NALU_PRIORITY_HIGH         = 2,
36*437bfbebSnyanmisaka     H264_NALU_PRIORITY_HIGHEST      = 3
37*437bfbebSnyanmisaka } H264NalRefIdcType;
38*437bfbebSnyanmisaka 
39*437bfbebSnyanmisaka //!< AVC Profile IDC definitions
40*437bfbebSnyanmisaka typedef enum h264e_profile_t {
41*437bfbebSnyanmisaka     H264_PROFILE_FREXT_CAVLC444     = 44,   //!< YUV 4:4:4/14 "CAVLC 4:4:4"
42*437bfbebSnyanmisaka     H264_PROFILE_BASELINE           = 66,   //!< YUV 4:2:0/8  "Baseline"
43*437bfbebSnyanmisaka     H264_PROFILE_MAIN               = 77,   //!< YUV 4:2:0/8  "Main"
44*437bfbebSnyanmisaka     H264_PROFILE_EXTENDED           = 88,   //!< YUV 4:2:0/8  "Extended"
45*437bfbebSnyanmisaka     H264_PROFILE_HIGH               = 100,  //!< YUV 4:2:0/8  "High"
46*437bfbebSnyanmisaka     H264_PROFILE_HIGH10             = 110,  //!< YUV 4:2:0/10 "High 10"
47*437bfbebSnyanmisaka     H264_PROFILE_HIGH422            = 122,  //!< YUV 4:2:2/10 "High 4:2:2"
48*437bfbebSnyanmisaka     H264_PROFILE_HIGH444            = 244,  //!< YUV 4:4:4/14 "High 4:4:4"
49*437bfbebSnyanmisaka     H264_PROFILE_MVC_HIGH           = 118,  //!< YUV 4:2:0/8  "Multiview High"
50*437bfbebSnyanmisaka     H264_PROFILE_STEREO_HIGH        = 128   //!< YUV 4:2:0/8  "Stereo High"
51*437bfbebSnyanmisaka } H264Profile;
52*437bfbebSnyanmisaka 
53*437bfbebSnyanmisaka //!< AVC Level IDC definitions
54*437bfbebSnyanmisaka typedef enum {
55*437bfbebSnyanmisaka     H264_LEVEL_1_0                  = 10,   //!< qcif@15fps
56*437bfbebSnyanmisaka     H264_LEVEL_1_b                  = 99,   //!< qcif@15fps
57*437bfbebSnyanmisaka     H264_LEVEL_1_1                  = 11,   //!< cif@7.5fps
58*437bfbebSnyanmisaka     H264_LEVEL_1_2                  = 12,   //!< cif@15fps
59*437bfbebSnyanmisaka     H264_LEVEL_1_3                  = 13,   //!< cif@30fps
60*437bfbebSnyanmisaka     H264_LEVEL_2_0                  = 20,   //!< cif@30fps
61*437bfbebSnyanmisaka     H264_LEVEL_2_1                  = 21,   //!< half-D1@@25fps
62*437bfbebSnyanmisaka     H264_LEVEL_2_2                  = 22,   //!< D1@12.5fps
63*437bfbebSnyanmisaka     H264_LEVEL_3_0                  = 30,   //!< D1@25fps
64*437bfbebSnyanmisaka     H264_LEVEL_3_1                  = 31,   //!< 720p@30fps
65*437bfbebSnyanmisaka     H264_LEVEL_3_2                  = 32,   //!< 720p@60fps
66*437bfbebSnyanmisaka     H264_LEVEL_4_0                  = 40,   //!< 1080p@30fps
67*437bfbebSnyanmisaka     H264_LEVEL_4_1                  = 41,   //!< 1080p@30fps
68*437bfbebSnyanmisaka     H264_LEVEL_4_2                  = 42,   //!< 1080p@60fps
69*437bfbebSnyanmisaka     H264_LEVEL_5_0                  = 50,   //!< 3K@30fps
70*437bfbebSnyanmisaka     H264_LEVEL_5_1                  = 51,   //!< 4K@30fps
71*437bfbebSnyanmisaka     H264_LEVEL_5_2                  = 52,   //!< 4K@60fps
72*437bfbebSnyanmisaka     H264_LEVEL_6_0                  = 60,   //!< 8K@30fps
73*437bfbebSnyanmisaka     H264_LEVEL_6_1                  = 61,   //!< 8K@60fps
74*437bfbebSnyanmisaka     H264_LEVEL_6_2                  = 62,   //!< 8K@120fps
75*437bfbebSnyanmisaka } H264Level;
76*437bfbebSnyanmisaka 
77*437bfbebSnyanmisaka //!< values for nalu_type
78*437bfbebSnyanmisaka typedef enum H264NaluType_e {
79*437bfbebSnyanmisaka     H264_NALU_TYPE_NULL             = 0,
80*437bfbebSnyanmisaka     H264_NALU_TYPE_SLICE            = 1,
81*437bfbebSnyanmisaka     H264_NALU_TYPE_DPA              = 2,
82*437bfbebSnyanmisaka     H264_NALU_TYPE_DPB              = 3,
83*437bfbebSnyanmisaka     H264_NALU_TYPE_DPC              = 4,
84*437bfbebSnyanmisaka     H264_NALU_TYPE_IDR              = 5,
85*437bfbebSnyanmisaka     H264_NALU_TYPE_SEI              = 6,
86*437bfbebSnyanmisaka     H264_NALU_TYPE_SPS              = 7,
87*437bfbebSnyanmisaka     H264_NALU_TYPE_PPS              = 8,
88*437bfbebSnyanmisaka     H264_NALU_TYPE_AUD              = 9,    // Access Unit Delimiter
89*437bfbebSnyanmisaka     H264_NALU_TYPE_EOSEQ            = 10,   // end of sequence
90*437bfbebSnyanmisaka     H264_NALU_TYPE_EOSTREAM         = 11,   // end of stream
91*437bfbebSnyanmisaka     H264_NALU_TYPE_FILL             = 12,
92*437bfbebSnyanmisaka     H264_NALU_TYPE_SPSEXT           = 13,
93*437bfbebSnyanmisaka     H264_NALU_TYPE_PREFIX           = 14,   // prefix
94*437bfbebSnyanmisaka     H264_NALU_TYPE_SUB_SPS          = 15,
95*437bfbebSnyanmisaka     H264_NALU_TYPE_SLICE_AUX        = 19,
96*437bfbebSnyanmisaka     H264_NALU_TYPE_SLC_EXT          = 20,   // slice extensive
97*437bfbebSnyanmisaka     H264_NALU_TYPE_VDRD             = 24,    // View and Dependency Representation Delimiter NAL Unit
98*437bfbebSnyanmisaka     H264_NALU_TYPE_UNSPECIFIED28    = 28,
99*437bfbebSnyanmisaka } H264NaluType;
100*437bfbebSnyanmisaka 
101*437bfbebSnyanmisaka typedef enum H264ChromaFmt_e {
102*437bfbebSnyanmisaka     H264_CHROMA_400                 = 0,    //!< Monochrome
103*437bfbebSnyanmisaka     H264_CHROMA_420                 = 1,    //!< 4:2:0
104*437bfbebSnyanmisaka     H264_CHROMA_422                 = 2,    //!< 4:2:2
105*437bfbebSnyanmisaka     H264_CHROMA_444                 = 3     //!< 4:4:4
106*437bfbebSnyanmisaka } H264ChromaFmt;
107*437bfbebSnyanmisaka 
108*437bfbebSnyanmisaka typedef enum H264SliceType_e {
109*437bfbebSnyanmisaka     H264_P_SLICE                    = 0,
110*437bfbebSnyanmisaka     H264_B_SLICE                    = 1,
111*437bfbebSnyanmisaka     H264_I_SLICE                    = 2,
112*437bfbebSnyanmisaka     H264_SP_SLICE                   = 3,
113*437bfbebSnyanmisaka     H264_SI_SLICE                   = 4,
114*437bfbebSnyanmisaka     H264_NUM_SLICE_TYPES            = 5
115*437bfbebSnyanmisaka } H264SliceType;
116*437bfbebSnyanmisaka 
117*437bfbebSnyanmisaka //!< SEI
118*437bfbebSnyanmisaka typedef enum H264SeiType_e {
119*437bfbebSnyanmisaka     H264_SEI_BUFFERING_PERIOD       = 0,
120*437bfbebSnyanmisaka     H264_SEI_PIC_TIMING,
121*437bfbebSnyanmisaka     H264_SEI_PAN_SCAN_RECT,
122*437bfbebSnyanmisaka     H264_SEI_FILLER_PAYLOAD,
123*437bfbebSnyanmisaka     H264_SEI_USER_DATA_REGISTERED_ITU_T_T35,
124*437bfbebSnyanmisaka     H264_SEI_USER_DATA_UNREGISTERED,
125*437bfbebSnyanmisaka     H264_SEI_RECOVERY_POINT,
126*437bfbebSnyanmisaka     H264_SEI_DEC_REF_PIC_MARKING_REPETITION,
127*437bfbebSnyanmisaka     H264_SEI_SPARE_PIC,
128*437bfbebSnyanmisaka     H264_SEI_SCENE_INFO,
129*437bfbebSnyanmisaka     H264_SEI_SUB_SEQ_INFO,
130*437bfbebSnyanmisaka     H264_SEI_SUB_SEQ_LAYER_CHARACTERISTICS,
131*437bfbebSnyanmisaka     H264_SEI_SUB_SEQ_CHARACTERISTICS,
132*437bfbebSnyanmisaka     H264_SEI_FULL_FRAME_FREEZE,
133*437bfbebSnyanmisaka     H264_SEI_FULL_FRAME_FREEZE_RELEASE,
134*437bfbebSnyanmisaka     H264_SEI_FULL_FRAME_SNAPSHOT,
135*437bfbebSnyanmisaka     H264_SEI_PROGRESSIVE_REFINEMENT_SEGMENT_START,
136*437bfbebSnyanmisaka     H264_SEI_PROGRESSIVE_REFINEMENT_SEGMENT_END,
137*437bfbebSnyanmisaka     H264_SEI_MOTION_CONSTRAINED_SLICE_GROUP_SET,
138*437bfbebSnyanmisaka     H264_SEI_FILM_GRAIN_CHARACTERISTICS,
139*437bfbebSnyanmisaka     H264_SEI_DEBLOCKING_FILTER_DISPLAY_PREFERENCE,
140*437bfbebSnyanmisaka     H264_SEI_STEREO_VIDEO_INFO,
141*437bfbebSnyanmisaka     H264_SEI_POST_FILTER_HINTS,
142*437bfbebSnyanmisaka     H264_SEI_TONE_MAPPING,
143*437bfbebSnyanmisaka     H264_SEI_SCALABILITY_INFO,
144*437bfbebSnyanmisaka     H264_SEI_SUB_PIC_SCALABLE_LAYER,
145*437bfbebSnyanmisaka     H264_SEI_NON_REQUIRED_LAYER_REP,
146*437bfbebSnyanmisaka     H264_SEI_PRIORITY_LAYER_INFO,
147*437bfbebSnyanmisaka     H264_SEI_LAYERS_NOT_PRESENT,
148*437bfbebSnyanmisaka     H264_SEI_LAYER_DEPENDENCY_CHANGE,
149*437bfbebSnyanmisaka     H264_SEI_SCALABLE_NESTING,
150*437bfbebSnyanmisaka     H264_SEI_BASE_LAYER_TEMPORAL_HRD,
151*437bfbebSnyanmisaka     H264_SEI_QUALITY_LAYER_INTEGRITY_CHECK,
152*437bfbebSnyanmisaka     H264_SEI_REDUNDANT_PIC_PROPERTY,
153*437bfbebSnyanmisaka     H264_SEI_TL0_DEP_REP_INDEX,
154*437bfbebSnyanmisaka     H264_SEI_TL_SWITCHING_POINT,
155*437bfbebSnyanmisaka     H264_SEI_PARALLEL_DECODING_INFO,
156*437bfbebSnyanmisaka     H264_SEI_MVC_SCALABLE_NESTING,
157*437bfbebSnyanmisaka     H264_SEI_VIEW_SCALABILITY_INFO,
158*437bfbebSnyanmisaka     H264_SEI_MULTIVIEW_SCENE_INFO,
159*437bfbebSnyanmisaka     H264_SEI_MULTIVIEW_ACQUISITION_INFO,
160*437bfbebSnyanmisaka     H264_SEI_NON_REQUIRED_VIEW_COMPONENT,
161*437bfbebSnyanmisaka     H264_SEI_VIEW_DEPENDENCY_CHANGE,
162*437bfbebSnyanmisaka     H264_SEI_OPERATION_POINTS_NOT_PRESENT,
163*437bfbebSnyanmisaka     H264_SEI_BASE_VIEW_TEMPORAL_HRD,
164*437bfbebSnyanmisaka     H264_SEI_FRAME_PACKING_ARRANGEMENT,
165*437bfbebSnyanmisaka 
166*437bfbebSnyanmisaka     H264_SEI_MAX_ELEMENTS  //!< number of maximum syntax elements
167*437bfbebSnyanmisaka } H264SeiType;
168*437bfbebSnyanmisaka 
169*437bfbebSnyanmisaka typedef enum H264ScalingListType_e {
170*437bfbebSnyanmisaka     H264_INTRA_4x4_Y,
171*437bfbebSnyanmisaka     H264_INTRA_4x4_U,
172*437bfbebSnyanmisaka     H264_INTRA_4x4_V,
173*437bfbebSnyanmisaka     H264_INTER_4x4_Y,
174*437bfbebSnyanmisaka     H264_INTER_4x4_U,
175*437bfbebSnyanmisaka     H264_INTER_4x4_V,
176*437bfbebSnyanmisaka     H264_INTRA_8x8_Y,
177*437bfbebSnyanmisaka     H264_INTER_8x8_Y,
178*437bfbebSnyanmisaka     H264_SCALING_MATRIX_TYPE_BUTT,
179*437bfbebSnyanmisaka } H264ScalingMatrixType;
180*437bfbebSnyanmisaka 
181*437bfbebSnyanmisaka #define H264E_MAX_REFS_CNT          16
182*437bfbebSnyanmisaka 
183*437bfbebSnyanmisaka #endif /*__H264_SYNTAX_H__*/
184