xref: /rockchip-linux_mpp/mpp/common/h265d_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  * @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