xref: /rockchip-linux_mpp/mpp/codec/dec/h265/h265d_parser.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_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