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