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 * @file h265d_syntax.h 20*437bfbebSnyanmisaka * @brief 21*437bfbebSnyanmisaka * @author csy(csy@rock-chips.com) 22*437bfbebSnyanmisaka 23*437bfbebSnyanmisaka * @version 1.0.0 24*437bfbebSnyanmisaka * @history 25*437bfbebSnyanmisaka * 2015.7.15 : Create 26*437bfbebSnyanmisaka */ 27*437bfbebSnyanmisaka #ifndef __H265D_SYNTAX__ 28*437bfbebSnyanmisaka #define __H265D_SYNTAX__ 29*437bfbebSnyanmisaka typedef unsigned long DWORD; 30*437bfbebSnyanmisaka typedef unsigned char BYTE; 31*437bfbebSnyanmisaka typedef unsigned short WORD; 32*437bfbebSnyanmisaka typedef unsigned long ULONG; 33*437bfbebSnyanmisaka typedef unsigned short USHORT; 34*437bfbebSnyanmisaka typedef unsigned char UCHAR; 35*437bfbebSnyanmisaka typedef unsigned int UINT; 36*437bfbebSnyanmisaka typedef unsigned int UINT32; 37*437bfbebSnyanmisaka 38*437bfbebSnyanmisaka typedef signed int BOOL; 39*437bfbebSnyanmisaka typedef signed int INT; 40*437bfbebSnyanmisaka typedef signed char CHAR; 41*437bfbebSnyanmisaka typedef signed short SHORT; 42*437bfbebSnyanmisaka typedef signed long LONG; 43*437bfbebSnyanmisaka typedef void *PVOID; 44*437bfbebSnyanmisaka 45*437bfbebSnyanmisaka /* HEVC Picture Entry structure */ 46*437bfbebSnyanmisaka #define MAX_SLICES 600 47*437bfbebSnyanmisaka typedef struct _DXVA_PicEntry_HEVC { 48*437bfbebSnyanmisaka union { 49*437bfbebSnyanmisaka struct { 50*437bfbebSnyanmisaka UCHAR Index7Bits : 7; 51*437bfbebSnyanmisaka UCHAR AssociatedFlag : 1; 52*437bfbebSnyanmisaka }; 53*437bfbebSnyanmisaka UCHAR bPicEntry; 54*437bfbebSnyanmisaka }; 55*437bfbebSnyanmisaka } DXVA_PicEntry_HEVC, *LPDXVA_PicEntry_HEVC; 56*437bfbebSnyanmisaka 57*437bfbebSnyanmisaka typedef struct _Short_SPS_RPS_HEVC { 58*437bfbebSnyanmisaka UCHAR num_negative_pics; 59*437bfbebSnyanmisaka UCHAR num_positive_pics; 60*437bfbebSnyanmisaka SHORT delta_poc_s0[16]; 61*437bfbebSnyanmisaka UCHAR s0_used_flag[16]; 62*437bfbebSnyanmisaka SHORT delta_poc_s1[16]; 63*437bfbebSnyanmisaka UCHAR s1_used_flag[16]; 64*437bfbebSnyanmisaka } Short_SPS_RPS_HEVC; 65*437bfbebSnyanmisaka 66*437bfbebSnyanmisaka typedef struct _LT_SPS_RPS_HEVC { 67*437bfbebSnyanmisaka USHORT lt_ref_pic_poc_lsb; 68*437bfbebSnyanmisaka UCHAR used_by_curr_pic_lt_flag; 69*437bfbebSnyanmisaka } LT_SPS_RPS_HEVC; 70*437bfbebSnyanmisaka /* HEVC Picture Parameter structure */ 71*437bfbebSnyanmisaka typedef struct _DXVA_PicParams_HEVC { 72*437bfbebSnyanmisaka USHORT PicWidthInMinCbsY; 73*437bfbebSnyanmisaka USHORT PicHeightInMinCbsY; 74*437bfbebSnyanmisaka union { 75*437bfbebSnyanmisaka struct { 76*437bfbebSnyanmisaka USHORT chroma_format_idc : 2; 77*437bfbebSnyanmisaka USHORT separate_colour_plane_flag : 1; 78*437bfbebSnyanmisaka USHORT bit_depth_luma_minus8 : 3; 79*437bfbebSnyanmisaka USHORT bit_depth_chroma_minus8 : 3; 80*437bfbebSnyanmisaka USHORT log2_max_pic_order_cnt_lsb_minus4 : 4; 81*437bfbebSnyanmisaka USHORT NoPicReorderingFlag : 1; 82*437bfbebSnyanmisaka USHORT NoBiPredFlag : 1; 83*437bfbebSnyanmisaka USHORT ReservedBits1 : 1; 84*437bfbebSnyanmisaka }; 85*437bfbebSnyanmisaka USHORT wFormatAndSequenceInfoFlags; 86*437bfbebSnyanmisaka }; 87*437bfbebSnyanmisaka DXVA_PicEntry_HEVC CurrPic; 88*437bfbebSnyanmisaka UCHAR sps_max_dec_pic_buffering_minus1; 89*437bfbebSnyanmisaka UCHAR log2_min_luma_coding_block_size_minus3; 90*437bfbebSnyanmisaka UCHAR log2_diff_max_min_luma_coding_block_size; 91*437bfbebSnyanmisaka UCHAR log2_min_transform_block_size_minus2; 92*437bfbebSnyanmisaka UCHAR log2_diff_max_min_transform_block_size; 93*437bfbebSnyanmisaka UCHAR max_transform_hierarchy_depth_inter; 94*437bfbebSnyanmisaka UCHAR max_transform_hierarchy_depth_intra; 95*437bfbebSnyanmisaka UCHAR num_short_term_ref_pic_sets; 96*437bfbebSnyanmisaka UCHAR num_long_term_ref_pics_sps; 97*437bfbebSnyanmisaka UCHAR num_ref_idx_l0_default_active_minus1; 98*437bfbebSnyanmisaka UCHAR num_ref_idx_l1_default_active_minus1; 99*437bfbebSnyanmisaka CHAR init_qp_minus26; 100*437bfbebSnyanmisaka UCHAR ucNumDeltaPocsOfRefRpsIdx; 101*437bfbebSnyanmisaka USHORT wNumBitsForShortTermRPSInSlice; 102*437bfbebSnyanmisaka USHORT ReservedBits2; 103*437bfbebSnyanmisaka 104*437bfbebSnyanmisaka union { 105*437bfbebSnyanmisaka struct { 106*437bfbebSnyanmisaka UINT32 scaling_list_enabled_flag : 1; 107*437bfbebSnyanmisaka UINT32 amp_enabled_flag : 1; 108*437bfbebSnyanmisaka UINT32 sample_adaptive_offset_enabled_flag : 1; 109*437bfbebSnyanmisaka UINT32 pcm_enabled_flag : 1; 110*437bfbebSnyanmisaka UINT32 pcm_sample_bit_depth_luma_minus1 : 4; 111*437bfbebSnyanmisaka UINT32 pcm_sample_bit_depth_chroma_minus1 : 4; 112*437bfbebSnyanmisaka UINT32 log2_min_pcm_luma_coding_block_size_minus3 : 2; 113*437bfbebSnyanmisaka UINT32 log2_diff_max_min_pcm_luma_coding_block_size : 2; 114*437bfbebSnyanmisaka UINT32 pcm_loop_filter_disabled_flag : 1; 115*437bfbebSnyanmisaka UINT32 long_term_ref_pics_present_flag : 1; 116*437bfbebSnyanmisaka UINT32 sps_temporal_mvp_enabled_flag : 1; 117*437bfbebSnyanmisaka UINT32 strong_intra_smoothing_enabled_flag : 1; 118*437bfbebSnyanmisaka UINT32 dependent_slice_segments_enabled_flag : 1; 119*437bfbebSnyanmisaka UINT32 output_flag_present_flag : 1; 120*437bfbebSnyanmisaka UINT32 num_extra_slice_header_bits : 3; 121*437bfbebSnyanmisaka UINT32 sign_data_hiding_enabled_flag : 1; 122*437bfbebSnyanmisaka UINT32 cabac_init_present_flag : 1; 123*437bfbebSnyanmisaka UINT32 ReservedBits3 : 5; 124*437bfbebSnyanmisaka }; 125*437bfbebSnyanmisaka UINT32 dwCodingParamToolFlags; 126*437bfbebSnyanmisaka }; 127*437bfbebSnyanmisaka 128*437bfbebSnyanmisaka union { 129*437bfbebSnyanmisaka struct { 130*437bfbebSnyanmisaka UINT32 constrained_intra_pred_flag : 1; 131*437bfbebSnyanmisaka UINT32 transform_skip_enabled_flag : 1; 132*437bfbebSnyanmisaka UINT32 cu_qp_delta_enabled_flag : 1; 133*437bfbebSnyanmisaka UINT32 pps_slice_chroma_qp_offsets_present_flag : 1; 134*437bfbebSnyanmisaka UINT32 weighted_pred_flag : 1; 135*437bfbebSnyanmisaka UINT32 weighted_bipred_flag : 1; 136*437bfbebSnyanmisaka UINT32 transquant_bypass_enabled_flag : 1; 137*437bfbebSnyanmisaka UINT32 tiles_enabled_flag : 1; 138*437bfbebSnyanmisaka UINT32 entropy_coding_sync_enabled_flag : 1; 139*437bfbebSnyanmisaka UINT32 uniform_spacing_flag : 1; 140*437bfbebSnyanmisaka UINT32 loop_filter_across_tiles_enabled_flag : 1; 141*437bfbebSnyanmisaka UINT32 pps_loop_filter_across_slices_enabled_flag : 1; 142*437bfbebSnyanmisaka UINT32 deblocking_filter_override_enabled_flag : 1; 143*437bfbebSnyanmisaka UINT32 pps_deblocking_filter_disabled_flag : 1; 144*437bfbebSnyanmisaka UINT32 lists_modification_present_flag : 1; 145*437bfbebSnyanmisaka UINT32 slice_segment_header_extension_present_flag : 1; 146*437bfbebSnyanmisaka UINT32 IrapPicFlag : 1; 147*437bfbebSnyanmisaka UINT32 IdrPicFlag : 1; 148*437bfbebSnyanmisaka UINT32 IntraPicFlag : 1; 149*437bfbebSnyanmisaka // sps exension flags 150*437bfbebSnyanmisaka UINT32 sps_extension_flag : 1; 151*437bfbebSnyanmisaka UINT32 sps_range_extension_flag : 1; 152*437bfbebSnyanmisaka UINT32 transform_skip_rotation_enabled_flag : 1; 153*437bfbebSnyanmisaka UINT32 transform_skip_context_enabled_flag : 1; 154*437bfbebSnyanmisaka UINT32 implicit_rdpcm_enabled_flag : 1; 155*437bfbebSnyanmisaka UINT32 explicit_rdpcm_enabled_flag : 1; 156*437bfbebSnyanmisaka UINT32 extended_precision_processing_flag : 1; 157*437bfbebSnyanmisaka UINT32 intra_smoothing_disabled_flag : 1; 158*437bfbebSnyanmisaka UINT32 high_precision_offsets_enabled_flag : 1; 159*437bfbebSnyanmisaka UINT32 persistent_rice_adaptation_enabled_flag : 1; 160*437bfbebSnyanmisaka UINT32 cabac_bypass_alignment_enabled_flag : 1; 161*437bfbebSnyanmisaka // pps exension flags 162*437bfbebSnyanmisaka UINT32 cross_component_prediction_enabled_flag : 1; 163*437bfbebSnyanmisaka UINT32 chroma_qp_offset_list_enabled_flag : 1; 164*437bfbebSnyanmisaka }; 165*437bfbebSnyanmisaka UINT32 dwCodingSettingPicturePropertyFlags; 166*437bfbebSnyanmisaka }; 167*437bfbebSnyanmisaka CHAR pps_cb_qp_offset; 168*437bfbebSnyanmisaka CHAR pps_cr_qp_offset; 169*437bfbebSnyanmisaka UCHAR num_tile_columns_minus1; 170*437bfbebSnyanmisaka UCHAR num_tile_rows_minus1; 171*437bfbebSnyanmisaka USHORT column_width_minus1[19]; 172*437bfbebSnyanmisaka USHORT row_height_minus1[21]; 173*437bfbebSnyanmisaka UCHAR diff_cu_qp_delta_depth; 174*437bfbebSnyanmisaka CHAR pps_beta_offset_div2; 175*437bfbebSnyanmisaka CHAR pps_tc_offset_div2; 176*437bfbebSnyanmisaka UCHAR log2_parallel_merge_level_minus2; 177*437bfbebSnyanmisaka INT CurrPicOrderCntVal; 178*437bfbebSnyanmisaka DXVA_PicEntry_HEVC RefPicList[15]; 179*437bfbebSnyanmisaka UCHAR ReservedBits5; 180*437bfbebSnyanmisaka INT PicOrderCntValList[15]; 181*437bfbebSnyanmisaka UCHAR RefPicSetStCurrBefore[8]; 182*437bfbebSnyanmisaka UCHAR RefPicSetStCurrAfter[8]; 183*437bfbebSnyanmisaka UCHAR RefPicSetLtCurr[8]; 184*437bfbebSnyanmisaka USHORT ReservedBits6; 185*437bfbebSnyanmisaka USHORT ReservedBits7; 186*437bfbebSnyanmisaka UINT StatusReportFeedbackNumber; 187*437bfbebSnyanmisaka UINT32 vps_id; 188*437bfbebSnyanmisaka UINT32 pps_id; 189*437bfbebSnyanmisaka UINT32 sps_id; 190*437bfbebSnyanmisaka INT current_poc; 191*437bfbebSnyanmisaka 192*437bfbebSnyanmisaka Short_SPS_RPS_HEVC cur_st_rps; 193*437bfbebSnyanmisaka Short_SPS_RPS_HEVC sps_st_rps[64]; 194*437bfbebSnyanmisaka LT_SPS_RPS_HEVC sps_lt_rps[32]; 195*437bfbebSnyanmisaka 196*437bfbebSnyanmisaka // PPS exentison 197*437bfbebSnyanmisaka UCHAR log2_max_transform_skip_block_size; 198*437bfbebSnyanmisaka UCHAR diff_cu_chroma_qp_offset_depth; 199*437bfbebSnyanmisaka CHAR cb_qp_offset_list[6]; 200*437bfbebSnyanmisaka CHAR cr_qp_offset_list[6]; 201*437bfbebSnyanmisaka UCHAR chroma_qp_offset_list_len_minus1; 202*437bfbebSnyanmisaka 203*437bfbebSnyanmisaka UCHAR scaling_list_data_present_flag; 204*437bfbebSnyanmisaka UCHAR ps_update_flag; 205*437bfbebSnyanmisaka UCHAR rps_update_flag; 206*437bfbebSnyanmisaka } DXVA_PicParams_HEVC, *LPDXVA_PicParams_HEVC; 207*437bfbebSnyanmisaka 208*437bfbebSnyanmisaka /* HEVC Quantizatiuon Matrix structure */ 209*437bfbebSnyanmisaka typedef struct _DXVA_Qmatrix_HEVC { 210*437bfbebSnyanmisaka UCHAR ucScalingLists0[6][16]; 211*437bfbebSnyanmisaka UCHAR ucScalingLists1[6][64]; 212*437bfbebSnyanmisaka UCHAR ucScalingLists2[6][64]; 213*437bfbebSnyanmisaka UCHAR ucScalingLists3[2][64]; 214*437bfbebSnyanmisaka UCHAR ucScalingListDCCoefSizeID2[6]; 215*437bfbebSnyanmisaka UCHAR ucScalingListDCCoefSizeID3[2]; 216*437bfbebSnyanmisaka } DXVA_Qmatrix_HEVC, *LPDXVA_Qmatrix_HEVC; 217*437bfbebSnyanmisaka 218*437bfbebSnyanmisaka 219*437bfbebSnyanmisaka /* HEVC Slice Control Structure */ 220*437bfbebSnyanmisaka typedef struct _DXVA_Slice_HEVC_Short { 221*437bfbebSnyanmisaka UINT BSNALunitDataLocation; 222*437bfbebSnyanmisaka UINT SliceBytesInBuffer; 223*437bfbebSnyanmisaka USHORT wBadSliceChopping; 224*437bfbebSnyanmisaka } DXVA_Slice_HEVC_Short, *LPDXVA_Slice_HEVC_Short; 225*437bfbebSnyanmisaka 226*437bfbebSnyanmisaka /* just use in the case of pps->slice_header_extension_present_flag is 1 */ 227*437bfbebSnyanmisaka typedef struct _DXVA_Slice_HEVC_Cut_Param { 228*437bfbebSnyanmisaka UINT start_bit; 229*437bfbebSnyanmisaka UINT end_bit; 230*437bfbebSnyanmisaka USHORT is_enable; 231*437bfbebSnyanmisaka } DXVA_Slice_HEVC_Cut_Param, *LPDXVA_Slice_HEVC_Cut_Param; 232*437bfbebSnyanmisaka 233*437bfbebSnyanmisaka typedef struct h265d_dxva2_picture_context { 234*437bfbebSnyanmisaka DXVA_PicParams_HEVC pp; 235*437bfbebSnyanmisaka DXVA_Qmatrix_HEVC qm; 236*437bfbebSnyanmisaka UINT32 slice_count; 237*437bfbebSnyanmisaka DXVA_Slice_HEVC_Short *slice_short; 238*437bfbebSnyanmisaka const UCHAR *bitstream; 239*437bfbebSnyanmisaka UINT32 bitstream_size; 240*437bfbebSnyanmisaka DXVA_Slice_HEVC_Cut_Param *slice_cut_param; 241*437bfbebSnyanmisaka INT max_slice_num; 242*437bfbebSnyanmisaka } h265d_dxva2_picture_context_t; 243*437bfbebSnyanmisaka 244*437bfbebSnyanmisaka #endif /*__H265D_SYNTAX__*/ 245