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_parser.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 28*437bfbebSnyanmisaka 29*437bfbebSnyanmisaka #ifndef __H265D_PARSER_H__ 30*437bfbebSnyanmisaka #define __H265D_PARSER_H__ 31*437bfbebSnyanmisaka 32*437bfbebSnyanmisaka #include <limits.h> 33*437bfbebSnyanmisaka #include <string.h> 34*437bfbebSnyanmisaka 35*437bfbebSnyanmisaka #include "mpp_debug.h" 36*437bfbebSnyanmisaka #include "mpp_bitread.h" 37*437bfbebSnyanmisaka #include "mpp_buf_slot.h" 38*437bfbebSnyanmisaka #include "mpp_mem_pool.h" 39*437bfbebSnyanmisaka 40*437bfbebSnyanmisaka #include "hal_dec_task.h" 41*437bfbebSnyanmisaka #include "h265d_codec.h" 42*437bfbebSnyanmisaka #include "h265_syntax.h" 43*437bfbebSnyanmisaka #include "h2645d_sei.h" 44*437bfbebSnyanmisaka 45*437bfbebSnyanmisaka extern RK_U32 h265d_debug; 46*437bfbebSnyanmisaka 47*437bfbebSnyanmisaka #define H265D_DBG_FUNCTION (0x00000001) 48*437bfbebSnyanmisaka #define H265D_DBG_VPS (0x00000002) 49*437bfbebSnyanmisaka #define H265D_DBG_SPS (0x00000004) 50*437bfbebSnyanmisaka #define H265D_DBG_PPS (0x00000008) 51*437bfbebSnyanmisaka #define H265D_DBG_SLICE_HDR (0x00000010) 52*437bfbebSnyanmisaka #define H265D_DBG_SEI (0x00000020) 53*437bfbebSnyanmisaka #define H265D_DBG_GLOBAL (0x00000040) 54*437bfbebSnyanmisaka #define H265D_DBG_REF (0x00000080) 55*437bfbebSnyanmisaka #define H265D_DBG_TIME (0x00000100) 56*437bfbebSnyanmisaka 57*437bfbebSnyanmisaka 58*437bfbebSnyanmisaka #define h265d_dbg(flag, fmt, ...) _mpp_dbg(h265d_debug, flag, fmt, ## __VA_ARGS__) 59*437bfbebSnyanmisaka 60*437bfbebSnyanmisaka #define MAX_FRAME_SIZE 2048000 61*437bfbebSnyanmisaka 62*437bfbebSnyanmisaka typedef struct ShortTermRPS { 63*437bfbebSnyanmisaka RK_U32 num_negative_pics; 64*437bfbebSnyanmisaka RK_S32 num_delta_pocs; 65*437bfbebSnyanmisaka RK_S32 rps_idx_num_delta_pocs; 66*437bfbebSnyanmisaka RK_S32 delta_poc[32]; 67*437bfbebSnyanmisaka RK_U8 used[32]; 68*437bfbebSnyanmisaka } ShortTermRPS; 69*437bfbebSnyanmisaka 70*437bfbebSnyanmisaka typedef struct LongTermRPS { 71*437bfbebSnyanmisaka RK_S32 poc[32]; 72*437bfbebSnyanmisaka RK_U8 used[32]; 73*437bfbebSnyanmisaka RK_U8 nb_refs; 74*437bfbebSnyanmisaka } LongTermRPS; 75*437bfbebSnyanmisaka 76*437bfbebSnyanmisaka typedef struct RefPicList { 77*437bfbebSnyanmisaka struct HEVCFrame *ref[MAX_REFS]; 78*437bfbebSnyanmisaka RK_S32 list[MAX_REFS]; 79*437bfbebSnyanmisaka RK_S32 isLongTerm[MAX_REFS]; 80*437bfbebSnyanmisaka RK_S32 nb_refs; 81*437bfbebSnyanmisaka } RefPicList; 82*437bfbebSnyanmisaka 83*437bfbebSnyanmisaka typedef struct RefPicListTab { 84*437bfbebSnyanmisaka RefPicList refPicList[2]; 85*437bfbebSnyanmisaka } RefPicListTab; 86*437bfbebSnyanmisaka 87*437bfbebSnyanmisaka typedef struct HEVCWindow { 88*437bfbebSnyanmisaka RK_S32 left_offset; 89*437bfbebSnyanmisaka RK_S32 right_offset; 90*437bfbebSnyanmisaka RK_S32 top_offset; 91*437bfbebSnyanmisaka RK_S32 bottom_offset; 92*437bfbebSnyanmisaka } HEVCWindow; 93*437bfbebSnyanmisaka 94*437bfbebSnyanmisaka typedef struct VUI { 95*437bfbebSnyanmisaka MppRational_t sar; 96*437bfbebSnyanmisaka 97*437bfbebSnyanmisaka RK_S32 overscan_info_present_flag; 98*437bfbebSnyanmisaka RK_S32 overscan_appropriate_flag; 99*437bfbebSnyanmisaka 100*437bfbebSnyanmisaka RK_S32 video_signal_type_present_flag; 101*437bfbebSnyanmisaka RK_S32 video_format; 102*437bfbebSnyanmisaka RK_S32 video_full_range_flag; 103*437bfbebSnyanmisaka RK_S32 colour_description_present_flag; 104*437bfbebSnyanmisaka RK_U8 colour_primaries; 105*437bfbebSnyanmisaka RK_U8 transfer_characteristic; 106*437bfbebSnyanmisaka RK_U8 matrix_coeffs; 107*437bfbebSnyanmisaka 108*437bfbebSnyanmisaka RK_S32 chroma_loc_info_present_flag; 109*437bfbebSnyanmisaka RK_S32 chroma_sample_loc_type_top_field; 110*437bfbebSnyanmisaka RK_S32 chroma_sample_loc_type_bottom_field; 111*437bfbebSnyanmisaka RK_S32 neutra_chroma_indication_flag; 112*437bfbebSnyanmisaka 113*437bfbebSnyanmisaka RK_S32 field_seq_flag; 114*437bfbebSnyanmisaka RK_S32 frame_field_info_present_flag; 115*437bfbebSnyanmisaka 116*437bfbebSnyanmisaka RK_S32 default_display_window_flag; 117*437bfbebSnyanmisaka HEVCWindow def_disp_win; 118*437bfbebSnyanmisaka 119*437bfbebSnyanmisaka RK_S32 vui_timing_info_present_flag; 120*437bfbebSnyanmisaka RK_U32 vui_num_units_in_tick; 121*437bfbebSnyanmisaka RK_U32 vui_time_scale; 122*437bfbebSnyanmisaka RK_S32 vui_poc_proportional_to_timing_flag; 123*437bfbebSnyanmisaka RK_S32 vui_num_ticks_poc_diff_one_minus1; 124*437bfbebSnyanmisaka RK_S32 vui_hrd_parameters_present_flag; 125*437bfbebSnyanmisaka 126*437bfbebSnyanmisaka RK_S32 bitstream_restriction_flag; 127*437bfbebSnyanmisaka RK_S32 tiles_fixed_structure_flag; 128*437bfbebSnyanmisaka RK_S32 motion_vectors_over_pic_boundaries_flag; 129*437bfbebSnyanmisaka RK_S32 restricted_ref_pic_lists_flag; 130*437bfbebSnyanmisaka RK_S32 min_spatial_segmentation_idc; 131*437bfbebSnyanmisaka RK_S32 max_bytes_per_pic_denom; 132*437bfbebSnyanmisaka RK_S32 max_bits_per_min_cu_denom; 133*437bfbebSnyanmisaka RK_S32 log2_max_mv_length_horizontal; 134*437bfbebSnyanmisaka RK_S32 log2_max_mv_length_vertical; 135*437bfbebSnyanmisaka } VUI; 136*437bfbebSnyanmisaka 137*437bfbebSnyanmisaka /* ProfileTierLevel */ 138*437bfbebSnyanmisaka typedef struct PTLCommon { 139*437bfbebSnyanmisaka RK_U8 profile_space; 140*437bfbebSnyanmisaka RK_U8 tier_flag; 141*437bfbebSnyanmisaka RK_U8 profile_idc; 142*437bfbebSnyanmisaka RK_U8 profile_compatibility_flag[32]; 143*437bfbebSnyanmisaka RK_U8 level_idc; 144*437bfbebSnyanmisaka 145*437bfbebSnyanmisaka RK_U8 progressive_source_flag; 146*437bfbebSnyanmisaka RK_U8 interlaced_source_flag; 147*437bfbebSnyanmisaka RK_U8 non_packed_constraint_flag; 148*437bfbebSnyanmisaka RK_U8 frame_only_constraint_flag; 149*437bfbebSnyanmisaka 150*437bfbebSnyanmisaka RK_S32 bit_depth_constraint; 151*437bfbebSnyanmisaka H265ChromaFmt chroma_format_constraint; 152*437bfbebSnyanmisaka RK_U8 intra_constraint_flag; 153*437bfbebSnyanmisaka RK_U8 one_picture_only_constraint_flag; 154*437bfbebSnyanmisaka RK_U8 lower_bitrate_constraint_flag; 155*437bfbebSnyanmisaka } PTLCommon; 156*437bfbebSnyanmisaka 157*437bfbebSnyanmisaka typedef struct PTL { 158*437bfbebSnyanmisaka PTLCommon general_ptl; 159*437bfbebSnyanmisaka PTLCommon sub_layer_ptl[MAX_SUB_LAYERS]; 160*437bfbebSnyanmisaka 161*437bfbebSnyanmisaka RK_U8 sub_layer_profile_present_flag[MAX_SUB_LAYERS]; 162*437bfbebSnyanmisaka RK_U8 sub_layer_level_present_flag[MAX_SUB_LAYERS]; 163*437bfbebSnyanmisaka 164*437bfbebSnyanmisaka RK_S32 sub_layer_profile_space[MAX_SUB_LAYERS]; 165*437bfbebSnyanmisaka RK_U8 sub_layer_tier_flag[MAX_SUB_LAYERS]; 166*437bfbebSnyanmisaka RK_S32 sub_layer_profile_idc[MAX_SUB_LAYERS]; 167*437bfbebSnyanmisaka RK_U8 sub_layer_profile_compatibility_flags[MAX_SUB_LAYERS][32]; 168*437bfbebSnyanmisaka RK_S32 sub_layer_level_idc[MAX_SUB_LAYERS]; 169*437bfbebSnyanmisaka } PTL; 170*437bfbebSnyanmisaka 171*437bfbebSnyanmisaka typedef struct HEVCVPS { 172*437bfbebSnyanmisaka RK_U8 vps_temporal_id_nesting_flag; 173*437bfbebSnyanmisaka RK_S32 vps_max_layers; 174*437bfbebSnyanmisaka RK_S32 vps_max_sub_layers; ///< vps_max_temporal_layers_minus1 + 1 175*437bfbebSnyanmisaka 176*437bfbebSnyanmisaka PTL ptl; 177*437bfbebSnyanmisaka RK_S32 vps_sub_layer_ordering_info_present_flag; 178*437bfbebSnyanmisaka RK_U32 vps_max_dec_pic_buffering[MAX_SUB_LAYERS]; 179*437bfbebSnyanmisaka RK_U32 vps_num_reorder_pics[MAX_SUB_LAYERS]; 180*437bfbebSnyanmisaka RK_U32 vps_max_latency_increase[MAX_SUB_LAYERS]; 181*437bfbebSnyanmisaka RK_S32 vps_max_layer_id; 182*437bfbebSnyanmisaka RK_S32 vps_num_layer_sets; ///< vps_num_layer_sets_minus1 + 1 183*437bfbebSnyanmisaka RK_U8 vps_timing_info_present_flag; 184*437bfbebSnyanmisaka RK_U32 vps_num_units_in_tick; 185*437bfbebSnyanmisaka RK_U32 vps_time_scale; 186*437bfbebSnyanmisaka RK_U8 vps_poc_proportional_to_timing_flag; 187*437bfbebSnyanmisaka RK_S32 vps_num_ticks_poc_diff_one; ///< vps_num_ticks_poc_diff_one_minus1 + 1 188*437bfbebSnyanmisaka RK_S32 vps_num_hrd_parameters; 189*437bfbebSnyanmisaka 190*437bfbebSnyanmisaka RK_S32 vps_extension_flag; 191*437bfbebSnyanmisaka 192*437bfbebSnyanmisaka } HEVCVPS; 193*437bfbebSnyanmisaka 194*437bfbebSnyanmisaka typedef struct ScalingList { 195*437bfbebSnyanmisaka /* This is a little wasteful, since sizeID 0 only needs 8 coeffs, 196*437bfbebSnyanmisaka * and size ID 3 only has 2 arrays, not 6. */ 197*437bfbebSnyanmisaka RK_U8 sl[4][6][64]; 198*437bfbebSnyanmisaka RK_U8 sl_dc[2][6]; 199*437bfbebSnyanmisaka } ScalingList; 200*437bfbebSnyanmisaka 201*437bfbebSnyanmisaka typedef struct HEVCSPS { 202*437bfbebSnyanmisaka RK_U32 vps_id; 203*437bfbebSnyanmisaka RK_U32 sps_id; 204*437bfbebSnyanmisaka RK_S32 chroma_format_idc; 205*437bfbebSnyanmisaka RK_U8 separate_colour_plane_flag; 206*437bfbebSnyanmisaka 207*437bfbebSnyanmisaka ///< output (i.e. cropped) values 208*437bfbebSnyanmisaka RK_S32 output_width, output_height; 209*437bfbebSnyanmisaka HEVCWindow output_window; 210*437bfbebSnyanmisaka 211*437bfbebSnyanmisaka HEVCWindow pic_conf_win; 212*437bfbebSnyanmisaka 213*437bfbebSnyanmisaka RK_S32 bit_depth; 214*437bfbebSnyanmisaka RK_S32 bit_depth_chroma;///<- zrh add 215*437bfbebSnyanmisaka RK_S32 pixel_shift; 216*437bfbebSnyanmisaka RK_S32 pix_fmt; 217*437bfbebSnyanmisaka 218*437bfbebSnyanmisaka RK_U32 log2_max_poc_lsb; 219*437bfbebSnyanmisaka RK_S32 pcm_enabled_flag; 220*437bfbebSnyanmisaka 221*437bfbebSnyanmisaka RK_S32 max_sub_layers; 222*437bfbebSnyanmisaka struct { 223*437bfbebSnyanmisaka int max_dec_pic_buffering; 224*437bfbebSnyanmisaka int num_reorder_pics; 225*437bfbebSnyanmisaka int max_latency_increase; 226*437bfbebSnyanmisaka } temporal_layer[MAX_SUB_LAYERS]; 227*437bfbebSnyanmisaka 228*437bfbebSnyanmisaka VUI vui; 229*437bfbebSnyanmisaka PTL ptl; 230*437bfbebSnyanmisaka 231*437bfbebSnyanmisaka RK_U8 scaling_list_enable_flag; 232*437bfbebSnyanmisaka ScalingList scaling_list; 233*437bfbebSnyanmisaka 234*437bfbebSnyanmisaka RK_U32 nb_st_rps; 235*437bfbebSnyanmisaka ShortTermRPS st_rps[MAX_SHORT_TERM_RPS_COUNT]; 236*437bfbebSnyanmisaka 237*437bfbebSnyanmisaka RK_U8 amp_enabled_flag; 238*437bfbebSnyanmisaka RK_U8 sao_enabled; 239*437bfbebSnyanmisaka 240*437bfbebSnyanmisaka RK_U8 long_term_ref_pics_present_flag; 241*437bfbebSnyanmisaka RK_U16 lt_ref_pic_poc_lsb_sps[32]; 242*437bfbebSnyanmisaka RK_U8 used_by_curr_pic_lt_sps_flag[32]; 243*437bfbebSnyanmisaka RK_U8 num_long_term_ref_pics_sps; 244*437bfbebSnyanmisaka 245*437bfbebSnyanmisaka struct { 246*437bfbebSnyanmisaka RK_U8 bit_depth; 247*437bfbebSnyanmisaka RK_U8 bit_depth_chroma; 248*437bfbebSnyanmisaka RK_U32 log2_min_pcm_cb_size; 249*437bfbebSnyanmisaka RK_U32 log2_max_pcm_cb_size; 250*437bfbebSnyanmisaka RK_U8 loop_filter_disable_flag; 251*437bfbebSnyanmisaka } pcm; 252*437bfbebSnyanmisaka RK_U8 sps_temporal_mvp_enabled_flag; 253*437bfbebSnyanmisaka RK_U8 sps_strong_intra_smoothing_enable_flag; 254*437bfbebSnyanmisaka 255*437bfbebSnyanmisaka RK_U32 log2_min_cb_size; 256*437bfbebSnyanmisaka RK_U32 log2_diff_max_min_coding_block_size; 257*437bfbebSnyanmisaka RK_U32 log2_min_tb_size; 258*437bfbebSnyanmisaka RK_U32 log2_max_trafo_size; 259*437bfbebSnyanmisaka RK_S32 log2_ctb_size; 260*437bfbebSnyanmisaka RK_U32 log2_min_pu_size; 261*437bfbebSnyanmisaka 262*437bfbebSnyanmisaka RK_S32 max_transform_hierarchy_depth_inter; 263*437bfbebSnyanmisaka RK_S32 max_transform_hierarchy_depth_intra; 264*437bfbebSnyanmisaka 265*437bfbebSnyanmisaka // SPS extension 266*437bfbebSnyanmisaka RK_S32 sps_extension_flag; 267*437bfbebSnyanmisaka RK_S32 sps_range_extension_flag; 268*437bfbebSnyanmisaka RK_S32 transform_skip_rotation_enabled_flag; 269*437bfbebSnyanmisaka RK_S32 transform_skip_context_enabled_flag; 270*437bfbebSnyanmisaka RK_S32 implicit_rdpcm_enabled_flag; 271*437bfbebSnyanmisaka RK_S32 explicit_rdpcm_enabled_flag; 272*437bfbebSnyanmisaka RK_S32 extended_precision_processing_flag; 273*437bfbebSnyanmisaka RK_S32 intra_smoothing_disabled_flag; 274*437bfbebSnyanmisaka RK_S32 high_precision_offsets_enabled_flag; 275*437bfbebSnyanmisaka RK_S32 persistent_rice_adaptation_enabled_flag; 276*437bfbebSnyanmisaka RK_S32 cabac_bypass_alignment_enabled_flag; 277*437bfbebSnyanmisaka 278*437bfbebSnyanmisaka ///< coded frame dimension in various units 279*437bfbebSnyanmisaka RK_S32 width; 280*437bfbebSnyanmisaka RK_S32 height; 281*437bfbebSnyanmisaka RK_S32 ctb_width; 282*437bfbebSnyanmisaka RK_S32 ctb_height; 283*437bfbebSnyanmisaka RK_S32 ctb_size; 284*437bfbebSnyanmisaka RK_S32 min_cb_width; 285*437bfbebSnyanmisaka RK_S32 min_cb_height; 286*437bfbebSnyanmisaka RK_S32 min_tb_width; 287*437bfbebSnyanmisaka RK_S32 min_tb_height; 288*437bfbebSnyanmisaka RK_S32 min_pu_width; 289*437bfbebSnyanmisaka RK_S32 min_pu_height; 290*437bfbebSnyanmisaka 291*437bfbebSnyanmisaka RK_S32 hshift[3]; 292*437bfbebSnyanmisaka RK_S32 vshift[3]; 293*437bfbebSnyanmisaka 294*437bfbebSnyanmisaka RK_S32 qp_bd_offset; 295*437bfbebSnyanmisaka #ifdef SCALED_REF_LAYER_OFFSETS 296*437bfbebSnyanmisaka HEVCWindow scaled_ref_layer_window; 297*437bfbebSnyanmisaka #endif 298*437bfbebSnyanmisaka #ifdef REF_IDX_MFM 299*437bfbebSnyanmisaka RK_S32 set_mfm_enabled_flag; 300*437bfbebSnyanmisaka #endif 301*437bfbebSnyanmisaka } HEVCSPS; 302*437bfbebSnyanmisaka 303*437bfbebSnyanmisaka typedef struct HevcPpsBufInfo_t { 304*437bfbebSnyanmisaka RK_U32 *column_width; ///< ColumnWidth 305*437bfbebSnyanmisaka RK_U32 *row_height; ///< RowHeight 306*437bfbebSnyanmisaka 307*437bfbebSnyanmisaka RK_S32 column_width_size; 308*437bfbebSnyanmisaka RK_S32 row_height_size; 309*437bfbebSnyanmisaka } HevcPpsBufInfo; 310*437bfbebSnyanmisaka 311*437bfbebSnyanmisaka typedef struct HEVCPPS { 312*437bfbebSnyanmisaka RK_U32 sps_id; 313*437bfbebSnyanmisaka RK_U32 pps_id; 314*437bfbebSnyanmisaka 315*437bfbebSnyanmisaka RK_U8 sign_data_hiding_flag; 316*437bfbebSnyanmisaka 317*437bfbebSnyanmisaka RK_U8 cabac_init_present_flag; 318*437bfbebSnyanmisaka 319*437bfbebSnyanmisaka RK_S32 num_ref_idx_l0_default_active; ///< num_ref_idx_l0_default_active_minus1 + 1 320*437bfbebSnyanmisaka RK_S32 num_ref_idx_l1_default_active; ///< num_ref_idx_l1_default_active_minus1 + 1 321*437bfbebSnyanmisaka RK_S32 pic_init_qp_minus26; 322*437bfbebSnyanmisaka 323*437bfbebSnyanmisaka RK_U8 constrained_intra_pred_flag; 324*437bfbebSnyanmisaka RK_U8 transform_skip_enabled_flag; 325*437bfbebSnyanmisaka 326*437bfbebSnyanmisaka RK_U8 cu_qp_delta_enabled_flag; 327*437bfbebSnyanmisaka RK_S32 diff_cu_qp_delta_depth; 328*437bfbebSnyanmisaka 329*437bfbebSnyanmisaka RK_S32 cb_qp_offset; 330*437bfbebSnyanmisaka RK_S32 cr_qp_offset; 331*437bfbebSnyanmisaka RK_U8 pic_slice_level_chroma_qp_offsets_present_flag; 332*437bfbebSnyanmisaka RK_U8 weighted_pred_flag; 333*437bfbebSnyanmisaka RK_U8 weighted_bipred_flag; 334*437bfbebSnyanmisaka RK_U8 output_flag_present_flag; 335*437bfbebSnyanmisaka RK_U8 transquant_bypass_enable_flag; 336*437bfbebSnyanmisaka 337*437bfbebSnyanmisaka RK_U8 dependent_slice_segments_enabled_flag; 338*437bfbebSnyanmisaka RK_U8 tiles_enabled_flag; 339*437bfbebSnyanmisaka RK_U8 entropy_coding_sync_enabled_flag; 340*437bfbebSnyanmisaka 341*437bfbebSnyanmisaka RK_S32 num_tile_columns; ///< num_tile_columns_minus1 + 1 342*437bfbebSnyanmisaka RK_S32 num_tile_rows; ///< num_tile_rows_minus1 + 1 343*437bfbebSnyanmisaka RK_U8 uniform_spacing_flag; 344*437bfbebSnyanmisaka RK_U8 loop_filter_across_tiles_enabled_flag; 345*437bfbebSnyanmisaka 346*437bfbebSnyanmisaka RK_U8 seq_loop_filter_across_slices_enabled_flag; 347*437bfbebSnyanmisaka 348*437bfbebSnyanmisaka RK_U8 deblocking_filter_control_present_flag; 349*437bfbebSnyanmisaka RK_U8 deblocking_filter_override_enabled_flag; 350*437bfbebSnyanmisaka RK_U8 disable_dbf; 351*437bfbebSnyanmisaka RK_S32 beta_offset; ///< beta_offset_div2 * 2 352*437bfbebSnyanmisaka RK_S32 tc_offset; ///< tc_offset_div2 * 2 353*437bfbebSnyanmisaka 354*437bfbebSnyanmisaka RK_U8 scaling_list_data_present_flag; 355*437bfbebSnyanmisaka ScalingList scaling_list; 356*437bfbebSnyanmisaka 357*437bfbebSnyanmisaka RK_U8 lists_modification_present_flag; 358*437bfbebSnyanmisaka RK_S32 log2_parallel_merge_level; ///< log2_parallel_merge_level_minus2 + 2 359*437bfbebSnyanmisaka RK_S32 num_extra_slice_header_bits; 360*437bfbebSnyanmisaka RK_U8 slice_header_extension_present_flag; 361*437bfbebSnyanmisaka 362*437bfbebSnyanmisaka // PPS extension 363*437bfbebSnyanmisaka RK_U8 pps_extension_flag; 364*437bfbebSnyanmisaka RK_U8 pps_range_extensions_flag; 365*437bfbebSnyanmisaka RK_U8 log2_max_transform_skip_block_size; 366*437bfbebSnyanmisaka RK_U8 cross_component_prediction_enabled_flag; 367*437bfbebSnyanmisaka RK_U8 chroma_qp_offset_list_enabled_flag; 368*437bfbebSnyanmisaka RK_U8 diff_cu_chroma_qp_offset_depth; 369*437bfbebSnyanmisaka RK_U8 chroma_qp_offset_list_len_minus1; 370*437bfbebSnyanmisaka RK_S8 cb_qp_offset_list[6]; 371*437bfbebSnyanmisaka RK_S8 cr_qp_offset_list[6]; 372*437bfbebSnyanmisaka RK_U8 log2_sao_offset_scale_luma; 373*437bfbebSnyanmisaka RK_U8 log2_sao_offset_scale_chroma; 374*437bfbebSnyanmisaka 375*437bfbebSnyanmisaka // Inferred parameters 376*437bfbebSnyanmisaka HevcPpsBufInfo bufs; 377*437bfbebSnyanmisaka } HEVCPPS; 378*437bfbebSnyanmisaka 379*437bfbebSnyanmisaka typedef struct SliceHeader { 380*437bfbebSnyanmisaka RK_U32 pps_id; 381*437bfbebSnyanmisaka 382*437bfbebSnyanmisaka ///< address (in raster order) of the first block in the current slice segment 383*437bfbebSnyanmisaka RK_U32 slice_segment_addr; 384*437bfbebSnyanmisaka ///< address (in raster order) of the first block in the current slice 385*437bfbebSnyanmisaka RK_U32 slice_addr; 386*437bfbebSnyanmisaka 387*437bfbebSnyanmisaka SliceType slice_type; 388*437bfbebSnyanmisaka 389*437bfbebSnyanmisaka RK_S32 pic_order_cnt_lsb; 390*437bfbebSnyanmisaka 391*437bfbebSnyanmisaka RK_U8 first_slice_in_pic_flag; 392*437bfbebSnyanmisaka RK_U8 dependent_slice_segment_flag; 393*437bfbebSnyanmisaka RK_U8 pic_output_flag; 394*437bfbebSnyanmisaka RK_U8 colour_plane_id; 395*437bfbebSnyanmisaka 396*437bfbebSnyanmisaka ///< RPS coded in the slice header itself is stored here 397*437bfbebSnyanmisaka int short_term_ref_pic_set_sps_flag; 398*437bfbebSnyanmisaka int short_term_ref_pic_set_size; 399*437bfbebSnyanmisaka ShortTermRPS slice_rps; 400*437bfbebSnyanmisaka const ShortTermRPS *short_term_rps; 401*437bfbebSnyanmisaka LongTermRPS long_term_rps; 402*437bfbebSnyanmisaka RK_U32 list_entry_lx[2][32]; 403*437bfbebSnyanmisaka 404*437bfbebSnyanmisaka RK_U8 rpl_modification_flag[2]; 405*437bfbebSnyanmisaka RK_U8 no_output_of_prior_pics_flag; 406*437bfbebSnyanmisaka RK_U8 slice_temporal_mvp_enabled_flag; 407*437bfbebSnyanmisaka 408*437bfbebSnyanmisaka RK_U32 nb_refs[2]; 409*437bfbebSnyanmisaka 410*437bfbebSnyanmisaka RK_U8 slice_sample_adaptive_offset_flag[3]; 411*437bfbebSnyanmisaka RK_U8 mvd_l1_zero_flag; 412*437bfbebSnyanmisaka 413*437bfbebSnyanmisaka RK_U8 cabac_init_flag; 414*437bfbebSnyanmisaka RK_U8 disable_deblocking_filter_flag; ///< slice_header_disable_deblocking_filter_flag 415*437bfbebSnyanmisaka RK_U8 slice_loop_filter_across_slices_enabled_flag; 416*437bfbebSnyanmisaka RK_U8 collocated_list; 417*437bfbebSnyanmisaka 418*437bfbebSnyanmisaka RK_U32 collocated_ref_idx; 419*437bfbebSnyanmisaka 420*437bfbebSnyanmisaka RK_S32 slice_qp_delta; 421*437bfbebSnyanmisaka RK_S32 slice_cb_qp_offset; 422*437bfbebSnyanmisaka RK_S32 slice_cr_qp_offset; 423*437bfbebSnyanmisaka 424*437bfbebSnyanmisaka RK_S32 beta_offset; ///< beta_offset_div2 * 2 425*437bfbebSnyanmisaka RK_S32 tc_offset; ///< tc_offset_div2 * 2 426*437bfbebSnyanmisaka 427*437bfbebSnyanmisaka RK_U32 max_num_merge_cand; ///< 5 - 5_minus_max_num_merge_cand 428*437bfbebSnyanmisaka 429*437bfbebSnyanmisaka RK_S32 *entry_point_offset; 430*437bfbebSnyanmisaka RK_S32 * offset; 431*437bfbebSnyanmisaka RK_S32 * size; 432*437bfbebSnyanmisaka RK_S32 num_entry_point_offsets; 433*437bfbebSnyanmisaka 434*437bfbebSnyanmisaka RK_S8 slice_qp; 435*437bfbebSnyanmisaka 436*437bfbebSnyanmisaka RK_U8 luma_log2_weight_denom; 437*437bfbebSnyanmisaka RK_S16 chroma_log2_weight_denom; 438*437bfbebSnyanmisaka 439*437bfbebSnyanmisaka RK_S16 luma_weight_l0[16]; 440*437bfbebSnyanmisaka RK_S16 chroma_weight_l0[16][2]; 441*437bfbebSnyanmisaka RK_S16 chroma_weight_l1[16][2]; 442*437bfbebSnyanmisaka RK_S16 luma_weight_l1[16]; 443*437bfbebSnyanmisaka 444*437bfbebSnyanmisaka RK_S16 luma_offset_l0[16]; 445*437bfbebSnyanmisaka RK_S16 chroma_offset_l0[16][2]; 446*437bfbebSnyanmisaka 447*437bfbebSnyanmisaka RK_S16 luma_offset_l1[16]; 448*437bfbebSnyanmisaka RK_S16 chroma_offset_l1[16][2]; 449*437bfbebSnyanmisaka 450*437bfbebSnyanmisaka #ifdef REF_IDX_FRAMEWORK 451*437bfbebSnyanmisaka RK_S32 inter_layer_pred_enabled_flag; 452*437bfbebSnyanmisaka #endif 453*437bfbebSnyanmisaka 454*437bfbebSnyanmisaka #ifdef JCTVC_M0458_INTERLAYER_RPS_SIG 455*437bfbebSnyanmisaka RK_S32 active_num_ILR_ref_idx; //< Active inter-layer reference pictures 456*437bfbebSnyanmisaka RK_S32 inter_layer_pred_layer_idc[MAX_VPS_LAYER_ID_PLUS1]; 457*437bfbebSnyanmisaka #endif 458*437bfbebSnyanmisaka 459*437bfbebSnyanmisaka RK_S32 slice_ctb_addr_rs; 460*437bfbebSnyanmisaka } SliceHeader; 461*437bfbebSnyanmisaka 462*437bfbebSnyanmisaka typedef struct CurrentFameInf { 463*437bfbebSnyanmisaka HEVCVPS vps[MAX_VPS_COUNT]; 464*437bfbebSnyanmisaka HEVCSPS sps[MAX_SPS_COUNT]; 465*437bfbebSnyanmisaka HEVCPPS pps[MAX_PPS_COUNT]; 466*437bfbebSnyanmisaka SliceHeader sh; 467*437bfbebSnyanmisaka } CurrentFameInf_t; 468*437bfbebSnyanmisaka 469*437bfbebSnyanmisaka typedef struct DBParams { 470*437bfbebSnyanmisaka RK_S32 beta_offset; 471*437bfbebSnyanmisaka RK_S32 tc_offset; 472*437bfbebSnyanmisaka } DBParams; 473*437bfbebSnyanmisaka 474*437bfbebSnyanmisaka #define HEVC_FRAME_FLAG_OUTPUT (1 << 0) 475*437bfbebSnyanmisaka #define HEVC_FRAME_FLAG_SHORT_REF (1 << 1) 476*437bfbebSnyanmisaka #define HEVC_FRAME_FLAG_LONG_REF (1 << 2) 477*437bfbebSnyanmisaka 478*437bfbebSnyanmisaka typedef struct HEVCFrame { 479*437bfbebSnyanmisaka MppFrame frame; 480*437bfbebSnyanmisaka RefPicList *refPicList; 481*437bfbebSnyanmisaka RK_S32 ctb_count; 482*437bfbebSnyanmisaka RK_S32 poc; 483*437bfbebSnyanmisaka struct HEVCFrame *collocated_ref; 484*437bfbebSnyanmisaka 485*437bfbebSnyanmisaka HEVCWindow window; 486*437bfbebSnyanmisaka 487*437bfbebSnyanmisaka /** 488*437bfbebSnyanmisaka * A sequence counter, so that old frames are output first 489*437bfbebSnyanmisaka * after a POC reset 490*437bfbebSnyanmisaka */ 491*437bfbebSnyanmisaka RK_U16 sequence; 492*437bfbebSnyanmisaka 493*437bfbebSnyanmisaka /** 494*437bfbebSnyanmisaka * A combination of HEVC_FRAME_FLAG_* 495*437bfbebSnyanmisaka */ 496*437bfbebSnyanmisaka RK_U8 flags; 497*437bfbebSnyanmisaka RK_S32 slot_index; 498*437bfbebSnyanmisaka RK_U8 error_flag; 499*437bfbebSnyanmisaka } HEVCFrame; 500*437bfbebSnyanmisaka 501*437bfbebSnyanmisaka typedef struct HEVCNAL { 502*437bfbebSnyanmisaka RK_U8 *rbsp_buffer; 503*437bfbebSnyanmisaka RK_S32 rbsp_buffer_size; 504*437bfbebSnyanmisaka RK_S32 size; 505*437bfbebSnyanmisaka const RK_U8 *data; 506*437bfbebSnyanmisaka } HEVCNAL; 507*437bfbebSnyanmisaka 508*437bfbebSnyanmisaka typedef struct HEVCLocalContext { 509*437bfbebSnyanmisaka BitReadCtx_t gb; 510*437bfbebSnyanmisaka } HEVCLocalContext; 511*437bfbebSnyanmisaka 512*437bfbebSnyanmisaka 513*437bfbebSnyanmisaka typedef struct REF_PIC_DEC_INFO { 514*437bfbebSnyanmisaka RK_U8 dpb_index; 515*437bfbebSnyanmisaka RK_U8 is_long_term; 516*437bfbebSnyanmisaka } REF_PIC_DEC_INFO; 517*437bfbebSnyanmisaka 518*437bfbebSnyanmisaka typedef struct HEVCSEIAlternativeTransfer { 519*437bfbebSnyanmisaka RK_S32 present; 520*437bfbebSnyanmisaka RK_S32 preferred_transfer_characteristics; 521*437bfbebSnyanmisaka } HEVCSEIAlternativeTransfer; 522*437bfbebSnyanmisaka 523*437bfbebSnyanmisaka typedef struct HEVCContext { 524*437bfbebSnyanmisaka H265dContext_t *h265dctx; 525*437bfbebSnyanmisaka 526*437bfbebSnyanmisaka HEVCLocalContext *HEVClc; 527*437bfbebSnyanmisaka 528*437bfbebSnyanmisaka MppFrame frame; 529*437bfbebSnyanmisaka 530*437bfbebSnyanmisaka const HEVCVPS *vps; 531*437bfbebSnyanmisaka const HEVCSPS *sps; 532*437bfbebSnyanmisaka const HEVCPPS *pps; 533*437bfbebSnyanmisaka RK_U8 *vps_list[MAX_VPS_COUNT]; 534*437bfbebSnyanmisaka RK_U8 *sps_list[MAX_SPS_COUNT]; 535*437bfbebSnyanmisaka RK_U8 *pps_list[MAX_PPS_COUNT]; 536*437bfbebSnyanmisaka 537*437bfbebSnyanmisaka MppMemPool vps_pool; 538*437bfbebSnyanmisaka MppMemPool sps_pool; 539*437bfbebSnyanmisaka 540*437bfbebSnyanmisaka SliceHeader sh; 541*437bfbebSnyanmisaka 542*437bfbebSnyanmisaka ///< candidate references for the current frame 543*437bfbebSnyanmisaka RefPicList rps[5]; 544*437bfbebSnyanmisaka 545*437bfbebSnyanmisaka enum NALUnitType nal_unit_type; 546*437bfbebSnyanmisaka RK_S32 temporal_id; ///< temporal_id_plus1 - 1 547*437bfbebSnyanmisaka HEVCFrame *ref; 548*437bfbebSnyanmisaka HEVCFrame DPB[MAX_DPB_SIZE]; 549*437bfbebSnyanmisaka RK_S32 poc; 550*437bfbebSnyanmisaka RK_S32 pocTid0; 551*437bfbebSnyanmisaka RK_S32 slice_idx; ///< number of the slice being currently decoded 552*437bfbebSnyanmisaka RK_S32 eos; ///< current packet contains an EOS/EOB NAL 553*437bfbebSnyanmisaka RK_S32 max_ra; 554*437bfbebSnyanmisaka 555*437bfbebSnyanmisaka RK_S32 is_decoded; 556*437bfbebSnyanmisaka 557*437bfbebSnyanmisaka 558*437bfbebSnyanmisaka /** used on BE to byteswap the lines for checksumming */ 559*437bfbebSnyanmisaka RK_U8 *checksum_buf; 560*437bfbebSnyanmisaka RK_S32 checksum_buf_size; 561*437bfbebSnyanmisaka 562*437bfbebSnyanmisaka /** 563*437bfbebSnyanmisaka * Sequence counters for decoded and output frames, so that old 564*437bfbebSnyanmisaka * frames are output first after a POC reset 565*437bfbebSnyanmisaka */ 566*437bfbebSnyanmisaka RK_U16 seq_decode; 567*437bfbebSnyanmisaka RK_U16 seq_output; 568*437bfbebSnyanmisaka 569*437bfbebSnyanmisaka RK_S32 wpp_err; 570*437bfbebSnyanmisaka RK_S32 skipped_bytes; 571*437bfbebSnyanmisaka 572*437bfbebSnyanmisaka RK_U8 *data; 573*437bfbebSnyanmisaka 574*437bfbebSnyanmisaka HEVCNAL *nals; 575*437bfbebSnyanmisaka RK_S32 nb_nals; 576*437bfbebSnyanmisaka RK_S32 nals_allocated; 577*437bfbebSnyanmisaka // type of the first VCL NAL of the current frame 578*437bfbebSnyanmisaka enum NALUnitType first_nal_type; 579*437bfbebSnyanmisaka 580*437bfbebSnyanmisaka RK_U8 context_initialized; 581*437bfbebSnyanmisaka RK_U8 is_nalff; ///< this flag is != 0 if bitstream is encapsulated 582*437bfbebSnyanmisaka ///< as a format defined in 14496-15 583*437bfbebSnyanmisaka RK_S32 temporal_layer_id; 584*437bfbebSnyanmisaka RK_S32 decoder_id; 585*437bfbebSnyanmisaka RK_S32 apply_defdispwin; 586*437bfbebSnyanmisaka 587*437bfbebSnyanmisaka RK_S32 active_seq_parameter_set_id; 588*437bfbebSnyanmisaka 589*437bfbebSnyanmisaka RK_S32 nal_length_size; ///< Number of bytes used for nal length (1, 2 or 4) 590*437bfbebSnyanmisaka RK_S32 nuh_layer_id; 591*437bfbebSnyanmisaka 592*437bfbebSnyanmisaka /** frame packing arrangement variables */ 593*437bfbebSnyanmisaka RK_S32 sei_frame_packing_present; 594*437bfbebSnyanmisaka RK_S32 frame_packing_arrangement_type; 595*437bfbebSnyanmisaka RK_S32 content_interpretation_type; 596*437bfbebSnyanmisaka RK_S32 quincunx_subsampling; 597*437bfbebSnyanmisaka 598*437bfbebSnyanmisaka RK_S32 picture_struct; 599*437bfbebSnyanmisaka 600*437bfbebSnyanmisaka /** 1 if the independent slice segment header was successfully parsed */ 601*437bfbebSnyanmisaka RK_U8 slice_initialized; 602*437bfbebSnyanmisaka 603*437bfbebSnyanmisaka RK_S32 decode_checksum_sei; 604*437bfbebSnyanmisaka 605*437bfbebSnyanmisaka 606*437bfbebSnyanmisaka RK_U8 scaling_list[81][1360]; 607*437bfbebSnyanmisaka RK_U8 scaling_list_listen[81]; 608*437bfbebSnyanmisaka RK_U8 sps_list_of_updated[MAX_SPS_COUNT];///< zrh add 609*437bfbebSnyanmisaka RK_U8 pps_list_of_updated[MAX_PPS_COUNT];///< zrh add 610*437bfbebSnyanmisaka 611*437bfbebSnyanmisaka RK_S32 rps_used[16]; 612*437bfbebSnyanmisaka RK_S32 nb_rps_used; 613*437bfbebSnyanmisaka REF_PIC_DEC_INFO rps_pic_info[600][2][15]; // zrh add 614*437bfbebSnyanmisaka RK_U8 lowdelay_flag[600]; 615*437bfbebSnyanmisaka RK_U8 rps_bit_offset[600]; 616*437bfbebSnyanmisaka RK_U8 rps_bit_offset_st[600]; 617*437bfbebSnyanmisaka RK_U8 slice_nb_rps_poc[600]; 618*437bfbebSnyanmisaka 619*437bfbebSnyanmisaka RK_S32 frame_size; 620*437bfbebSnyanmisaka 621*437bfbebSnyanmisaka RK_S32 framestrid; 622*437bfbebSnyanmisaka 623*437bfbebSnyanmisaka RK_U32 nb_frame; 624*437bfbebSnyanmisaka 625*437bfbebSnyanmisaka RK_U8 output_frame_idx; 626*437bfbebSnyanmisaka 627*437bfbebSnyanmisaka RK_U32 got_frame; 628*437bfbebSnyanmisaka RK_U32 extra_has_frame; 629*437bfbebSnyanmisaka 630*437bfbebSnyanmisaka MppFrameMasteringDisplayMetadata mastering_display; 631*437bfbebSnyanmisaka MppFrameContentLightMetadata content_light; 632*437bfbebSnyanmisaka MppFrameHdrDynamicMeta *hdr_dynamic_meta; 633*437bfbebSnyanmisaka HEVCSEIAlternativeTransfer alternative_transfer; 634*437bfbebSnyanmisaka 635*437bfbebSnyanmisaka MppBufSlots slots; 636*437bfbebSnyanmisaka 637*437bfbebSnyanmisaka MppBufSlots packet_slots; 638*437bfbebSnyanmisaka HalDecTask *task; 639*437bfbebSnyanmisaka 640*437bfbebSnyanmisaka MppPacket input_packet; 641*437bfbebSnyanmisaka void *hal_pic_private; 642*437bfbebSnyanmisaka 643*437bfbebSnyanmisaka RK_S64 pts; 644*437bfbebSnyanmisaka RK_S64 dts; 645*437bfbebSnyanmisaka RK_U8 has_get_eos; 646*437bfbebSnyanmisaka RK_U8 miss_ref_flag; 647*437bfbebSnyanmisaka RK_U8 pre_pps_id; 648*437bfbebSnyanmisaka RK_U8 ps_need_upate; 649*437bfbebSnyanmisaka RK_U8 sps_need_upate; 650*437bfbebSnyanmisaka RK_U8 rps_need_upate; 651*437bfbebSnyanmisaka 652*437bfbebSnyanmisaka /*temporary storage for slice_cut_param*/ 653*437bfbebSnyanmisaka RK_U32 start_bit; 654*437bfbebSnyanmisaka RK_U32 end_bit; 655*437bfbebSnyanmisaka void *pre_pps_data; 656*437bfbebSnyanmisaka RK_S32 pps_len; 657*437bfbebSnyanmisaka RK_S32 pps_buf_size; 658*437bfbebSnyanmisaka RK_S32 first_i_fast_play; 659*437bfbebSnyanmisaka 660*437bfbebSnyanmisaka /* hdr info */ 661*437bfbebSnyanmisaka RK_U32 is_hdr; 662*437bfbebSnyanmisaka RK_U32 hdr_dynamic; 663*437bfbebSnyanmisaka 664*437bfbebSnyanmisaka RK_U32 deny_flag; 665*437bfbebSnyanmisaka RecoveryPoint recovery; 666*437bfbebSnyanmisaka } HEVCContext; 667*437bfbebSnyanmisaka 668*437bfbebSnyanmisaka RK_S32 mpp_hevc_decode_short_term_rps(HEVCContext *s, ShortTermRPS *rps, 669*437bfbebSnyanmisaka const HEVCSPS *sps, RK_S32 is_slice_header); 670*437bfbebSnyanmisaka RK_S32 mpp_hevc_decode_nal_vps(HEVCContext *s); 671*437bfbebSnyanmisaka RK_S32 mpp_hevc_decode_nal_sps(HEVCContext *s); 672*437bfbebSnyanmisaka RK_S32 mpp_hevc_decode_nal_pps(HEVCContext *s); 673*437bfbebSnyanmisaka RK_S32 mpp_hevc_decode_nal_sei(HEVCContext *s); 674*437bfbebSnyanmisaka 675*437bfbebSnyanmisaka RK_S32 mpp_hevc_extract_rbsp(HEVCContext *s, const RK_U8 *src, RK_S32 length, 676*437bfbebSnyanmisaka HEVCNAL *nal); 677*437bfbebSnyanmisaka 678*437bfbebSnyanmisaka 679*437bfbebSnyanmisaka /** 680*437bfbebSnyanmisaka * Mark all frames in DPB as unused for reference. 681*437bfbebSnyanmisaka */ 682*437bfbebSnyanmisaka void mpp_hevc_clear_refs(HEVCContext *s); 683*437bfbebSnyanmisaka 684*437bfbebSnyanmisaka /** 685*437bfbebSnyanmisaka * Drop all frames currently in DPB. 686*437bfbebSnyanmisaka */ 687*437bfbebSnyanmisaka void mpp_hevc_flush_dpb(HEVCContext *s); 688*437bfbebSnyanmisaka 689*437bfbebSnyanmisaka /** 690*437bfbebSnyanmisaka * Compute POC of the current frame and return it. 691*437bfbebSnyanmisaka */ 692*437bfbebSnyanmisaka int mpp_hevc_compute_poc(HEVCContext *s, RK_S32 poc_lsb); 693*437bfbebSnyanmisaka 694*437bfbebSnyanmisaka 695*437bfbebSnyanmisaka /** 696*437bfbebSnyanmisaka * Construct the reference picture sets for the current frame. 697*437bfbebSnyanmisaka */ 698*437bfbebSnyanmisaka RK_S32 mpp_hevc_frame_rps(HEVCContext *s); 699*437bfbebSnyanmisaka 700*437bfbebSnyanmisaka /** 701*437bfbebSnyanmisaka * Construct the reference picture list(s) for the current slice. 702*437bfbebSnyanmisaka */ 703*437bfbebSnyanmisaka RK_S32 mpp_hevc_slice_rpl(HEVCContext *s); 704*437bfbebSnyanmisaka 705*437bfbebSnyanmisaka /** 706*437bfbebSnyanmisaka * Get the number of candidate references for the current frame. 707*437bfbebSnyanmisaka */ 708*437bfbebSnyanmisaka RK_S32 mpp_hevc_frame_nb_refs(HEVCContext *s); 709*437bfbebSnyanmisaka RK_S32 mpp_hevc_set_new_ref(HEVCContext *s, MppFrame *frame, RK_S32 poc); 710*437bfbebSnyanmisaka 711*437bfbebSnyanmisaka /** 712*437bfbebSnyanmisaka * Find next frame in output order and put a reference to it in frame. 713*437bfbebSnyanmisaka * @return 1 if a frame was output, 0 otherwise 714*437bfbebSnyanmisaka */ 715*437bfbebSnyanmisaka void mpp_hevc_unref_frame(HEVCContext *s, HEVCFrame *frame, RK_S32 flags); 716*437bfbebSnyanmisaka 717*437bfbebSnyanmisaka void mpp_hevc_pps_free(RK_U8 *data); 718*437bfbebSnyanmisaka 719*437bfbebSnyanmisaka void mpp_hevc_fill_dynamic_meta(HEVCContext *s, const RK_U8 *data, RK_U32 size, RK_U32 hdr_fmt); 720*437bfbebSnyanmisaka 721*437bfbebSnyanmisaka #endif /* __H265D_PAESER_H__ */ 722