xref: /rockchip-linux_mpp/mpp/common/h265e_syntax_new.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka  * Copyright 2015 Rockchip Electronics Co. LTD
3*437bfbebSnyanmisaka  *
4*437bfbebSnyanmisaka  * Licensed under the Apache License, Version 2.0 (the "License");
5*437bfbebSnyanmisaka  * you may not use this file except in compliance with the License.
6*437bfbebSnyanmisaka  * You may obtain a copy of the License at
7*437bfbebSnyanmisaka  *
8*437bfbebSnyanmisaka  *      http://www.apache.org/licenses/LICENSE-2.0
9*437bfbebSnyanmisaka  *
10*437bfbebSnyanmisaka  * Unless required by applicable law or agreed to in writing, software
11*437bfbebSnyanmisaka  * distributed under the License is distributed on an "AS IS" BASIS,
12*437bfbebSnyanmisaka  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*437bfbebSnyanmisaka  * See the License for the specific language governing permissions and
14*437bfbebSnyanmisaka  * limitations under the License.
15*437bfbebSnyanmisaka  */
16*437bfbebSnyanmisaka 
17*437bfbebSnyanmisaka #ifndef __H265E_SYNTAX_NEW_H__
18*437bfbebSnyanmisaka #define __H265E_SYNTAX_NEW_H__
19*437bfbebSnyanmisaka #include "mpp_rc.h"
20*437bfbebSnyanmisaka #include "h265_syntax.h"
21*437bfbebSnyanmisaka #include "rc.h"
22*437bfbebSnyanmisaka 
23*437bfbebSnyanmisaka typedef struct H265PicEntry_t {
24*437bfbebSnyanmisaka     RK_U8 slot_idx;
25*437bfbebSnyanmisaka } H265ePicEntry;
26*437bfbebSnyanmisaka 
27*437bfbebSnyanmisaka typedef struct H265ePicParams_t {
28*437bfbebSnyanmisaka     RK_U16      pic_width;
29*437bfbebSnyanmisaka     RK_U16      pic_height;
30*437bfbebSnyanmisaka     RK_U16      hor_stride;
31*437bfbebSnyanmisaka     RK_U16      ver_stride;
32*437bfbebSnyanmisaka     RK_U16      pic_ofsty;
33*437bfbebSnyanmisaka     RK_U16      pic_oftx;
34*437bfbebSnyanmisaka     RK_U32      mpp_format;
35*437bfbebSnyanmisaka     union {
36*437bfbebSnyanmisaka         struct {
37*437bfbebSnyanmisaka             RK_U16  chroma_format_idc                       : 2;
38*437bfbebSnyanmisaka             RK_U16  separate_colour_plane_flag              : 1;
39*437bfbebSnyanmisaka             RK_U16  bit_depth_luma_minus8                   : 3;
40*437bfbebSnyanmisaka             RK_U16  bit_depth_chroma_minus8                 : 3;
41*437bfbebSnyanmisaka             RK_U16  log2_max_pic_order_cnt_lsb_minus4       : 4;
42*437bfbebSnyanmisaka             RK_U16  NoPicReorderingFlag                     : 1;
43*437bfbebSnyanmisaka             RK_U16  NoBiPredFlag                            : 1;
44*437bfbebSnyanmisaka             RK_U16  ReservedBits1                           : 1;
45*437bfbebSnyanmisaka         };
46*437bfbebSnyanmisaka         RK_U16 wFormatAndSequenceInfoFlags;
47*437bfbebSnyanmisaka     };
48*437bfbebSnyanmisaka     RK_U8   sps_max_dec_pic_buffering_minus1;
49*437bfbebSnyanmisaka     RK_U8   log2_min_luma_coding_block_size_minus3;
50*437bfbebSnyanmisaka     RK_U8   log2_diff_max_min_luma_coding_block_size;
51*437bfbebSnyanmisaka     RK_U8   log2_min_transform_block_size_minus2;
52*437bfbebSnyanmisaka     RK_U8   log2_diff_max_min_transform_block_size;
53*437bfbebSnyanmisaka     RK_U8   max_transform_hierarchy_depth_inter;
54*437bfbebSnyanmisaka     RK_U8   max_transform_hierarchy_depth_intra;
55*437bfbebSnyanmisaka     RK_U8   num_short_term_ref_pic_sets;
56*437bfbebSnyanmisaka     RK_U8   num_long_term_ref_pics_sps;
57*437bfbebSnyanmisaka     RK_U8   num_ref_idx_l0_default_active_minus1;
58*437bfbebSnyanmisaka     RK_U8   num_ref_idx_l1_default_active_minus1;
59*437bfbebSnyanmisaka     RK_S8   init_qp_minus26;
60*437bfbebSnyanmisaka     RK_U16  ReservedBits2;
61*437bfbebSnyanmisaka 
62*437bfbebSnyanmisaka     union {
63*437bfbebSnyanmisaka         struct {
64*437bfbebSnyanmisaka             RK_U32  scaling_list_enabled_flag                    : 1;
65*437bfbebSnyanmisaka             RK_U32  amp_enabled_flag                            : 1;
66*437bfbebSnyanmisaka             RK_U32  sample_adaptive_offset_enabled_flag         : 1;
67*437bfbebSnyanmisaka             RK_U32  pcm_enabled_flag                            : 1;
68*437bfbebSnyanmisaka             RK_U32  pcm_sample_bit_depth_luma_minus1            : 4;
69*437bfbebSnyanmisaka             RK_U32  pcm_sample_bit_depth_chroma_minus1          : 4;
70*437bfbebSnyanmisaka             RK_U32  log2_min_pcm_luma_coding_block_size_minus3  : 2;
71*437bfbebSnyanmisaka             RK_U32  log2_diff_max_min_pcm_luma_coding_block_size : 2;
72*437bfbebSnyanmisaka             RK_U32  pcm_loop_filter_disabled_flag                : 1;
73*437bfbebSnyanmisaka             RK_U32  long_term_ref_pics_present_flag             : 1;
74*437bfbebSnyanmisaka             RK_U32  sps_temporal_mvp_enabled_flag               : 1;
75*437bfbebSnyanmisaka             RK_U32  strong_intra_smoothing_enabled_flag         : 1;
76*437bfbebSnyanmisaka             RK_U32  dependent_slice_segments_enabled_flag       : 1;
77*437bfbebSnyanmisaka             RK_U32  output_flag_present_flag                    : 1;
78*437bfbebSnyanmisaka             RK_U32  num_extra_slice_header_bits                 : 3;
79*437bfbebSnyanmisaka             RK_U32  sign_data_hiding_enabled_flag               : 1;
80*437bfbebSnyanmisaka             RK_U32  cabac_init_present_flag                     : 1;
81*437bfbebSnyanmisaka             RK_U32  ReservedBits3                               : 5;
82*437bfbebSnyanmisaka         };
83*437bfbebSnyanmisaka         RK_U32 CodingParamToolFlags;
84*437bfbebSnyanmisaka     };
85*437bfbebSnyanmisaka 
86*437bfbebSnyanmisaka     union {
87*437bfbebSnyanmisaka         struct {
88*437bfbebSnyanmisaka             RK_U32  constrained_intra_pred_flag                 : 1;
89*437bfbebSnyanmisaka             RK_U32  transform_skip_enabled_flag                 : 1;
90*437bfbebSnyanmisaka             RK_U32  cu_qp_delta_enabled_flag                    : 1;
91*437bfbebSnyanmisaka             RK_U32  pps_slice_chroma_qp_offsets_present_flag    : 1;
92*437bfbebSnyanmisaka             RK_U32  weighted_pred_flag                          : 1;
93*437bfbebSnyanmisaka             RK_U32  weighted_bipred_flag                        : 1;
94*437bfbebSnyanmisaka             RK_U32  transquant_bypass_enabled_flag              : 1;
95*437bfbebSnyanmisaka             RK_U32  tiles_enabled_flag                          : 1;
96*437bfbebSnyanmisaka             RK_U32  entropy_coding_sync_enabled_flag            : 1;
97*437bfbebSnyanmisaka             RK_U32  uniform_spacing_flag                        : 1;
98*437bfbebSnyanmisaka             RK_U32  loop_filter_across_tiles_enabled_flag       : 1;
99*437bfbebSnyanmisaka             RK_U32  pps_loop_filter_across_slices_enabled_flag  : 1;
100*437bfbebSnyanmisaka             RK_U32  deblocking_filter_override_enabled_flag     : 1;
101*437bfbebSnyanmisaka             RK_U32  pps_deblocking_filter_disabled_flag         : 1;
102*437bfbebSnyanmisaka             RK_U32  lists_modification_present_flag             : 1;
103*437bfbebSnyanmisaka             RK_U32  slice_segment_header_extension_present_flag : 1;
104*437bfbebSnyanmisaka             RK_U32  ReservedBits4                               : 16;
105*437bfbebSnyanmisaka         };
106*437bfbebSnyanmisaka         RK_U32 CodingSettingPicturePropertyFlags;
107*437bfbebSnyanmisaka     };
108*437bfbebSnyanmisaka     RK_S8  pps_cb_qp_offset;
109*437bfbebSnyanmisaka     RK_S8  pps_cr_qp_offset;
110*437bfbebSnyanmisaka     RK_U8   num_tile_columns_minus1;
111*437bfbebSnyanmisaka     RK_U8   num_tile_rows_minus1;
112*437bfbebSnyanmisaka     RK_S32  column_width_minus1[19];
113*437bfbebSnyanmisaka     RK_S32  row_height_minus1[21];
114*437bfbebSnyanmisaka     RK_U8  diff_cu_qp_delta_depth;
115*437bfbebSnyanmisaka     RK_S8  pps_beta_offset_div2;
116*437bfbebSnyanmisaka     RK_S8  pps_tc_offset_div2;
117*437bfbebSnyanmisaka     RK_U8  log2_parallel_merge_level_minus2;
118*437bfbebSnyanmisaka     RK_U32 vps_id;
119*437bfbebSnyanmisaka     RK_U32 pps_id;
120*437bfbebSnyanmisaka     RK_U32 sps_id;
121*437bfbebSnyanmisaka     RK_U8 scaling_list_data_present_flag;
122*437bfbebSnyanmisaka } H265ePicParams;
123*437bfbebSnyanmisaka 
124*437bfbebSnyanmisaka typedef struct H265eSlicParams_t {
125*437bfbebSnyanmisaka     union {
126*437bfbebSnyanmisaka         struct {
127*437bfbebSnyanmisaka             RK_U32 sli_splt               : 1;
128*437bfbebSnyanmisaka             RK_U32 sli_splt_mode          : 1;
129*437bfbebSnyanmisaka             RK_U32 sli_splt_cpst          : 1;
130*437bfbebSnyanmisaka             RK_U32 sli_flsh               : 1;
131*437bfbebSnyanmisaka             RK_U32 cbc_init_flg          : 1;
132*437bfbebSnyanmisaka             RK_U32 mvd_l1_zero_flg       : 1;
133*437bfbebSnyanmisaka             RK_U32 merge_up_flag         : 1;
134*437bfbebSnyanmisaka             RK_U32 merge_left_flag       : 1;
135*437bfbebSnyanmisaka             RK_U32 ref_pic_lst_mdf_l0    : 1;
136*437bfbebSnyanmisaka             RK_U32 num_refidx_act_ovrd   : 1;
137*437bfbebSnyanmisaka             RK_U32 sli_sao_chrm_flg      : 1;
138*437bfbebSnyanmisaka             RK_U32 sli_sao_luma_flg      : 1;
139*437bfbebSnyanmisaka             RK_U32 sli_tmprl_mvp_en      : 1;
140*437bfbebSnyanmisaka             RK_U32 pic_out_flg           : 1;
141*437bfbebSnyanmisaka             RK_U32 dpdnt_sli_seg_flg     : 1;
142*437bfbebSnyanmisaka             RK_U32 no_out_pri_pic        : 1;
143*437bfbebSnyanmisaka             RK_U32 sli_lp_fltr_acrs_sli  : 1;
144*437bfbebSnyanmisaka             RK_U32 sli_dblk_fltr_dis     : 1;
145*437bfbebSnyanmisaka             RK_U32 dblk_fltr_ovrd_flg    : 1;
146*437bfbebSnyanmisaka             RK_U32 col_ref_idx           : 1;
147*437bfbebSnyanmisaka             RK_U32 col_frm_l0_flg        : 1;
148*437bfbebSnyanmisaka             RK_U32 st_ref_pic_flg        : 1;
149*437bfbebSnyanmisaka             RK_U32 num_pos_pic           : 1;
150*437bfbebSnyanmisaka             RK_U32 dlt_poc_msb_prsnt0    : 1;
151*437bfbebSnyanmisaka             RK_U32 dlt_poc_msb_prsnt1    : 1;
152*437bfbebSnyanmisaka             RK_U32 dlt_poc_msb_prsnt2    : 1;
153*437bfbebSnyanmisaka             RK_U32 used_by_lt_flg0       : 1;
154*437bfbebSnyanmisaka             RK_U32 used_by_lt_flg1       : 1;
155*437bfbebSnyanmisaka             RK_U32 used_by_lt_flg2       : 1;
156*437bfbebSnyanmisaka             RK_U32 ReservedBits          : 3;
157*437bfbebSnyanmisaka         };
158*437bfbebSnyanmisaka         RK_U32 CodingSliceFlags;
159*437bfbebSnyanmisaka     };
160*437bfbebSnyanmisaka 
161*437bfbebSnyanmisaka     H265ePicEntry  recon_pic;
162*437bfbebSnyanmisaka     H265ePicEntry  ref_pic;
163*437bfbebSnyanmisaka     RK_S8 sli_tc_ofst_div2;
164*437bfbebSnyanmisaka     RK_S8 sli_beta_ofst_div2;
165*437bfbebSnyanmisaka     RK_S8 sli_cb_qp_ofst;
166*437bfbebSnyanmisaka     RK_U8 sli_qp;
167*437bfbebSnyanmisaka     RK_U8 max_mrg_cnd;
168*437bfbebSnyanmisaka     RK_U8 lst_entry_l0;
169*437bfbebSnyanmisaka     RK_U8 num_refidx_l1_act;
170*437bfbebSnyanmisaka     RK_U8 num_refidx_l0_act;
171*437bfbebSnyanmisaka     RK_U8 slice_type;
172*437bfbebSnyanmisaka     RK_U8 slice_rsrv_flg;
173*437bfbebSnyanmisaka     RK_U8 sli_pps_id;
174*437bfbebSnyanmisaka     RK_U8 lt_idx_sps;
175*437bfbebSnyanmisaka     RK_U8 num_lt_pic;
176*437bfbebSnyanmisaka     RK_U8 st_ref_pic_idx;
177*437bfbebSnyanmisaka     RK_U8 num_lt_sps;
178*437bfbebSnyanmisaka     RK_U8 used_by_s0_flg;
179*437bfbebSnyanmisaka     RK_U8 num_neg_pic;
180*437bfbebSnyanmisaka     RK_U16 sli_poc_lsb;
181*437bfbebSnyanmisaka     RK_U16 sli_hdr_ext_len;
182*437bfbebSnyanmisaka     RK_U16 poc_lsb_lt0;
183*437bfbebSnyanmisaka     RK_U16 sli_max_num_m1;
184*437bfbebSnyanmisaka     RK_U16 sli_splt_cnum_m1;
185*437bfbebSnyanmisaka     RK_U16 dlt_poc_msb_cycl0;
186*437bfbebSnyanmisaka     RK_U16 dlt_poc_s0_m10;
187*437bfbebSnyanmisaka     RK_U16 dlt_poc_s0_m11;
188*437bfbebSnyanmisaka     RK_U16 dlt_poc_s0_m12;
189*437bfbebSnyanmisaka     RK_U16 dlt_poc_s0_m13;
190*437bfbebSnyanmisaka     RK_U16 poc_lsb_lt1;
191*437bfbebSnyanmisaka     RK_U16 poc_lsb_lt2;
192*437bfbebSnyanmisaka     RK_U16 dlt_poc_msb_cycl1;
193*437bfbebSnyanmisaka     RK_U16 dlt_poc_msb_cycl2;
194*437bfbebSnyanmisaka     RK_U32 sli_splt_byte;
195*437bfbebSnyanmisaka     RK_U32 tot_poc_num;
196*437bfbebSnyanmisaka     RK_U32 non_reference_flag;
197*437bfbebSnyanmisaka     RK_S32 temporal_id;
198*437bfbebSnyanmisaka } H265eSlicParams;
199*437bfbebSnyanmisaka /*
200*437bfbebSnyanmisaka  * Split reference frame configure to two parts
201*437bfbebSnyanmisaka  * The first part is slice depended info like poc / frame_num, and frame
202*437bfbebSnyanmisaka  * type and flags.
203*437bfbebSnyanmisaka  * The other part is gop structure depended info like gop index, ref_status
204*437bfbebSnyanmisaka  * and ref_frm_index. This part is inited from dpb gop hierarchy info.
205*437bfbebSnyanmisaka  */
206*437bfbebSnyanmisaka 
207*437bfbebSnyanmisaka typedef struct UserDatas_t {
208*437bfbebSnyanmisaka     void *plt_data;
209*437bfbebSnyanmisaka } UserDatas;
210*437bfbebSnyanmisaka 
211*437bfbebSnyanmisaka typedef struct H265eSyntax_new_t {
212*437bfbebSnyanmisaka     RK_S32          idr_request;
213*437bfbebSnyanmisaka     H265ePicParams  pp;
214*437bfbebSnyanmisaka     H265eSlicParams sp;
215*437bfbebSnyanmisaka     void            *dpb;
216*437bfbebSnyanmisaka } H265eSyntax_new;
217*437bfbebSnyanmisaka 
218*437bfbebSnyanmisaka #ifdef __cplusplus
219*437bfbebSnyanmisaka extern "C" {
220*437bfbebSnyanmisaka #endif
221*437bfbebSnyanmisaka 
222*437bfbebSnyanmisaka RK_S32 h265e_syntax_fill(void *ctx);
223*437bfbebSnyanmisaka RK_S32 h265e_get_nal_type(H265eSlicParams* sp, RK_S32 frame_type);
224*437bfbebSnyanmisaka 
225*437bfbebSnyanmisaka #ifdef __cplusplus
226*437bfbebSnyanmisaka }
227*437bfbebSnyanmisaka #endif
228*437bfbebSnyanmisaka 
229*437bfbebSnyanmisaka #endif
230