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