xref: /rockchip-linux_mpp/mpp/codec/dec/av1/av1d_cbs.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka  * Copyright 2021 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 __AV1D_CBS_H__
18*437bfbebSnyanmisaka #define __AV1D_CBS_H__
19*437bfbebSnyanmisaka 
20*437bfbebSnyanmisaka #include "av1.h"
21*437bfbebSnyanmisaka 
22*437bfbebSnyanmisaka typedef struct AV1RawOBUHeader {
23*437bfbebSnyanmisaka     RK_U8 obu_forbidden_bit;
24*437bfbebSnyanmisaka     RK_U8 obu_type;
25*437bfbebSnyanmisaka     RK_U8 obu_extension_flag;
26*437bfbebSnyanmisaka     RK_U8 obu_has_size_field;
27*437bfbebSnyanmisaka     RK_U8 obu_reserved_1bit;
28*437bfbebSnyanmisaka 
29*437bfbebSnyanmisaka     RK_U8 temporal_id;
30*437bfbebSnyanmisaka     RK_U8 spatial_id;
31*437bfbebSnyanmisaka     RK_U8 extension_header_reserved_3bits;
32*437bfbebSnyanmisaka } AV1RawOBUHeader;
33*437bfbebSnyanmisaka 
34*437bfbebSnyanmisaka typedef struct AV1RawColorConfig {
35*437bfbebSnyanmisaka     RK_U8 high_bitdepth;
36*437bfbebSnyanmisaka     RK_U8 twelve_bit;
37*437bfbebSnyanmisaka     RK_U8 mono_chrome;
38*437bfbebSnyanmisaka 
39*437bfbebSnyanmisaka     RK_U8 color_description_present_flag;
40*437bfbebSnyanmisaka     RK_U8 color_primaries;
41*437bfbebSnyanmisaka     RK_U8 transfer_characteristics;
42*437bfbebSnyanmisaka     RK_U8 matrix_coefficients;
43*437bfbebSnyanmisaka 
44*437bfbebSnyanmisaka     RK_U8 color_range;
45*437bfbebSnyanmisaka     RK_U8 subsampling_x;
46*437bfbebSnyanmisaka     RK_U8 subsampling_y;
47*437bfbebSnyanmisaka     RK_U8 chroma_sample_position;
48*437bfbebSnyanmisaka     RK_U8 separate_uv_delta_q;
49*437bfbebSnyanmisaka } AV1RawColorConfig;
50*437bfbebSnyanmisaka 
51*437bfbebSnyanmisaka typedef struct AV1RawTimingInfo {
52*437bfbebSnyanmisaka     RK_U32 num_units_in_display_tick;
53*437bfbebSnyanmisaka     RK_U32 time_scale;
54*437bfbebSnyanmisaka 
55*437bfbebSnyanmisaka     RK_U8 equal_picture_interval;
56*437bfbebSnyanmisaka     RK_U32 num_ticks_per_picture_minus_1;
57*437bfbebSnyanmisaka } AV1RawTimingInfo;
58*437bfbebSnyanmisaka 
59*437bfbebSnyanmisaka typedef struct AV1RawDecoderModelInfo {
60*437bfbebSnyanmisaka     RK_U8  buffer_delay_length_minus_1;
61*437bfbebSnyanmisaka     RK_U32 num_units_in_decoding_tick;
62*437bfbebSnyanmisaka     RK_U8  buffer_removal_time_length_minus_1;
63*437bfbebSnyanmisaka     RK_U8  frame_presentation_time_length_minus_1;
64*437bfbebSnyanmisaka } AV1RawDecoderModelInfo;
65*437bfbebSnyanmisaka 
66*437bfbebSnyanmisaka typedef struct AV1RawSequenceHeader {
67*437bfbebSnyanmisaka     RK_U8 seq_profile;
68*437bfbebSnyanmisaka     RK_U8 still_picture;
69*437bfbebSnyanmisaka     RK_U8 reduced_still_picture_header;
70*437bfbebSnyanmisaka 
71*437bfbebSnyanmisaka     RK_U8 timing_info_present_flag;
72*437bfbebSnyanmisaka     RK_U8 decoder_model_info_present_flag;
73*437bfbebSnyanmisaka     RK_U8 initial_display_delay_present_flag;
74*437bfbebSnyanmisaka     RK_U8 operating_points_cnt_minus_1;
75*437bfbebSnyanmisaka 
76*437bfbebSnyanmisaka     AV1RawTimingInfo       timing_info;
77*437bfbebSnyanmisaka     AV1RawDecoderModelInfo decoder_model_info;
78*437bfbebSnyanmisaka 
79*437bfbebSnyanmisaka     RK_U16 operating_point_idc[AV1_MAX_OPERATING_POINTS];
80*437bfbebSnyanmisaka     RK_U8  seq_level_idx[AV1_MAX_OPERATING_POINTS];
81*437bfbebSnyanmisaka     RK_U8  seq_tier[AV1_MAX_OPERATING_POINTS];
82*437bfbebSnyanmisaka     RK_U8  decoder_model_present_for_this_op[AV1_MAX_OPERATING_POINTS];
83*437bfbebSnyanmisaka     RK_U32 decoder_buffer_delay[AV1_MAX_OPERATING_POINTS];
84*437bfbebSnyanmisaka     RK_U32 encoder_buffer_delay[AV1_MAX_OPERATING_POINTS];
85*437bfbebSnyanmisaka     RK_U8  low_delay_mode_flag[AV1_MAX_OPERATING_POINTS];
86*437bfbebSnyanmisaka     RK_U8  initial_display_delay_present_for_this_op[AV1_MAX_OPERATING_POINTS];
87*437bfbebSnyanmisaka     RK_U8  initial_display_delay_minus_1[AV1_MAX_OPERATING_POINTS];
88*437bfbebSnyanmisaka 
89*437bfbebSnyanmisaka     RK_U8  frame_width_bits_minus_1;
90*437bfbebSnyanmisaka     RK_U8  frame_height_bits_minus_1;
91*437bfbebSnyanmisaka     RK_U16 max_frame_width_minus_1;
92*437bfbebSnyanmisaka     RK_U16 max_frame_height_minus_1;
93*437bfbebSnyanmisaka 
94*437bfbebSnyanmisaka     RK_U8 frame_id_numbers_present_flag;
95*437bfbebSnyanmisaka     RK_U8 delta_frame_id_length_minus_2;
96*437bfbebSnyanmisaka     RK_U8 additional_frame_id_length_minus_1;
97*437bfbebSnyanmisaka 
98*437bfbebSnyanmisaka     RK_U8 use_128x128_superblock;
99*437bfbebSnyanmisaka     RK_U8 enable_filter_intra;
100*437bfbebSnyanmisaka     RK_U8 enable_intra_edge_filter;
101*437bfbebSnyanmisaka     RK_U8 enable_interintra_compound;
102*437bfbebSnyanmisaka     RK_U8 enable_masked_compound;
103*437bfbebSnyanmisaka     RK_U8 enable_warped_motion;
104*437bfbebSnyanmisaka     RK_U8 enable_dual_filter;
105*437bfbebSnyanmisaka 
106*437bfbebSnyanmisaka     RK_U8 enable_order_hint;
107*437bfbebSnyanmisaka     RK_U8 enable_jnt_comp;
108*437bfbebSnyanmisaka     RK_U8 enable_ref_frame_mvs;
109*437bfbebSnyanmisaka 
110*437bfbebSnyanmisaka     RK_U8 seq_choose_screen_content_tools;
111*437bfbebSnyanmisaka     RK_U8 seq_force_screen_content_tools;
112*437bfbebSnyanmisaka     RK_U8 seq_choose_integer_mv;
113*437bfbebSnyanmisaka     RK_U8 seq_force_integer_mv;
114*437bfbebSnyanmisaka 
115*437bfbebSnyanmisaka     RK_U8 order_hint_bits_minus_1;
116*437bfbebSnyanmisaka 
117*437bfbebSnyanmisaka     RK_U8 enable_superres;
118*437bfbebSnyanmisaka     RK_U8 enable_cdef;
119*437bfbebSnyanmisaka     RK_U8 enable_restoration;
120*437bfbebSnyanmisaka 
121*437bfbebSnyanmisaka     AV1RawColorConfig color_config;
122*437bfbebSnyanmisaka 
123*437bfbebSnyanmisaka     RK_U8 film_grain_params_present;
124*437bfbebSnyanmisaka } AV1RawSequenceHeader;
125*437bfbebSnyanmisaka 
126*437bfbebSnyanmisaka typedef struct AV1RawFilmGrainParams {
127*437bfbebSnyanmisaka     RK_U8  apply_grain;
128*437bfbebSnyanmisaka     RK_U16 grain_seed;
129*437bfbebSnyanmisaka     RK_U8  update_grain;
130*437bfbebSnyanmisaka     RK_U8  film_grain_params_ref_idx;
131*437bfbebSnyanmisaka     RK_U8  num_y_points;
132*437bfbebSnyanmisaka     RK_U8  point_y_value[14];
133*437bfbebSnyanmisaka     RK_U8  point_y_scaling[14];
134*437bfbebSnyanmisaka     RK_U8  chroma_scaling_from_luma;
135*437bfbebSnyanmisaka     RK_U8  num_cb_points;
136*437bfbebSnyanmisaka     RK_U8  point_cb_value[10];
137*437bfbebSnyanmisaka     RK_U8  point_cb_scaling[10];
138*437bfbebSnyanmisaka     RK_U8  num_cr_points;
139*437bfbebSnyanmisaka     RK_U8  point_cr_value[10];
140*437bfbebSnyanmisaka     RK_U8  point_cr_scaling[10];
141*437bfbebSnyanmisaka     RK_U8  grain_scaling_minus_8;
142*437bfbebSnyanmisaka     RK_U8  ar_coeff_lag;
143*437bfbebSnyanmisaka     RK_U8  ar_coeffs_y_plus_128[24];
144*437bfbebSnyanmisaka     RK_U8  ar_coeffs_cb_plus_128[25];
145*437bfbebSnyanmisaka     RK_U8  ar_coeffs_cr_plus_128[25];
146*437bfbebSnyanmisaka     RK_U8  ar_coeff_shift_minus_6;
147*437bfbebSnyanmisaka     RK_U8  grain_scale_shift;
148*437bfbebSnyanmisaka     RK_U8  cb_mult;
149*437bfbebSnyanmisaka     RK_U8  cb_luma_mult;
150*437bfbebSnyanmisaka     RK_U16 cb_offset;
151*437bfbebSnyanmisaka     RK_U8  cr_mult;
152*437bfbebSnyanmisaka     RK_U8  cr_luma_mult;
153*437bfbebSnyanmisaka     RK_U16 cr_offset;
154*437bfbebSnyanmisaka     RK_U8  overlap_flag;
155*437bfbebSnyanmisaka     RK_U8  clip_to_restricted_range;
156*437bfbebSnyanmisaka } AV1RawFilmGrainParams;
157*437bfbebSnyanmisaka 
158*437bfbebSnyanmisaka typedef struct AV1RawFrameHeader {
159*437bfbebSnyanmisaka     RK_U8  show_existing_frame;
160*437bfbebSnyanmisaka     RK_U8  frame_to_show_map_idx;
161*437bfbebSnyanmisaka     RK_U32 frame_presentation_time;
162*437bfbebSnyanmisaka     RK_U32 display_frame_id;
163*437bfbebSnyanmisaka 
164*437bfbebSnyanmisaka     RK_U8 frame_type;
165*437bfbebSnyanmisaka     RK_U8 show_frame;
166*437bfbebSnyanmisaka     RK_U8 showable_frame;
167*437bfbebSnyanmisaka 
168*437bfbebSnyanmisaka     RK_U8 error_resilient_mode;
169*437bfbebSnyanmisaka     RK_U8 disable_cdf_update;
170*437bfbebSnyanmisaka     RK_U8 allow_screen_content_tools;
171*437bfbebSnyanmisaka     RK_U8 force_integer_mv;
172*437bfbebSnyanmisaka 
173*437bfbebSnyanmisaka     RK_S32 current_frame_id;
174*437bfbebSnyanmisaka     RK_U8  frame_size_override_flag;
175*437bfbebSnyanmisaka     RK_U8  order_hint;
176*437bfbebSnyanmisaka 
177*437bfbebSnyanmisaka     RK_U8  buffer_removal_time_present_flag;
178*437bfbebSnyanmisaka     RK_U32 buffer_removal_time[AV1_MAX_OPERATING_POINTS];
179*437bfbebSnyanmisaka 
180*437bfbebSnyanmisaka     RK_U8  primary_ref_frame;
181*437bfbebSnyanmisaka     RK_U16 frame_width_minus_1;
182*437bfbebSnyanmisaka     RK_U16 frame_height_minus_1;
183*437bfbebSnyanmisaka     RK_U8  use_superres;
184*437bfbebSnyanmisaka     RK_U8  coded_denom;
185*437bfbebSnyanmisaka     RK_U8  render_and_frame_size_different;
186*437bfbebSnyanmisaka     RK_U16 render_width_minus_1;
187*437bfbebSnyanmisaka     RK_U16 render_height_minus_1;
188*437bfbebSnyanmisaka 
189*437bfbebSnyanmisaka     RK_U8 found_ref[AV1_REFS_PER_FRAME];
190*437bfbebSnyanmisaka 
191*437bfbebSnyanmisaka     RK_U8 refresh_frame_flags;
192*437bfbebSnyanmisaka     RK_U8 allow_intrabc;
193*437bfbebSnyanmisaka     RK_U8 ref_order_hint[AV1_NUM_REF_FRAMES];
194*437bfbebSnyanmisaka     RK_U8 frame_refs_short_signaling;
195*437bfbebSnyanmisaka     RK_U8 last_frame_idx;
196*437bfbebSnyanmisaka     RK_U8 golden_frame_idx;
197*437bfbebSnyanmisaka     RK_U8 ref_frame_valued;
198*437bfbebSnyanmisaka     RK_S8  ref_frame_idx[AV1_REFS_PER_FRAME];
199*437bfbebSnyanmisaka     RK_U32 delta_frame_id_minus1[AV1_REFS_PER_FRAME];
200*437bfbebSnyanmisaka 
201*437bfbebSnyanmisaka     RK_U8 allow_high_precision_mv;
202*437bfbebSnyanmisaka     RK_U8 is_filter_switchable;
203*437bfbebSnyanmisaka     RK_U8 interpolation_filter;
204*437bfbebSnyanmisaka     RK_U8 is_motion_mode_switchable;
205*437bfbebSnyanmisaka     RK_U8 use_ref_frame_mvs;
206*437bfbebSnyanmisaka 
207*437bfbebSnyanmisaka     RK_U8 disable_frame_end_update_cdf;
208*437bfbebSnyanmisaka 
209*437bfbebSnyanmisaka     RK_U8 uniform_tile_spacing_flag;
210*437bfbebSnyanmisaka     RK_U8 tile_cols_log2;
211*437bfbebSnyanmisaka     RK_U8 tile_rows_log2;
212*437bfbebSnyanmisaka     RK_U8 width_in_sbs_minus_1[AV1_MAX_TILE_COLS];
213*437bfbebSnyanmisaka     RK_U8 height_in_sbs_minus_1[AV1_MAX_TILE_ROWS];
214*437bfbebSnyanmisaka     RK_U16 context_update_tile_id;
215*437bfbebSnyanmisaka     RK_U8 tile_size_bytes_minus1;
216*437bfbebSnyanmisaka 
217*437bfbebSnyanmisaka     // These are derived values, but it's very unhelpful to have to
218*437bfbebSnyanmisaka     // recalculate them all the time so we store them here.
219*437bfbebSnyanmisaka     RK_U16 tile_cols;
220*437bfbebSnyanmisaka     RK_U16 tile_rows;
221*437bfbebSnyanmisaka 
222*437bfbebSnyanmisaka     RK_U8 base_q_idx;
223*437bfbebSnyanmisaka     RK_S8  delta_q_y_dc;
224*437bfbebSnyanmisaka     RK_U8 diff_uv_delta;
225*437bfbebSnyanmisaka     RK_S8  delta_q_u_dc;
226*437bfbebSnyanmisaka     RK_S8  delta_q_u_ac;
227*437bfbebSnyanmisaka     RK_S8  delta_q_v_dc;
228*437bfbebSnyanmisaka     RK_S8  delta_q_v_ac;
229*437bfbebSnyanmisaka     RK_U8 using_qmatrix;
230*437bfbebSnyanmisaka     RK_U8 qm_y;
231*437bfbebSnyanmisaka     RK_U8 qm_u;
232*437bfbebSnyanmisaka     RK_U8 qm_v;
233*437bfbebSnyanmisaka 
234*437bfbebSnyanmisaka     RK_U8 segmentation_enabled;
235*437bfbebSnyanmisaka     RK_U8 segmentation_update_map;
236*437bfbebSnyanmisaka     RK_U8 segmentation_temporal_update;
237*437bfbebSnyanmisaka     RK_U8 segmentation_update_data;
238*437bfbebSnyanmisaka     RK_U8 feature_enabled[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];
239*437bfbebSnyanmisaka     RK_S16 feature_value[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];
240*437bfbebSnyanmisaka     RK_U8 segmentation_id_last_active;
241*437bfbebSnyanmisaka     RK_U8 segmentation_id_preskip;
242*437bfbebSnyanmisaka 
243*437bfbebSnyanmisaka     RK_U8 delta_q_present;
244*437bfbebSnyanmisaka     RK_U8 delta_q_res;
245*437bfbebSnyanmisaka     RK_U8 delta_lf_present;
246*437bfbebSnyanmisaka     RK_U8 delta_lf_res;
247*437bfbebSnyanmisaka     RK_U8 delta_lf_multi;
248*437bfbebSnyanmisaka 
249*437bfbebSnyanmisaka     RK_U8 loop_filter_level[4];
250*437bfbebSnyanmisaka     RK_U8 loop_filter_sharpness;
251*437bfbebSnyanmisaka     RK_U8 loop_filter_delta_enabled;
252*437bfbebSnyanmisaka     RK_U8 loop_filter_delta_update;
253*437bfbebSnyanmisaka     RK_U8 update_ref_delta[AV1_TOTAL_REFS_PER_FRAME];
254*437bfbebSnyanmisaka     RK_S8  loop_filter_ref_deltas[AV1_TOTAL_REFS_PER_FRAME];
255*437bfbebSnyanmisaka     RK_U8 update_mode_delta[2];
256*437bfbebSnyanmisaka     RK_S8  loop_filter_mode_deltas[2];
257*437bfbebSnyanmisaka 
258*437bfbebSnyanmisaka     RK_U8 cdef_damping_minus_3;
259*437bfbebSnyanmisaka     RK_U8 cdef_bits;
260*437bfbebSnyanmisaka     RK_U8 cdef_y_pri_strength[8];
261*437bfbebSnyanmisaka     RK_U8 cdef_y_sec_strength[8];
262*437bfbebSnyanmisaka     RK_U8 cdef_uv_pri_strength[8];
263*437bfbebSnyanmisaka     RK_U8 cdef_uv_sec_strength[8];
264*437bfbebSnyanmisaka 
265*437bfbebSnyanmisaka     RK_U8 lr_type[3];
266*437bfbebSnyanmisaka     RK_U8 lr_unit_shift;
267*437bfbebSnyanmisaka     RK_U8 lr_uv_shift;
268*437bfbebSnyanmisaka 
269*437bfbebSnyanmisaka     RK_U8 tx_mode;
270*437bfbebSnyanmisaka     RK_U8 reference_select;
271*437bfbebSnyanmisaka     RK_U8 skip_mode_present;
272*437bfbebSnyanmisaka 
273*437bfbebSnyanmisaka     RK_U8 allow_warped_motion;
274*437bfbebSnyanmisaka     RK_U8 reduced_tx_set;
275*437bfbebSnyanmisaka 
276*437bfbebSnyanmisaka     RK_U8 is_global[AV1_TOTAL_REFS_PER_FRAME];
277*437bfbebSnyanmisaka     RK_U8 is_rot_zoom[AV1_TOTAL_REFS_PER_FRAME];
278*437bfbebSnyanmisaka     RK_U8 is_translation[AV1_TOTAL_REFS_PER_FRAME];
279*437bfbebSnyanmisaka     //AV1RawSubexp gm_params[AV1_TOTAL_REFS_PER_FRAME][6];
280*437bfbebSnyanmisaka     RK_U32 gm_params[AV1_TOTAL_REFS_PER_FRAME][6];
281*437bfbebSnyanmisaka 
282*437bfbebSnyanmisaka     AV1RawFilmGrainParams film_grain;
283*437bfbebSnyanmisaka } AV1RawFrameHeader;
284*437bfbebSnyanmisaka 
285*437bfbebSnyanmisaka typedef struct AV1RawTileData {
286*437bfbebSnyanmisaka     RK_U8   *data;
287*437bfbebSnyanmisaka     size_t  offset;
288*437bfbebSnyanmisaka     size_t  data_size;
289*437bfbebSnyanmisaka } AV1RawTileData;
290*437bfbebSnyanmisaka 
291*437bfbebSnyanmisaka typedef struct AV1RawTileGroup {
292*437bfbebSnyanmisaka     RK_U8  tile_start_and_end_present_flag;
293*437bfbebSnyanmisaka     RK_U8 tg_start;
294*437bfbebSnyanmisaka     RK_U8 tg_end;
295*437bfbebSnyanmisaka 
296*437bfbebSnyanmisaka     AV1RawTileData tile_data;
297*437bfbebSnyanmisaka } AV1RawTileGroup;
298*437bfbebSnyanmisaka 
299*437bfbebSnyanmisaka typedef struct AV1RawFrame {
300*437bfbebSnyanmisaka     AV1RawFrameHeader header;
301*437bfbebSnyanmisaka     AV1RawTileGroup   tile_group;
302*437bfbebSnyanmisaka } AV1RawFrame;
303*437bfbebSnyanmisaka 
304*437bfbebSnyanmisaka typedef struct AV1RawTileList {
305*437bfbebSnyanmisaka     RK_U8 output_frame_width_in_tiles_minus_1;
306*437bfbebSnyanmisaka     RK_U8 output_frame_height_in_tiles_minus_1;
307*437bfbebSnyanmisaka     RK_U8 tile_count_minus_1;
308*437bfbebSnyanmisaka 
309*437bfbebSnyanmisaka     AV1RawTileData tile_data;
310*437bfbebSnyanmisaka } AV1RawTileList;
311*437bfbebSnyanmisaka 
312*437bfbebSnyanmisaka typedef struct AV1RawMetadataHDRCLL {
313*437bfbebSnyanmisaka     RK_U16 max_cll;
314*437bfbebSnyanmisaka     RK_U16 max_fall;
315*437bfbebSnyanmisaka } AV1RawMetadataHDRCLL;
316*437bfbebSnyanmisaka 
317*437bfbebSnyanmisaka typedef struct AV1RawMetadataHDRMDCV {
318*437bfbebSnyanmisaka     RK_U16 primary_chromaticity_x[3];
319*437bfbebSnyanmisaka     RK_U16 primary_chromaticity_y[3];
320*437bfbebSnyanmisaka     RK_U16 white_point_chromaticity_x;
321*437bfbebSnyanmisaka     RK_U16 white_point_chromaticity_y;
322*437bfbebSnyanmisaka     RK_U32 luminance_max;
323*437bfbebSnyanmisaka     RK_U32 luminance_min;
324*437bfbebSnyanmisaka } AV1RawMetadataHDRMDCV;
325*437bfbebSnyanmisaka 
326*437bfbebSnyanmisaka typedef struct AV1RawMetadataScalability {
327*437bfbebSnyanmisaka     RK_U8 scalability_mode_idc;
328*437bfbebSnyanmisaka     RK_U8 spatial_layers_cnt_minus_1;
329*437bfbebSnyanmisaka     RK_U8 spatial_layer_dimensions_present_flag;
330*437bfbebSnyanmisaka     RK_U8 spatial_layer_description_present_flag;
331*437bfbebSnyanmisaka     RK_U8 temporal_group_description_present_flag;
332*437bfbebSnyanmisaka     RK_U8 scalability_structure_reserved_3bits;
333*437bfbebSnyanmisaka     RK_U8 spatial_layer_max_width[4];
334*437bfbebSnyanmisaka     RK_U8 spatial_layer_max_height[4];
335*437bfbebSnyanmisaka     RK_U8 spatial_layer_ref_id[4];
336*437bfbebSnyanmisaka     RK_U8 temporal_group_size;
337*437bfbebSnyanmisaka     RK_U8 temporal_group_temporal_id[255];
338*437bfbebSnyanmisaka     RK_U8 temporal_group_temporal_switching_up_point_flag[255];
339*437bfbebSnyanmisaka     RK_U8 temporal_group_spatial_switching_up_point_flag[255];
340*437bfbebSnyanmisaka     RK_U8 temporal_group_ref_cnt[255];
341*437bfbebSnyanmisaka     RK_U8 temporal_group_ref_pic_diff[255][7];
342*437bfbebSnyanmisaka } AV1RawMetadataScalability;
343*437bfbebSnyanmisaka 
344*437bfbebSnyanmisaka typedef struct AV1RawMetadataITUTT35 {
345*437bfbebSnyanmisaka     RK_U8 itu_t_t35_country_code;
346*437bfbebSnyanmisaka     RK_U8 itu_t_t35_country_code_extension_byte;
347*437bfbebSnyanmisaka     RK_U32 itu_t_t35_terminal_provider_code;
348*437bfbebSnyanmisaka     RK_U32 itu_t_t35_terminal_provider_oriented_code;
349*437bfbebSnyanmisaka 
350*437bfbebSnyanmisaka     RK_U8     *payload;
351*437bfbebSnyanmisaka     size_t     payload_size;
352*437bfbebSnyanmisaka } AV1RawMetadataITUTT35;
353*437bfbebSnyanmisaka 
354*437bfbebSnyanmisaka typedef struct AV1RawMetadataTimecode {
355*437bfbebSnyanmisaka     RK_U8  counting_type;
356*437bfbebSnyanmisaka     RK_U8  full_timestamp_flag;
357*437bfbebSnyanmisaka     RK_U8  discontinuity_flag;
358*437bfbebSnyanmisaka     RK_U8  cnt_dropped_flag;
359*437bfbebSnyanmisaka     RK_U8  n_frames;
360*437bfbebSnyanmisaka     RK_U8  seconds_value;
361*437bfbebSnyanmisaka     RK_U8  minutes_value;
362*437bfbebSnyanmisaka     RK_U8  hours_value;
363*437bfbebSnyanmisaka     RK_U8  seconds_flag;
364*437bfbebSnyanmisaka     RK_U8  minutes_flag;
365*437bfbebSnyanmisaka     RK_U8  hours_flag;
366*437bfbebSnyanmisaka     RK_U8  time_offset_length;
367*437bfbebSnyanmisaka     RK_U32 time_offset_value;
368*437bfbebSnyanmisaka } AV1RawMetadataTimecode;
369*437bfbebSnyanmisaka 
370*437bfbebSnyanmisaka typedef struct AV1RawMetadata {
371*437bfbebSnyanmisaka     RK_U64 metadata_type;
372*437bfbebSnyanmisaka     union {
373*437bfbebSnyanmisaka         AV1RawMetadataHDRCLL      hdr_cll;
374*437bfbebSnyanmisaka         AV1RawMetadataHDRMDCV     hdr_mdcv;
375*437bfbebSnyanmisaka         AV1RawMetadataScalability scalability;
376*437bfbebSnyanmisaka         AV1RawMetadataITUTT35     itut_t35;
377*437bfbebSnyanmisaka         AV1RawMetadataTimecode    timecode;
378*437bfbebSnyanmisaka     } metadata;
379*437bfbebSnyanmisaka } AV1RawMetadata;
380*437bfbebSnyanmisaka 
381*437bfbebSnyanmisaka typedef struct AV1RawPadding {
382*437bfbebSnyanmisaka     RK_U8     *payload;
383*437bfbebSnyanmisaka     size_t       payload_size;
384*437bfbebSnyanmisaka } AV1RawPadding;
385*437bfbebSnyanmisaka 
386*437bfbebSnyanmisaka 
387*437bfbebSnyanmisaka typedef struct AV1RawOBU {
388*437bfbebSnyanmisaka     AV1RawOBUHeader header;
389*437bfbebSnyanmisaka 
390*437bfbebSnyanmisaka     size_t obu_size;
391*437bfbebSnyanmisaka 
392*437bfbebSnyanmisaka     union {
393*437bfbebSnyanmisaka         AV1RawSequenceHeader sequence_header;
394*437bfbebSnyanmisaka         AV1RawFrameHeader    frame_header;
395*437bfbebSnyanmisaka         AV1RawFrame          frame;
396*437bfbebSnyanmisaka         AV1RawTileGroup      tile_group;
397*437bfbebSnyanmisaka         AV1RawTileList       tile_list;
398*437bfbebSnyanmisaka         AV1RawMetadata       metadata;
399*437bfbebSnyanmisaka         AV1RawPadding        padding;
400*437bfbebSnyanmisaka     } obu;
401*437bfbebSnyanmisaka } AV1RawOBU;
402*437bfbebSnyanmisaka 
403*437bfbebSnyanmisaka typedef struct AV1ReferenceFrameState {
404*437bfbebSnyanmisaka     RK_S32 valid;          // RefValid
405*437bfbebSnyanmisaka     RK_S32 frame_id;       // RefFrameId
406*437bfbebSnyanmisaka     RK_S32 upscaled_width; // RefUpscaledWidth
407*437bfbebSnyanmisaka     RK_S32 frame_width;    // RefFrameWidth
408*437bfbebSnyanmisaka     RK_S32 frame_height;   // RefFrameHeight
409*437bfbebSnyanmisaka     RK_S32 render_width;   // RefRenderWidth
410*437bfbebSnyanmisaka     RK_S32 render_height;  // RefRenderHeight
411*437bfbebSnyanmisaka     RK_S32 frame_type;     // RefFrameType
412*437bfbebSnyanmisaka     RK_S32 subsampling_x;  // RefSubsamplingX
413*437bfbebSnyanmisaka     RK_S32 subsampling_y;  // RefSubsamplingY
414*437bfbebSnyanmisaka     RK_S32 bit_depth;      // RefBitDepth
415*437bfbebSnyanmisaka     RK_S32 order_hint;     // RefOrderHint
416*437bfbebSnyanmisaka 
417*437bfbebSnyanmisaka     RK_S8  loop_filter_ref_deltas[AV1_TOTAL_REFS_PER_FRAME];
418*437bfbebSnyanmisaka     RK_S8  loop_filter_mode_deltas[2];
419*437bfbebSnyanmisaka     RK_U8 feature_enabled[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];
420*437bfbebSnyanmisaka     RK_S16 feature_value[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];
421*437bfbebSnyanmisaka } AV1ReferenceFrameState;
422*437bfbebSnyanmisaka 
423*437bfbebSnyanmisaka 
424*437bfbebSnyanmisaka typedef RK_U32 Av1UnitType;
425*437bfbebSnyanmisaka 
426*437bfbebSnyanmisaka typedef struct Av1ObuUnit_t {
427*437bfbebSnyanmisaka     /**
428*437bfbebSnyanmisaka      * Codec-specific type of this unit.
429*437bfbebSnyanmisaka      */
430*437bfbebSnyanmisaka     Av1UnitType type;
431*437bfbebSnyanmisaka 
432*437bfbebSnyanmisaka     /**
433*437bfbebSnyanmisaka      * Pointer to the directly-parsable bitstream form of this unit.
434*437bfbebSnyanmisaka      *
435*437bfbebSnyanmisaka      * May be NULL if the unit currently only exists in decomposed form.
436*437bfbebSnyanmisaka      */
437*437bfbebSnyanmisaka     RK_U8 *data;
438*437bfbebSnyanmisaka 
439*437bfbebSnyanmisaka     size_t   data_size;
440*437bfbebSnyanmisaka 
441*437bfbebSnyanmisaka     void     *content;
442*437bfbebSnyanmisaka } Av1ObuUnit;
443*437bfbebSnyanmisaka 
444*437bfbebSnyanmisaka typedef struct Av1UnitFragment_t {
445*437bfbebSnyanmisaka     RK_U8    *data;
446*437bfbebSnyanmisaka     size_t     data_size;
447*437bfbebSnyanmisaka     int        nb_units;
448*437bfbebSnyanmisaka     int        nb_units_allocated;
449*437bfbebSnyanmisaka     Av1ObuUnit *units;
450*437bfbebSnyanmisaka } Av1UnitFragment;
451*437bfbebSnyanmisaka 
452*437bfbebSnyanmisaka #endif //__AV1D_CBS_H__
453