blob: f55c381c0a44d601234093a363e00d9112f86aba
1 | /* |
2 | * drivers/amvdec_ports/decoder/aml_hevc_parser.h |
3 | * |
4 | * Copyright (C) 2015 Amlogic, Inc. All rights reserved. |
5 | * |
6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by |
8 | * the Free Software Foundation; either version 2 of the License, or |
9 | * (at your option) any later version. |
10 | * |
11 | * This program is distributed in the hope that it will be useful, but WITHOUT |
12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
14 | * more details. |
15 | * |
16 | */ |
17 | |
18 | |
19 | #ifndef AML_HEVC_PARSER_H |
20 | #define AML_HEVC_PARSER_H |
21 | |
22 | #include "../aml_vcodec_drv.h" |
23 | #include "../utils/common.h" |
24 | |
25 | #define MAX_DPB_SIZE 16 // A.4.1 |
26 | #define MAX_REFS 16 |
27 | |
28 | #define MAX_NB_THREADS 16 |
29 | #define SHIFT_CTB_WPP 2 |
30 | |
31 | /** |
32 | * 7.4.2.1 |
33 | */ |
34 | #define MAX_SUB_LAYERS 7 |
35 | #define MAX_VPS_COUNT 16 |
36 | #define MAX_SPS_COUNT 32 |
37 | #define MAX_PPS_COUNT 256 |
38 | #define MAX_SHORT_TERM_RPS_COUNT 64 |
39 | #define MAX_CU_SIZE 128 |
40 | |
41 | //TODO: check if this is really the maximum |
42 | #define MAX_TRANSFORM_DEPTH 5 |
43 | |
44 | #define MAX_TB_SIZE 32 |
45 | #define MAX_PB_SIZE 64 |
46 | #define MAX_LOG2_CTB_SIZE 6 |
47 | #define MAX_QP 51 |
48 | #define DEFAULT_INTRA_TC_OFFSET 2 |
49 | |
50 | #define HEVC_CONTEXTS 183 |
51 | |
52 | #define MRG_MAX_NUM_CANDS 5 |
53 | |
54 | #define L0 0 |
55 | #define L1 1 |
56 | |
57 | #define EPEL_EXTRA_BEFORE 1 |
58 | #define EPEL_EXTRA_AFTER 2 |
59 | #define EPEL_EXTRA 3 |
60 | |
61 | #define FF_PROFILE_HEVC_MAIN 1 |
62 | #define FF_PROFILE_HEVC_MAIN_10 2 |
63 | #define FF_PROFILE_HEVC_MAIN_STILL_PICTURE 3 |
64 | #define FF_PROFILE_HEVC_REXT 4 |
65 | |
66 | /** |
67 | * Value of the luma sample at position (x, y) in the 2D array tab. |
68 | */ |
69 | #define SAMPLE(tab, x, y) ((tab)[(y) * s->sps->width + (x)]) |
70 | #define SAMPLE_CTB(tab, x, y) ((tab)[(y) * min_cb_width + (x)]) |
71 | #define SAMPLE_CBF(tab, x, y) ((tab)[((y) & ((1<<log2_trafo_size)-1)) * MAX_CU_SIZE + ((x) & ((1<<log2_trafo_size)-1))]) |
72 | |
73 | #define IS_IDR(s) (s->nal_unit_type == NAL_IDR_W_RADL || s->nal_unit_type == NAL_IDR_N_LP) |
74 | #define IS_BLA(s) (s->nal_unit_type == NAL_BLA_W_RADL || s->nal_unit_type == NAL_BLA_W_LP || \ |
75 | s->nal_unit_type == NAL_BLA_N_LP) |
76 | #define IS_IRAP(s) (s->nal_unit_type >= 16 && s->nal_unit_type <= 23) |
77 | |
78 | /** |
79 | * Table 7-3: NAL unit type codes |
80 | */ |
81 | enum HEVCNALUnitType { |
82 | HEVC_NAL_TRAIL_N = 0, |
83 | HEVC_NAL_TRAIL_R = 1, |
84 | HEVC_NAL_TSA_N = 2, |
85 | HEVC_NAL_TSA_R = 3, |
86 | HEVC_NAL_STSA_N = 4, |
87 | HEVC_NAL_STSA_R = 5, |
88 | HEVC_NAL_RADL_N = 6, |
89 | HEVC_NAL_RADL_R = 7, |
90 | HEVC_NAL_RASL_N = 8, |
91 | HEVC_NAL_RASL_R = 9, |
92 | HEVC_NAL_VCL_N10 = 10, |
93 | HEVC_NAL_VCL_R11 = 11, |
94 | HEVC_NAL_VCL_N12 = 12, |
95 | HEVC_NAL_VCL_R13 = 13, |
96 | HEVC_NAL_VCL_N14 = 14, |
97 | HEVC_NAL_VCL_R15 = 15, |
98 | HEVC_NAL_BLA_W_LP = 16, |
99 | HEVC_NAL_BLA_W_RADL = 17, |
100 | HEVC_NAL_BLA_N_LP = 18, |
101 | HEVC_NAL_IDR_W_RADL = 19, |
102 | HEVC_NAL_IDR_N_LP = 20, |
103 | HEVC_NAL_CRA_NUT = 21, |
104 | HEVC_NAL_IRAP_VCL22 = 22, |
105 | HEVC_NAL_IRAP_VCL23 = 23, |
106 | HEVC_NAL_RSV_VCL24 = 24, |
107 | HEVC_NAL_RSV_VCL25 = 25, |
108 | HEVC_NAL_RSV_VCL26 = 26, |
109 | HEVC_NAL_RSV_VCL27 = 27, |
110 | HEVC_NAL_RSV_VCL28 = 28, |
111 | HEVC_NAL_RSV_VCL29 = 29, |
112 | HEVC_NAL_RSV_VCL30 = 30, |
113 | HEVC_NAL_RSV_VCL31 = 31, |
114 | HEVC_NAL_VPS = 32, |
115 | HEVC_NAL_SPS = 33, |
116 | HEVC_NAL_PPS = 34, |
117 | HEVC_NAL_AUD = 35, |
118 | HEVC_NAL_EOS_NUT = 36, |
119 | HEVC_NAL_EOB_NUT = 37, |
120 | HEVC_NAL_FD_NUT = 38, |
121 | HEVC_NAL_SEI_PREFIX = 39, |
122 | HEVC_NAL_SEI_SUFFIX = 40, |
123 | }; |
124 | |
125 | enum HEVCSliceType { |
126 | HEVC_SLICE_B = 0, |
127 | HEVC_SLICE_P = 1, |
128 | HEVC_SLICE_I = 2, |
129 | }; |
130 | |
131 | enum { |
132 | // 7.4.3.1: vps_max_layers_minus1 is in [0, 62]. |
133 | HEVC_MAX_LAYERS = 63, |
134 | // 7.4.3.1: vps_max_sub_layers_minus1 is in [0, 6]. |
135 | HEVC_MAX_SUB_LAYERS = 7, |
136 | // 7.4.3.1: vps_num_layer_sets_minus1 is in [0, 1023]. |
137 | HEVC_MAX_LAYER_SETS = 1024, |
138 | |
139 | // 7.4.2.1: vps_video_parameter_set_id is u(4). |
140 | HEVC_MAX_VPS_COUNT = 16, |
141 | // 7.4.3.2.1: sps_seq_parameter_set_id is in [0, 15]. |
142 | HEVC_MAX_SPS_COUNT = 16, |
143 | // 7.4.3.3.1: pps_pic_parameter_set_id is in [0, 63]. |
144 | HEVC_MAX_PPS_COUNT = 64, |
145 | |
146 | // A.4.2: MaxDpbSize is bounded above by 16. |
147 | HEVC_MAX_DPB_SIZE = 16, |
148 | // 7.4.3.1: vps_max_dec_pic_buffering_minus1[i] is in [0, MaxDpbSize - 1]. |
149 | HEVC_MAX_REFS = HEVC_MAX_DPB_SIZE, |
150 | |
151 | // 7.4.3.2.1: num_short_term_ref_pic_sets is in [0, 64]. |
152 | HEVC_MAX_SHORT_TERM_REF_PIC_SETS = 64, |
153 | // 7.4.3.2.1: num_long_term_ref_pics_sps is in [0, 32]. |
154 | HEVC_MAX_LONG_TERM_REF_PICS = 32, |
155 | |
156 | // A.3: all profiles require that CtbLog2SizeY is in [4, 6]. |
157 | HEVC_MIN_LOG2_CTB_SIZE = 4, |
158 | HEVC_MAX_LOG2_CTB_SIZE = 6, |
159 | |
160 | // E.3.2: cpb_cnt_minus1[i] is in [0, 31]. |
161 | HEVC_MAX_CPB_CNT = 32, |
162 | |
163 | // A.4.1: in table A.6 the highest level allows a MaxLumaPs of 35 651 584. |
164 | HEVC_MAX_LUMA_PS = 35651584, |
165 | // A.4.1: pic_width_in_luma_samples and pic_height_in_luma_samples are |
166 | // constrained to be not greater than sqrt(MaxLumaPs * 8). Hence height/ |
167 | // width are bounded above by sqrt(8 * 35651584) = 16888.2 samples. |
168 | HEVC_MAX_WIDTH = 16888, |
169 | HEVC_MAX_HEIGHT = 16888, |
170 | |
171 | // A.4.1: table A.6 allows at most 22 tile rows for any level. |
172 | HEVC_MAX_TILE_ROWS = 22, |
173 | // A.4.1: table A.6 allows at most 20 tile columns for any level. |
174 | HEVC_MAX_TILE_COLUMNS = 20, |
175 | |
176 | // 7.4.7.1: in the worst case (tiles_enabled_flag and |
177 | // entropy_coding_sync_enabled_flag are both set), entry points can be |
178 | // placed at the beginning of every Ctb row in every tile, giving an |
179 | // upper bound of (num_tile_columns_minus1 + 1) * PicHeightInCtbsY - 1. |
180 | // Only a stream with very high resolution and perverse parameters could |
181 | // get near that, though, so set a lower limit here with the maximum |
182 | // possible value for 4K video (at most 135 16x16 Ctb rows). |
183 | HEVC_MAX_ENTRY_POINT_OFFSETS = HEVC_MAX_TILE_COLUMNS * 135, |
184 | }; |
185 | |
186 | struct ShortTermRPS { |
187 | u32 num_negative_pics; |
188 | int num_delta_pocs; |
189 | int rps_idx_num_delta_pocs; |
190 | int delta_poc[32]; |
191 | u8 used[32]; |
192 | }; |
193 | |
194 | struct LongTermRPS { |
195 | int poc[32]; |
196 | u8 used[32]; |
197 | u8 nb_refs; |
198 | }; |
199 | |
200 | struct SliceHeader { |
201 | u32 pps_id; |
202 | |
203 | ///< address (in raster order) of the first block in the current slice segment |
204 | u32 slice_segment_addr; |
205 | ///< address (in raster order) of the first block in the current slice |
206 | u32 slice_addr; |
207 | |
208 | enum HEVCSliceType slice_type; |
209 | |
210 | int pic_order_cnt_lsb; |
211 | |
212 | u8 first_slice_in_pic_flag; |
213 | u8 dependent_slice_segment_flag; |
214 | u8 pic_output_flag; |
215 | u8 colour_plane_id; |
216 | |
217 | ///< RPS coded in the slice header itself is stored here |
218 | int short_term_ref_pic_set_sps_flag; |
219 | int short_term_ref_pic_set_size; |
220 | struct ShortTermRPS slice_rps; |
221 | const struct ShortTermRPS *short_term_rps; |
222 | int long_term_ref_pic_set_size; |
223 | struct LongTermRPS long_term_rps; |
224 | u32 list_entry_lx[2][32]; |
225 | |
226 | u8 rpl_modification_flag[2]; |
227 | u8 no_output_of_prior_pics_flag; |
228 | u8 slice_temporal_mvp_enabled_flag; |
229 | |
230 | u32 nb_refs[2]; |
231 | |
232 | u8 slice_sample_adaptive_offset_flag[3]; |
233 | u8 mvd_l1_zero_flag; |
234 | |
235 | u8 cabac_init_flag; |
236 | u8 disable_deblocking_filter_flag; ///< slice_header_disable_deblocking_filter_flag |
237 | u8 slice_loop_filter_across_slices_enabled_flag; |
238 | u8 collocated_list; |
239 | |
240 | u32 collocated_ref_idx; |
241 | |
242 | int slice_qp_delta; |
243 | int slice_cb_qp_offset; |
244 | int slice_cr_qp_offset; |
245 | |
246 | u8 cu_chroma_qp_offset_enabled_flag; |
247 | |
248 | int beta_offset; ///< beta_offset_div2 * 2 |
249 | int tc_offset; ///< tc_offset_div2 * 2 |
250 | |
251 | u32 max_num_merge_cand; ///< 5 - 5_minus_max_num_merge_cand |
252 | |
253 | u8 *entry_point_offset; |
254 | int * offset; |
255 | int * size; |
256 | int num_entry_point_offsets; |
257 | |
258 | char slice_qp; |
259 | |
260 | u8 luma_log2_weight_denom; |
261 | s16 chroma_log2_weight_denom; |
262 | |
263 | s16 luma_weight_l0[16]; |
264 | s16 chroma_weight_l0[16][2]; |
265 | s16 chroma_weight_l1[16][2]; |
266 | s16 luma_weight_l1[16]; |
267 | |
268 | s16 luma_offset_l0[16]; |
269 | s16 chroma_offset_l0[16][2]; |
270 | |
271 | s16 luma_offset_l1[16]; |
272 | s16 chroma_offset_l1[16][2]; |
273 | |
274 | int slice_ctb_addr_rs; |
275 | }; |
276 | |
277 | struct HEVCWindow { |
278 | u32 left_offset; |
279 | u32 right_offset; |
280 | u32 top_offset; |
281 | u32 bottom_offset; |
282 | }; |
283 | |
284 | struct VUI { |
285 | struct AVRational sar; |
286 | |
287 | int overscan_info_present_flag; |
288 | int overscan_appropriate_flag; |
289 | |
290 | int video_signal_type_present_flag; |
291 | int video_format; |
292 | int video_full_range_flag; |
293 | int colour_description_present_flag; |
294 | u8 colour_primaries; |
295 | u8 transfer_characteristic; |
296 | u8 matrix_coeffs; |
297 | |
298 | int chroma_loc_info_present_flag; |
299 | int chroma_sample_loc_type_top_field; |
300 | int chroma_sample_loc_type_bottom_field; |
301 | int neutra_chroma_indication_flag; |
302 | |
303 | int field_seq_flag; |
304 | int frame_field_info_present_flag; |
305 | |
306 | int default_display_window_flag; |
307 | struct HEVCWindow def_disp_win; |
308 | |
309 | int vui_timing_info_present_flag; |
310 | u32 vui_num_units_in_tick; |
311 | u32 vui_time_scale; |
312 | int vui_poc_proportional_to_timing_flag; |
313 | int vui_num_ticks_poc_diff_one_minus1; |
314 | int vui_hrd_parameters_present_flag; |
315 | |
316 | int bitstream_restriction_flag; |
317 | int tiles_fixed_structure_flag; |
318 | int motion_vectors_over_pic_boundaries_flag; |
319 | int restricted_ref_pic_lists_flag; |
320 | int min_spatial_segmentation_idc; |
321 | int max_bytes_per_pic_denom; |
322 | int max_bits_per_min_cu_denom; |
323 | int log2_max_mv_length_horizontal; |
324 | int log2_max_mv_length_vertical; |
325 | }; |
326 | |
327 | struct PTLCommon { |
328 | u8 profile_space; |
329 | u8 tier_flag; |
330 | u8 profile_idc; |
331 | u8 profile_compatibility_flag[32]; |
332 | u8 level_idc; |
333 | u8 progressive_source_flag; |
334 | u8 interlaced_source_flag; |
335 | u8 non_packed_constraint_flag; |
336 | u8 frame_only_constraint_flag; |
337 | }; |
338 | |
339 | struct PTL { |
340 | struct PTLCommon general_ptl; |
341 | struct PTLCommon sub_layer_ptl[HEVC_MAX_SUB_LAYERS]; |
342 | |
343 | u8 sub_layer_profile_present_flag[HEVC_MAX_SUB_LAYERS]; |
344 | u8 sub_layer_level_present_flag[HEVC_MAX_SUB_LAYERS]; |
345 | }; |
346 | |
347 | struct h265_VPS_t { |
348 | u8 vps_temporal_id_nesting_flag; |
349 | int vps_max_layers; |
350 | int vps_max_sub_layers; ///< vps_max_temporal_layers_minus1 + 1 |
351 | |
352 | struct PTL ptl; |
353 | int vps_sub_layer_ordering_info_present_flag; |
354 | u32 vps_max_dec_pic_buffering[HEVC_MAX_SUB_LAYERS]; |
355 | u32 vps_num_reorder_pics[HEVC_MAX_SUB_LAYERS]; |
356 | u32 vps_max_latency_increase[HEVC_MAX_SUB_LAYERS]; |
357 | int vps_max_layer_id; |
358 | int vps_num_layer_sets; ///< vps_num_layer_sets_minus1 + 1 |
359 | u8 vps_timing_info_present_flag; |
360 | u32 vps_num_units_in_tick; |
361 | u32 vps_time_scale; |
362 | u8 vps_poc_proportional_to_timing_flag; |
363 | int vps_num_ticks_poc_diff_one; ///< vps_num_ticks_poc_diff_one_minus1 + 1 |
364 | int vps_num_hrd_parameters; |
365 | }; |
366 | |
367 | struct ScalingList { |
368 | /* This is a little wasteful, since sizeID 0 only needs 8 coeffs, |
369 | * and size ID 3 only has 2 arrays, not 6. */ |
370 | u8 sl[4][6][64]; |
371 | u8 sl_dc[2][6]; |
372 | }; |
373 | |
374 | struct h265_SPS_t { |
375 | u8 vps_id; |
376 | u8 sps_id; |
377 | int chroma_format_idc; |
378 | u8 separate_colour_plane_flag; |
379 | |
380 | struct HEVCWindow output_window; |
381 | struct HEVCWindow pic_conf_win; |
382 | |
383 | int bit_depth; |
384 | int bit_depth_chroma; |
385 | int pixel_shift; |
386 | int pix_fmt; |
387 | |
388 | u32 log2_max_poc_lsb; |
389 | int pcm_enabled_flag; |
390 | |
391 | int max_sub_layers; |
392 | struct { |
393 | int max_dec_pic_buffering; |
394 | int num_reorder_pics; |
395 | int max_latency_increase; |
396 | } temporal_layer[HEVC_MAX_SUB_LAYERS]; |
397 | u8 temporal_id_nesting_flag; |
398 | |
399 | struct VUI vui; |
400 | struct PTL ptl; |
401 | |
402 | u8 scaling_list_enable_flag; |
403 | struct ScalingList scaling_list; |
404 | |
405 | u32 nb_st_rps; |
406 | struct ShortTermRPS st_rps[HEVC_MAX_SHORT_TERM_REF_PIC_SETS]; |
407 | |
408 | u8 amp_enabled_flag; |
409 | u8 sao_enabled; |
410 | |
411 | u8 long_term_ref_pics_present_flag; |
412 | u16 lt_ref_pic_poc_lsb_sps[HEVC_MAX_LONG_TERM_REF_PICS]; |
413 | u8 used_by_curr_pic_lt_sps_flag[HEVC_MAX_LONG_TERM_REF_PICS]; |
414 | u8 num_long_term_ref_pics_sps; |
415 | |
416 | struct { |
417 | u8 bit_depth; |
418 | u8 bit_depth_chroma; |
419 | u32 log2_min_pcm_cb_size; |
420 | u32 log2_max_pcm_cb_size; |
421 | u8 loop_filter_disable_flag; |
422 | } pcm; |
423 | u8 sps_temporal_mvp_enabled_flag; |
424 | u8 sps_strong_intra_smoothing_enable_flag; |
425 | |
426 | u32 log2_min_cb_size; |
427 | u32 log2_diff_max_min_coding_block_size; |
428 | u32 log2_min_tb_size; |
429 | u32 log2_max_trafo_size; |
430 | u32 log2_ctb_size; |
431 | u32 log2_min_pu_size; |
432 | |
433 | int max_transform_hierarchy_depth_inter; |
434 | int max_transform_hierarchy_depth_intra; |
435 | |
436 | int sps_range_extension_flag; |
437 | int transform_skip_rotation_enabled_flag; |
438 | int transform_skip_context_enabled_flag; |
439 | int implicit_rdpcm_enabled_flag; |
440 | int explicit_rdpcm_enabled_flag; |
441 | int extended_precision_processing_flag; |
442 | int intra_smoothing_disabled_flag; |
443 | int high_precision_offsets_enabled_flag; |
444 | int persistent_rice_adaptation_enabled_flag; |
445 | int cabac_bypass_alignment_enabled_flag; |
446 | |
447 | ///< coded frame dimension in various units |
448 | int width; |
449 | int height; |
450 | int ctb_width; |
451 | int ctb_height; |
452 | int ctb_size; |
453 | int min_cb_width; |
454 | int min_cb_height; |
455 | int min_tb_width; |
456 | int min_tb_height; |
457 | int min_pu_width; |
458 | int min_pu_height; |
459 | int tb_mask; |
460 | |
461 | int hshift[3]; |
462 | int vshift[3]; |
463 | |
464 | int qp_bd_offset; |
465 | |
466 | u8 data[4096]; |
467 | int data_size; |
468 | }; |
469 | |
470 | struct h265_PPS_t { |
471 | u32 sps_id; ///< seq_parameter_set_id |
472 | |
473 | u8 sign_data_hiding_flag; |
474 | |
475 | u8 cabac_init_present_flag; |
476 | |
477 | int num_ref_idx_l0_default_active; ///< num_ref_idx_l0_default_active_minus1 + 1 |
478 | int num_ref_idx_l1_default_active; ///< num_ref_idx_l1_default_active_minus1 + 1 |
479 | int pic_init_qp_minus26; |
480 | |
481 | u8 constrained_intra_pred_flag; |
482 | u8 transform_skip_enabled_flag; |
483 | |
484 | u8 cu_qp_delta_enabled_flag; |
485 | int diff_cu_qp_delta_depth; |
486 | |
487 | int cb_qp_offset; |
488 | int cr_qp_offset; |
489 | u8 pic_slice_level_chroma_qp_offsets_present_flag; |
490 | u8 weighted_pred_flag; |
491 | u8 weighted_bipred_flag; |
492 | u8 output_flag_present_flag; |
493 | u8 transquant_bypass_enable_flag; |
494 | |
495 | u8 dependent_slice_segments_enabled_flag; |
496 | u8 tiles_enabled_flag; |
497 | u8 entropy_coding_sync_enabled_flag; |
498 | |
499 | int num_tile_columns; ///< num_tile_columns_minus1 + 1 |
500 | int num_tile_rows; ///< num_tile_rows_minus1 + 1 |
501 | u8 uniform_spacing_flag; |
502 | u8 loop_filter_across_tiles_enabled_flag; |
503 | |
504 | u8 seq_loop_filter_across_slices_enabled_flag; |
505 | |
506 | u8 deblocking_filter_control_present_flag; |
507 | u8 deblocking_filter_override_enabled_flag; |
508 | u8 disable_dbf; |
509 | int beta_offset; ///< beta_offset_div2 * 2 |
510 | int tc_offset; ///< tc_offset_div2 * 2 |
511 | |
512 | u8 scaling_list_data_present_flag; |
513 | struct ScalingList scaling_list; |
514 | |
515 | u8 lists_modification_present_flag; |
516 | int log2_parallel_merge_level; ///< log2_parallel_merge_level_minus2 + 2 |
517 | int num_extra_slice_header_bits; |
518 | u8 slice_header_extension_present_flag; |
519 | u8 log2_max_transform_skip_block_size; |
520 | u8 cross_component_prediction_enabled_flag; |
521 | u8 chroma_qp_offset_list_enabled_flag; |
522 | u8 diff_cu_chroma_qp_offset_depth; |
523 | u8 chroma_qp_offset_list_len_minus1; |
524 | char cb_qp_offset_list[6]; |
525 | char cr_qp_offset_list[6]; |
526 | u8 log2_sao_offset_scale_luma; |
527 | u8 log2_sao_offset_scale_chroma; |
528 | |
529 | // Inferred parameters |
530 | u32 *column_width; ///< ColumnWidth |
531 | u32 *row_height; ///< RowHeight |
532 | u32 *col_bd; ///< ColBd |
533 | u32 *row_bd; ///< RowBd |
534 | int *col_idxX; |
535 | |
536 | int *ctb_addr_rs_to_ts; ///< CtbAddrRSToTS |
537 | int *ctb_addr_ts_to_rs; ///< CtbAddrTSToRS |
538 | int *tile_id; ///< TileId |
539 | int *tile_pos_rs; ///< TilePosRS |
540 | int *min_tb_addr_zs; ///< MinTbAddrZS |
541 | int *min_tb_addr_zs_tab;///< MinTbAddrZS |
542 | }; |
543 | |
544 | struct h265_param_sets { |
545 | bool vps_parsed; |
546 | bool sps_parsed; |
547 | bool pps_parsed; |
548 | /* currently active parameter sets */ |
549 | struct h265_VPS_t vps; |
550 | struct h265_SPS_t sps; |
551 | struct h265_PPS_t pps; |
552 | }; |
553 | |
554 | int h265_decode_extradata_ps(u8 *data, int size, struct h265_param_sets *ps); |
555 | |
556 | #endif /* AML_HEVC_PARSER_H */ |
557 | |
558 |