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