1*54e60f84SAndroid Build Coastguard Worker /* 2*54e60f84SAndroid Build Coastguard Worker * Copyright (c) 2024 Intel Corporation. All Rights Reserved. 3*54e60f84SAndroid Build Coastguard Worker * 4*54e60f84SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a 5*54e60f84SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the 6*54e60f84SAndroid Build Coastguard Worker * "Software"), to deal in the Software without restriction, including 7*54e60f84SAndroid Build Coastguard Worker * without limitation the rights to use, copy, modify, merge, publish, 8*54e60f84SAndroid Build Coastguard Worker * distribute, sub license, and/or sell copies of the Software, and to 9*54e60f84SAndroid Build Coastguard Worker * permit persons to whom the Software is furnished to do so, subject to 10*54e60f84SAndroid Build Coastguard Worker * the following conditions: 11*54e60f84SAndroid Build Coastguard Worker * 12*54e60f84SAndroid Build Coastguard Worker * The above copyright notice and this permission notice (including the 13*54e60f84SAndroid Build Coastguard Worker * next paragraph) shall be included in all copies or substantial portions 14*54e60f84SAndroid Build Coastguard Worker * of the Software. 15*54e60f84SAndroid Build Coastguard Worker * 16*54e60f84SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 17*54e60f84SAndroid Build Coastguard Worker * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18*54e60f84SAndroid Build Coastguard Worker * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 19*54e60f84SAndroid Build Coastguard Worker * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR 20*54e60f84SAndroid Build Coastguard Worker * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21*54e60f84SAndroid Build Coastguard Worker * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22*54e60f84SAndroid Build Coastguard Worker * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23*54e60f84SAndroid Build Coastguard Worker */ 24*54e60f84SAndroid Build Coastguard Worker 25*54e60f84SAndroid Build Coastguard Worker /** 26*54e60f84SAndroid Build Coastguard Worker * \file va_dec_vvc.h 27*54e60f84SAndroid Build Coastguard Worker * \brief The VVC decoding API 28*54e60f84SAndroid Build Coastguard Worker * 29*54e60f84SAndroid Build Coastguard Worker * This file contains the \ref api_dec_vvc "VVC decoding API". 30*54e60f84SAndroid Build Coastguard Worker */ 31*54e60f84SAndroid Build Coastguard Worker 32*54e60f84SAndroid Build Coastguard Worker #ifndef VA_DEC_VVC_H 33*54e60f84SAndroid Build Coastguard Worker #define VA_DEC_VVC_H 34*54e60f84SAndroid Build Coastguard Worker 35*54e60f84SAndroid Build Coastguard Worker #include <stdint.h> 36*54e60f84SAndroid Build Coastguard Worker 37*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus 38*54e60f84SAndroid Build Coastguard Worker extern "C" { 39*54e60f84SAndroid Build Coastguard Worker #endif 40*54e60f84SAndroid Build Coastguard Worker 41*54e60f84SAndroid Build Coastguard Worker /** 42*54e60f84SAndroid Build Coastguard Worker * \defgroup api_dec_vvc VVC decoding API 43*54e60f84SAndroid Build Coastguard Worker * 44*54e60f84SAndroid Build Coastguard Worker * This VVC decoding API supports Main 10 profile and Multilayer Main 10 profile. 45*54e60f84SAndroid Build Coastguard Worker * And it supports only long slice format. 46*54e60f84SAndroid Build Coastguard Worker * 47*54e60f84SAndroid Build Coastguard Worker * @{ 48*54e60f84SAndroid Build Coastguard Worker */ 49*54e60f84SAndroid Build Coastguard Worker 50*54e60f84SAndroid Build Coastguard Worker /** 51*54e60f84SAndroid Build Coastguard Worker * \brief Weighted Prediction Parameters. 52*54e60f84SAndroid Build Coastguard Worker */ 53*54e60f84SAndroid Build Coastguard Worker typedef struct _VAWeightedPredInfo { 54*54e60f84SAndroid Build Coastguard Worker /** \brief Weighted Prediction parameters. 55*54e60f84SAndroid Build Coastguard Worker * All the parameters except reserved bytes are VVC syntax. 56*54e60f84SAndroid Build Coastguard Worker */ 57*54e60f84SAndroid Build Coastguard Worker uint8_t luma_log2_weight_denom; 58*54e60f84SAndroid Build Coastguard Worker int8_t delta_chroma_log2_weight_denom; 59*54e60f84SAndroid Build Coastguard Worker uint8_t num_l0_weights; 60*54e60f84SAndroid Build Coastguard Worker uint8_t luma_weight_l0_flag[15]; 61*54e60f84SAndroid Build Coastguard Worker uint8_t chroma_weight_l0_flag[15]; 62*54e60f84SAndroid Build Coastguard Worker int8_t delta_luma_weight_l0[15]; 63*54e60f84SAndroid Build Coastguard Worker int8_t luma_offset_l0[15]; 64*54e60f84SAndroid Build Coastguard Worker int8_t delta_chroma_weight_l0[15][2]; 65*54e60f84SAndroid Build Coastguard Worker int16_t delta_chroma_offset_l0[15][2]; 66*54e60f84SAndroid Build Coastguard Worker uint8_t num_l1_weights; 67*54e60f84SAndroid Build Coastguard Worker uint8_t luma_weight_l1_flag[15]; 68*54e60f84SAndroid Build Coastguard Worker uint8_t chroma_weight_l1_flag[15]; 69*54e60f84SAndroid Build Coastguard Worker int8_t delta_luma_weight_l1[15]; 70*54e60f84SAndroid Build Coastguard Worker int8_t luma_offset_l1[15]; 71*54e60f84SAndroid Build Coastguard Worker int8_t delta_chroma_weight_l1[15][2]; 72*54e60f84SAndroid Build Coastguard Worker int16_t delta_chroma_offset_l1[15][2]; 73*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved for future use, must be zero */ 74*54e60f84SAndroid Build Coastguard Worker uint16_t reserved16b; 75*54e60f84SAndroid Build Coastguard Worker uint32_t reserved32b; 76*54e60f84SAndroid Build Coastguard Worker } VAWeightedPredInfo; 77*54e60f84SAndroid Build Coastguard Worker 78*54e60f84SAndroid Build Coastguard Worker /** 79*54e60f84SAndroid Build Coastguard Worker * \brief VVC Decoding Picture Parameter Buffer Structure 80*54e60f84SAndroid Build Coastguard Worker * 81*54e60f84SAndroid Build Coastguard Worker * This structure conveys picture level parameters and should be sent once 82*54e60f84SAndroid Build Coastguard Worker * per frame. 83*54e60f84SAndroid Build Coastguard Worker * 84*54e60f84SAndroid Build Coastguard Worker * Host decoder is required to send in a buffer of VAPictureParameterBufferVVC 85*54e60f84SAndroid Build Coastguard Worker * as the first va buffer for each frame. 86*54e60f84SAndroid Build Coastguard Worker * 87*54e60f84SAndroid Build Coastguard Worker */ 88*54e60f84SAndroid Build Coastguard Worker typedef struct _VAPictureParameterBufferVVC { 89*54e60f84SAndroid Build Coastguard Worker /** \brief buffer description of decoded current picture 90*54e60f84SAndroid Build Coastguard Worker */ 91*54e60f84SAndroid Build Coastguard Worker VAPictureVVC CurrPic; 92*54e60f84SAndroid Build Coastguard Worker /** \brief buffer description of reference frames in DPB */ 93*54e60f84SAndroid Build Coastguard Worker VAPictureVVC ReferenceFrames[15]; 94*54e60f84SAndroid Build Coastguard Worker /** \brief picture width, shall be integer multiple of Max(8, MinCbSizeY). */ 95*54e60f84SAndroid Build Coastguard Worker uint16_t pps_pic_width_in_luma_samples; 96*54e60f84SAndroid Build Coastguard Worker /** \brief picture height, shall be integer multiple of Max(8, MinCbSizeY). */ 97*54e60f84SAndroid Build Coastguard Worker uint16_t pps_pic_height_in_luma_samples; 98*54e60f84SAndroid Build Coastguard Worker 99*54e60f84SAndroid Build Coastguard Worker /** \brief sequence level parameters. 100*54e60f84SAndroid Build Coastguard Worker * All the parameters except reserved bytes are VVC syntax or spec variables. 101*54e60f84SAndroid Build Coastguard Worker */ 102*54e60f84SAndroid Build Coastguard Worker uint16_t sps_num_subpics_minus1; 103*54e60f84SAndroid Build Coastguard Worker uint8_t sps_chroma_format_idc; 104*54e60f84SAndroid Build Coastguard Worker uint8_t sps_bitdepth_minus8; 105*54e60f84SAndroid Build Coastguard Worker uint8_t sps_log2_ctu_size_minus5; 106*54e60f84SAndroid Build Coastguard Worker uint8_t sps_log2_min_luma_coding_block_size_minus2; 107*54e60f84SAndroid Build Coastguard Worker uint8_t sps_log2_transform_skip_max_size_minus2; 108*54e60f84SAndroid Build Coastguard Worker /** \brief chroma QP mapping table. 109*54e60f84SAndroid Build Coastguard Worker * ChromaQpTable[][] corresponds to VVC spec variable with the same name. 110*54e60f84SAndroid Build Coastguard Worker * It is derived according to formula (57) in VVC spec section 7.4.3.4. 111*54e60f84SAndroid Build Coastguard Worker */ 112*54e60f84SAndroid Build Coastguard Worker int8_t ChromaQpTable[3][111]; 113*54e60f84SAndroid Build Coastguard Worker uint8_t sps_six_minus_max_num_merge_cand; 114*54e60f84SAndroid Build Coastguard Worker uint8_t sps_five_minus_max_num_subblock_merge_cand; 115*54e60f84SAndroid Build Coastguard Worker uint8_t sps_max_num_merge_cand_minus_max_num_gpm_cand; 116*54e60f84SAndroid Build Coastguard Worker uint8_t sps_log2_parallel_merge_level_minus2; 117*54e60f84SAndroid Build Coastguard Worker uint8_t sps_min_qp_prime_ts; 118*54e60f84SAndroid Build Coastguard Worker uint8_t sps_six_minus_max_num_ibc_merge_cand; 119*54e60f84SAndroid Build Coastguard Worker uint8_t sps_num_ladf_intervals_minus2; 120*54e60f84SAndroid Build Coastguard Worker int8_t sps_ladf_lowest_interval_qp_offset; 121*54e60f84SAndroid Build Coastguard Worker int8_t sps_ladf_qp_offset[4]; 122*54e60f84SAndroid Build Coastguard Worker uint16_t sps_ladf_delta_threshold_minus1[4]; 123*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved for future use, must be zero */ 124*54e60f84SAndroid Build Coastguard Worker uint32_t reserved32b01[VA_PADDING_LOW - 2]; 125*54e60f84SAndroid Build Coastguard Worker 126*54e60f84SAndroid Build Coastguard Worker union { 127*54e60f84SAndroid Build Coastguard Worker struct { 128*54e60f84SAndroid Build Coastguard Worker uint64_t sps_subpic_info_present_flag : 1; 129*54e60f84SAndroid Build Coastguard Worker uint64_t sps_independent_subpics_flag : 1; 130*54e60f84SAndroid Build Coastguard Worker uint64_t sps_subpic_same_size_flag : 1; 131*54e60f84SAndroid Build Coastguard Worker uint64_t sps_entropy_coding_sync_enabled_flag : 1; 132*54e60f84SAndroid Build Coastguard Worker uint64_t sps_qtbtt_dual_tree_intra_flag : 1; 133*54e60f84SAndroid Build Coastguard Worker uint64_t sps_max_luma_transform_size_64_flag : 1; 134*54e60f84SAndroid Build Coastguard Worker uint64_t sps_transform_skip_enabled_flag : 1; 135*54e60f84SAndroid Build Coastguard Worker uint64_t sps_bdpcm_enabled_flag : 1; 136*54e60f84SAndroid Build Coastguard Worker uint64_t sps_mts_enabled_flag : 1; 137*54e60f84SAndroid Build Coastguard Worker uint64_t sps_explicit_mts_intra_enabled_flag : 1; 138*54e60f84SAndroid Build Coastguard Worker uint64_t sps_explicit_mts_inter_enabled_flag : 1; 139*54e60f84SAndroid Build Coastguard Worker uint64_t sps_lfnst_enabled_flag : 1; 140*54e60f84SAndroid Build Coastguard Worker uint64_t sps_joint_cbcr_enabled_flag : 1; 141*54e60f84SAndroid Build Coastguard Worker uint64_t sps_same_qp_table_for_chroma_flag : 1; 142*54e60f84SAndroid Build Coastguard Worker uint64_t sps_sao_enabled_flag : 1; 143*54e60f84SAndroid Build Coastguard Worker uint64_t sps_alf_enabled_flag : 1; 144*54e60f84SAndroid Build Coastguard Worker uint64_t sps_ccalf_enabled_flag : 1; 145*54e60f84SAndroid Build Coastguard Worker uint64_t sps_lmcs_enabled_flag : 1; 146*54e60f84SAndroid Build Coastguard Worker uint64_t sps_sbtmvp_enabled_flag : 1; 147*54e60f84SAndroid Build Coastguard Worker uint64_t sps_amvr_enabled_flag : 1; 148*54e60f84SAndroid Build Coastguard Worker uint64_t sps_smvd_enabled_flag : 1; 149*54e60f84SAndroid Build Coastguard Worker uint64_t sps_mmvd_enabled_flag : 1; 150*54e60f84SAndroid Build Coastguard Worker uint64_t sps_sbt_enabled_flag : 1; 151*54e60f84SAndroid Build Coastguard Worker uint64_t sps_affine_enabled_flag : 1; 152*54e60f84SAndroid Build Coastguard Worker uint64_t sps_6param_affine_enabled_flag : 1; 153*54e60f84SAndroid Build Coastguard Worker uint64_t sps_affine_amvr_enabled_flag : 1; 154*54e60f84SAndroid Build Coastguard Worker uint64_t sps_affine_prof_enabled_flag : 1; 155*54e60f84SAndroid Build Coastguard Worker uint64_t sps_bcw_enabled_flag : 1; 156*54e60f84SAndroid Build Coastguard Worker uint64_t sps_ciip_enabled_flag : 1; 157*54e60f84SAndroid Build Coastguard Worker uint64_t sps_gpm_enabled_flag : 1; 158*54e60f84SAndroid Build Coastguard Worker uint64_t sps_isp_enabled_flag : 1; 159*54e60f84SAndroid Build Coastguard Worker uint64_t sps_mrl_enabled_flag : 1; 160*54e60f84SAndroid Build Coastguard Worker uint64_t sps_mip_enabled_flag : 1; 161*54e60f84SAndroid Build Coastguard Worker uint64_t sps_cclm_enabled_flag : 1; 162*54e60f84SAndroid Build Coastguard Worker uint64_t sps_chroma_horizontal_collocated_flag : 1; 163*54e60f84SAndroid Build Coastguard Worker uint64_t sps_chroma_vertical_collocated_flag : 1; 164*54e60f84SAndroid Build Coastguard Worker uint64_t sps_palette_enabled_flag : 1; 165*54e60f84SAndroid Build Coastguard Worker uint64_t sps_act_enabled_flag : 1; 166*54e60f84SAndroid Build Coastguard Worker uint64_t sps_ibc_enabled_flag : 1; 167*54e60f84SAndroid Build Coastguard Worker uint64_t sps_ladf_enabled_flag : 1; 168*54e60f84SAndroid Build Coastguard Worker uint64_t sps_explicit_scaling_list_enabled_flag : 1; 169*54e60f84SAndroid Build Coastguard Worker uint64_t sps_scaling_matrix_for_lfnst_disabled_flag : 1; 170*54e60f84SAndroid Build Coastguard Worker uint64_t sps_scaling_matrix_for_alternative_colour_space_disabled_flag : 1; 171*54e60f84SAndroid Build Coastguard Worker uint64_t sps_scaling_matrix_designated_colour_space_flag : 1; 172*54e60f84SAndroid Build Coastguard Worker uint64_t sps_virtual_boundaries_enabled_flag : 1; 173*54e60f84SAndroid Build Coastguard Worker uint64_t sps_virtual_boundaries_present_flag : 1; 174*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved for future use, must be zero */ 175*54e60f84SAndroid Build Coastguard Worker uint64_t reserved : 18; 176*54e60f84SAndroid Build Coastguard Worker } bits; 177*54e60f84SAndroid Build Coastguard Worker uint64_t value; 178*54e60f84SAndroid Build Coastguard Worker } sps_flags; 179*54e60f84SAndroid Build Coastguard Worker 180*54e60f84SAndroid Build Coastguard Worker /** \brief picture level parameters. 181*54e60f84SAndroid Build Coastguard Worker * All the parameters except reserved bytes are VVC syntax or spec variables. 182*54e60f84SAndroid Build Coastguard Worker */ 183*54e60f84SAndroid Build Coastguard Worker /** \brief number of vertical virtual boundaries on the picture. 184*54e60f84SAndroid Build Coastguard Worker * NumVerVirtualBoundaries corresponds to VVC spec variable with the same name. 185*54e60f84SAndroid Build Coastguard Worker * It is derived according to formula (78) in VVC spec section 7.4.3.8. 186*54e60f84SAndroid Build Coastguard Worker */ 187*54e60f84SAndroid Build Coastguard Worker uint8_t NumVerVirtualBoundaries; 188*54e60f84SAndroid Build Coastguard Worker /** \brief number of horizontal virtual boundaries on the picture. 189*54e60f84SAndroid Build Coastguard Worker * NumHorVirtualBoundaries corresponds to VVC spec variable with the same name. 190*54e60f84SAndroid Build Coastguard Worker * It is derived according to formula (80) in VVC spec section 7.4.3.8. 191*54e60f84SAndroid Build Coastguard Worker */ 192*54e60f84SAndroid Build Coastguard Worker uint8_t NumHorVirtualBoundaries; 193*54e60f84SAndroid Build Coastguard Worker /** \brief location of the vertical virtual boundary in units of luma samples. 194*54e60f84SAndroid Build Coastguard Worker * VirtualBoundaryPosX[] corresponds to VVC spec variable with the same name. 195*54e60f84SAndroid Build Coastguard Worker * It is derived according to formula (79) in VVC spec section 7.4.3.8. 196*54e60f84SAndroid Build Coastguard Worker */ 197*54e60f84SAndroid Build Coastguard Worker uint16_t VirtualBoundaryPosX[3]; 198*54e60f84SAndroid Build Coastguard Worker /** \brief location of the horizontal virtual boundary in units of luma samples. 199*54e60f84SAndroid Build Coastguard Worker * VirtualBoundaryPosY[] corresponds to VVC spec variable with the same name. 200*54e60f84SAndroid Build Coastguard Worker * It is derived according to formula (81) in VVC spec section 7.4.3.8. 201*54e60f84SAndroid Build Coastguard Worker */ 202*54e60f84SAndroid Build Coastguard Worker uint16_t VirtualBoundaryPosY[3]; 203*54e60f84SAndroid Build Coastguard Worker 204*54e60f84SAndroid Build Coastguard Worker int32_t pps_scaling_win_left_offset; 205*54e60f84SAndroid Build Coastguard Worker int32_t pps_scaling_win_right_offset; 206*54e60f84SAndroid Build Coastguard Worker int32_t pps_scaling_win_top_offset; 207*54e60f84SAndroid Build Coastguard Worker int32_t pps_scaling_win_bottom_offset; 208*54e60f84SAndroid Build Coastguard Worker 209*54e60f84SAndroid Build Coastguard Worker int8_t pps_num_exp_tile_columns_minus1; 210*54e60f84SAndroid Build Coastguard Worker uint16_t pps_num_exp_tile_rows_minus1; 211*54e60f84SAndroid Build Coastguard Worker uint16_t pps_num_slices_in_pic_minus1; 212*54e60f84SAndroid Build Coastguard Worker uint16_t pps_pic_width_minus_wraparound_offset; 213*54e60f84SAndroid Build Coastguard Worker int8_t pps_cb_qp_offset; 214*54e60f84SAndroid Build Coastguard Worker int8_t pps_cr_qp_offset; 215*54e60f84SAndroid Build Coastguard Worker int8_t pps_joint_cbcr_qp_offset_value; 216*54e60f84SAndroid Build Coastguard Worker uint8_t pps_chroma_qp_offset_list_len_minus1; 217*54e60f84SAndroid Build Coastguard Worker int8_t pps_cb_qp_offset_list[6]; 218*54e60f84SAndroid Build Coastguard Worker int8_t pps_cr_qp_offset_list[6]; 219*54e60f84SAndroid Build Coastguard Worker int8_t pps_joint_cbcr_qp_offset_list[6]; 220*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved for future use, must be zero */ 221*54e60f84SAndroid Build Coastguard Worker uint16_t reserved16b01; 222*54e60f84SAndroid Build Coastguard Worker uint32_t reserved32b02[VA_PADDING_LOW - 2]; 223*54e60f84SAndroid Build Coastguard Worker 224*54e60f84SAndroid Build Coastguard Worker union { 225*54e60f84SAndroid Build Coastguard Worker struct { 226*54e60f84SAndroid Build Coastguard Worker uint32_t pps_loop_filter_across_tiles_enabled_flag : 1; 227*54e60f84SAndroid Build Coastguard Worker uint32_t pps_rect_slice_flag : 1; 228*54e60f84SAndroid Build Coastguard Worker uint32_t pps_single_slice_per_subpic_flag : 1; 229*54e60f84SAndroid Build Coastguard Worker uint32_t pps_loop_filter_across_slices_enabled_flag : 1; 230*54e60f84SAndroid Build Coastguard Worker uint32_t pps_weighted_pred_flag : 1; 231*54e60f84SAndroid Build Coastguard Worker uint32_t pps_weighted_bipred_flag : 1; 232*54e60f84SAndroid Build Coastguard Worker uint32_t pps_ref_wraparound_enabled_flag : 1; 233*54e60f84SAndroid Build Coastguard Worker uint32_t pps_cu_qp_delta_enabled_flag : 1; 234*54e60f84SAndroid Build Coastguard Worker uint32_t pps_cu_chroma_qp_offset_list_enabled_flag : 1; 235*54e60f84SAndroid Build Coastguard Worker uint32_t pps_deblocking_filter_override_enabled_flag : 1; 236*54e60f84SAndroid Build Coastguard Worker uint32_t pps_deblocking_filter_disabled_flag : 1; 237*54e60f84SAndroid Build Coastguard Worker uint32_t pps_dbf_info_in_ph_flag : 1; 238*54e60f84SAndroid Build Coastguard Worker uint32_t pps_sao_info_in_ph_flag : 1; 239*54e60f84SAndroid Build Coastguard Worker uint32_t pps_alf_info_in_ph_flag : 1; 240*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved for future use, must be zero */ 241*54e60f84SAndroid Build Coastguard Worker uint32_t reserved : 18; 242*54e60f84SAndroid Build Coastguard Worker } bits; 243*54e60f84SAndroid Build Coastguard Worker uint32_t value; 244*54e60f84SAndroid Build Coastguard Worker } pps_flags; 245*54e60f84SAndroid Build Coastguard Worker 246*54e60f84SAndroid Build Coastguard Worker /** \brief picture header parameters. 247*54e60f84SAndroid Build Coastguard Worker * All the parameters except reserved bytes are VVC syntax or spec variables. 248*54e60f84SAndroid Build Coastguard Worker */ 249*54e60f84SAndroid Build Coastguard Worker uint8_t ph_lmcs_aps_id; 250*54e60f84SAndroid Build Coastguard Worker uint8_t ph_scaling_list_aps_id; 251*54e60f84SAndroid Build Coastguard Worker uint8_t ph_log2_diff_min_qt_min_cb_intra_slice_luma; 252*54e60f84SAndroid Build Coastguard Worker uint8_t ph_max_mtt_hierarchy_depth_intra_slice_luma; 253*54e60f84SAndroid Build Coastguard Worker uint8_t ph_log2_diff_max_bt_min_qt_intra_slice_luma; 254*54e60f84SAndroid Build Coastguard Worker uint8_t ph_log2_diff_max_tt_min_qt_intra_slice_luma; 255*54e60f84SAndroid Build Coastguard Worker uint8_t ph_log2_diff_min_qt_min_cb_intra_slice_chroma; 256*54e60f84SAndroid Build Coastguard Worker uint8_t ph_max_mtt_hierarchy_depth_intra_slice_chroma; 257*54e60f84SAndroid Build Coastguard Worker uint8_t ph_log2_diff_max_bt_min_qt_intra_slice_chroma; 258*54e60f84SAndroid Build Coastguard Worker uint8_t ph_log2_diff_max_tt_min_qt_intra_slice_chroma; 259*54e60f84SAndroid Build Coastguard Worker uint8_t ph_cu_qp_delta_subdiv_intra_slice; 260*54e60f84SAndroid Build Coastguard Worker uint8_t ph_cu_chroma_qp_offset_subdiv_intra_slice; 261*54e60f84SAndroid Build Coastguard Worker uint8_t ph_log2_diff_min_qt_min_cb_inter_slice; 262*54e60f84SAndroid Build Coastguard Worker uint8_t ph_max_mtt_hierarchy_depth_inter_slice; 263*54e60f84SAndroid Build Coastguard Worker uint8_t ph_log2_diff_max_bt_min_qt_inter_slice; 264*54e60f84SAndroid Build Coastguard Worker uint8_t ph_log2_diff_max_tt_min_qt_inter_slice; 265*54e60f84SAndroid Build Coastguard Worker uint8_t ph_cu_qp_delta_subdiv_inter_slice; 266*54e60f84SAndroid Build Coastguard Worker uint8_t ph_cu_chroma_qp_offset_subdiv_inter_slice; 267*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved for future use, must be zero */ 268*54e60f84SAndroid Build Coastguard Worker uint16_t reserved16b02; 269*54e60f84SAndroid Build Coastguard Worker uint32_t reserved32b03[VA_PADDING_LOW - 2]; 270*54e60f84SAndroid Build Coastguard Worker 271*54e60f84SAndroid Build Coastguard Worker union { 272*54e60f84SAndroid Build Coastguard Worker struct { 273*54e60f84SAndroid Build Coastguard Worker uint32_t ph_non_ref_pic_flag : 1; 274*54e60f84SAndroid Build Coastguard Worker uint32_t ph_alf_enabled_flag : 1; 275*54e60f84SAndroid Build Coastguard Worker uint32_t ph_alf_cb_enabled_flag : 1; 276*54e60f84SAndroid Build Coastguard Worker uint32_t ph_alf_cr_enabled_flag : 1; 277*54e60f84SAndroid Build Coastguard Worker uint32_t ph_alf_cc_cb_enabled_flag : 1; 278*54e60f84SAndroid Build Coastguard Worker uint32_t ph_alf_cc_cr_enabled_flag : 1; 279*54e60f84SAndroid Build Coastguard Worker uint32_t ph_lmcs_enabled_flag : 1; 280*54e60f84SAndroid Build Coastguard Worker uint32_t ph_chroma_residual_scale_flag : 1; 281*54e60f84SAndroid Build Coastguard Worker uint32_t ph_explicit_scaling_list_enabled_flag : 1; 282*54e60f84SAndroid Build Coastguard Worker uint32_t ph_virtual_boundaries_present_flag : 1; 283*54e60f84SAndroid Build Coastguard Worker uint32_t ph_temporal_mvp_enabled_flag : 1; 284*54e60f84SAndroid Build Coastguard Worker uint32_t ph_mmvd_fullpel_only_flag : 1; 285*54e60f84SAndroid Build Coastguard Worker uint32_t ph_mvd_l1_zero_flag : 1; 286*54e60f84SAndroid Build Coastguard Worker uint32_t ph_bdof_disabled_flag : 1; 287*54e60f84SAndroid Build Coastguard Worker uint32_t ph_dmvr_disabled_flag : 1; 288*54e60f84SAndroid Build Coastguard Worker uint32_t ph_prof_disabled_flag : 1; 289*54e60f84SAndroid Build Coastguard Worker uint32_t ph_joint_cbcr_sign_flag : 1; 290*54e60f84SAndroid Build Coastguard Worker uint32_t ph_sao_luma_enabled_flag : 1; 291*54e60f84SAndroid Build Coastguard Worker uint32_t ph_sao_chroma_enabled_flag : 1; 292*54e60f84SAndroid Build Coastguard Worker uint32_t ph_deblocking_filter_disabled_flag : 1; 293*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved for future use, must be zero */ 294*54e60f84SAndroid Build Coastguard Worker uint32_t reserved : 12; 295*54e60f84SAndroid Build Coastguard Worker } bits; 296*54e60f84SAndroid Build Coastguard Worker uint32_t value; 297*54e60f84SAndroid Build Coastguard Worker } ph_flags; 298*54e60f84SAndroid Build Coastguard Worker 299*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved for future use, must be zero */ 300*54e60f84SAndroid Build Coastguard Worker uint32_t reserved32b04; 301*54e60f84SAndroid Build Coastguard Worker 302*54e60f84SAndroid Build Coastguard Worker union { 303*54e60f84SAndroid Build Coastguard Worker struct { 304*54e60f84SAndroid Build Coastguard Worker /** \brief Flag to indicate if current picture is an intra picture. 305*54e60f84SAndroid Build Coastguard Worker * Takes value 1 when all slices of current picture are intra slices. 306*54e60f84SAndroid Build Coastguard Worker * Takes value 0 when some slices of current picture may not be 307*54e60f84SAndroid Build Coastguard Worker * intra slices. 308*54e60f84SAndroid Build Coastguard Worker */ 309*54e60f84SAndroid Build Coastguard Worker uint32_t IntraPicFlag : 1; // [0..1] 310*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved for future use, must be zero */ 311*54e60f84SAndroid Build Coastguard Worker uint32_t reserved : 31; 312*54e60f84SAndroid Build Coastguard Worker } fields; 313*54e60f84SAndroid Build Coastguard Worker uint32_t value; 314*54e60f84SAndroid Build Coastguard Worker } PicMiscFlags; 315*54e60f84SAndroid Build Coastguard Worker 316*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 317*54e60f84SAndroid Build Coastguard Worker uint32_t reserved32b[VA_PADDING_HIGH + 1]; 318*54e60f84SAndroid Build Coastguard Worker 319*54e60f84SAndroid Build Coastguard Worker } VAPictureParameterBufferVVC; 320*54e60f84SAndroid Build Coastguard Worker 321*54e60f84SAndroid Build Coastguard Worker /** 322*54e60f84SAndroid Build Coastguard Worker * \brief VVC Slice Parameter Buffer Structure 323*54e60f84SAndroid Build Coastguard Worker * 324*54e60f84SAndroid Build Coastguard Worker * VASliceParameterBufferVVC structure should be accompanied by a 325*54e60f84SAndroid Build Coastguard Worker * slice data buffer, which holds the whole packed slice NAL unit bit stream 326*54e60f84SAndroid Build Coastguard Worker * with emulation prevention bytes not removed. 327*54e60f84SAndroid Build Coastguard Worker * 328*54e60f84SAndroid Build Coastguard Worker * This structure conveys parameters related to slice header and should 329*54e60f84SAndroid Build Coastguard Worker * be sent once per slice. 330*54e60f84SAndroid Build Coastguard Worker */ 331*54e60f84SAndroid Build Coastguard Worker typedef struct _VASliceParameterBufferVVC { 332*54e60f84SAndroid Build Coastguard Worker /** @name Codec-independent Slice Parameter Buffer base. */ 333*54e60f84SAndroid Build Coastguard Worker 334*54e60f84SAndroid Build Coastguard Worker /**@{*/ 335*54e60f84SAndroid Build Coastguard Worker 336*54e60f84SAndroid Build Coastguard Worker /** \brief Number of bytes in the slice data buffer for this slice 337*54e60f84SAndroid Build Coastguard Worker * counting from and including NAL unit header. 338*54e60f84SAndroid Build Coastguard Worker */ 339*54e60f84SAndroid Build Coastguard Worker uint32_t slice_data_size; 340*54e60f84SAndroid Build Coastguard Worker /** \brief The offset to the NAL unit header for this slice */ 341*54e60f84SAndroid Build Coastguard Worker uint32_t slice_data_offset; 342*54e60f84SAndroid Build Coastguard Worker /** \brief Slice data buffer flags. See \c VA_SLICE_DATA_FLAG_XXX. */ 343*54e60f84SAndroid Build Coastguard Worker uint32_t slice_data_flag; 344*54e60f84SAndroid Build Coastguard Worker /** 345*54e60f84SAndroid Build Coastguard Worker * \brief Byte offset from NAL unit header to the beginning of slice_data(). 346*54e60f84SAndroid Build Coastguard Worker * 347*54e60f84SAndroid Build Coastguard Worker * This byte offset is relative to and includes the NAL unit header 348*54e60f84SAndroid Build Coastguard Worker * and represents the number of bytes parsed in the slice_header() 349*54e60f84SAndroid Build Coastguard Worker * after the removal of any emulation prevention bytes in 350*54e60f84SAndroid Build Coastguard Worker * there. However, the slice data buffer passed to the hardware is 351*54e60f84SAndroid Build Coastguard Worker * the original bitstream, thus including any emulation prevention 352*54e60f84SAndroid Build Coastguard Worker * bytes. 353*54e60f84SAndroid Build Coastguard Worker */ 354*54e60f84SAndroid Build Coastguard Worker uint32_t slice_data_byte_offset; 355*54e60f84SAndroid Build Coastguard Worker /** \brief index into ReferenceFrames[] 356*54e60f84SAndroid Build Coastguard Worker * RefPicList[][] corresponds to VVC spec variable with the same name. 357*54e60f84SAndroid Build Coastguard Worker * Value range [0..14, 0xFF], where 0xFF indicates invalid entry. 358*54e60f84SAndroid Build Coastguard Worker */ 359*54e60f84SAndroid Build Coastguard Worker uint8_t RefPicList[2][15]; 360*54e60f84SAndroid Build Coastguard Worker 361*54e60f84SAndroid Build Coastguard Worker /** 362*54e60f84SAndroid Build Coastguard Worker * \brief the subpicture ID of the subpicture that contains the slice. 363*54e60f84SAndroid Build Coastguard Worker * The value of the variable CurrSubpicIdx 364*54e60f84SAndroid Build Coastguard Worker * is derived to be such that SubpicIdVal[CurrSubpicIdx] is equal 365*54e60f84SAndroid Build Coastguard Worker * to sh_subpic_id. CurrSubpicIdx is the index of array VASubPicArrayBufferVVC.SubPicSet[]. 366*54e60f84SAndroid Build Coastguard Worker * And it is the spec variable with the same name. 367*54e60f84SAndroid Build Coastguard Worker */ 368*54e60f84SAndroid Build Coastguard Worker uint16_t sh_subpic_id; 369*54e60f84SAndroid Build Coastguard Worker /* parameters below are VVC syntax or spec variables. */ 370*54e60f84SAndroid Build Coastguard Worker uint16_t sh_slice_address; 371*54e60f84SAndroid Build Coastguard Worker uint16_t sh_num_tiles_in_slice_minus1; 372*54e60f84SAndroid Build Coastguard Worker uint8_t sh_slice_type; 373*54e60f84SAndroid Build Coastguard Worker uint8_t sh_num_alf_aps_ids_luma; 374*54e60f84SAndroid Build Coastguard Worker uint8_t sh_alf_aps_id_luma[7]; 375*54e60f84SAndroid Build Coastguard Worker uint8_t sh_alf_aps_id_chroma; 376*54e60f84SAndroid Build Coastguard Worker uint8_t sh_alf_cc_cb_aps_id; 377*54e60f84SAndroid Build Coastguard Worker uint8_t sh_alf_cc_cr_aps_id; 378*54e60f84SAndroid Build Coastguard Worker /** 379*54e60f84SAndroid Build Coastguard Worker * \brief NumRefIdxActive[i] - 1 specifies the maximum reference index 380*54e60f84SAndroid Build Coastguard Worker * for RPL i that may be used to decode the slice. When NumRefIdxActive[i] 381*54e60f84SAndroid Build Coastguard Worker * is equal to 0, no reference index for RPL i is used to decode the slice. 382*54e60f84SAndroid Build Coastguard Worker * NumRefIdxActive[] corresponds to VVC spec variable with the same name. 383*54e60f84SAndroid Build Coastguard Worker * It is derived according to formula (138) in VVC spec section 7.4.8. 384*54e60f84SAndroid Build Coastguard Worker */ 385*54e60f84SAndroid Build Coastguard Worker uint8_t NumRefIdxActive[2]; 386*54e60f84SAndroid Build Coastguard Worker uint8_t sh_collocated_ref_idx; 387*54e60f84SAndroid Build Coastguard Worker /** 388*54e60f84SAndroid Build Coastguard Worker * \brief initial value of the QpY quantization parameter for the slice. 389*54e60f84SAndroid Build Coastguard Worker * SliceQpY corresponds to VVC spec variable with the same name. 390*54e60f84SAndroid Build Coastguard Worker * It is derived according to formula (86) in VVC spec section 7.4.3.8 391*54e60f84SAndroid Build Coastguard Worker * and formula (139) in VVC Spec section 7.4.8. 392*54e60f84SAndroid Build Coastguard Worker */ 393*54e60f84SAndroid Build Coastguard Worker int8_t SliceQpY; 394*54e60f84SAndroid Build Coastguard Worker /* parameters below are VVC syntax. */ 395*54e60f84SAndroid Build Coastguard Worker int8_t sh_cb_qp_offset; 396*54e60f84SAndroid Build Coastguard Worker int8_t sh_cr_qp_offset; 397*54e60f84SAndroid Build Coastguard Worker int8_t sh_joint_cbcr_qp_offset; 398*54e60f84SAndroid Build Coastguard Worker int8_t sh_luma_beta_offset_div2; 399*54e60f84SAndroid Build Coastguard Worker int8_t sh_luma_tc_offset_div2; 400*54e60f84SAndroid Build Coastguard Worker int8_t sh_cb_beta_offset_div2; 401*54e60f84SAndroid Build Coastguard Worker int8_t sh_cb_tc_offset_div2; 402*54e60f84SAndroid Build Coastguard Worker int8_t sh_cr_beta_offset_div2; 403*54e60f84SAndroid Build Coastguard Worker int8_t sh_cr_tc_offset_div2; 404*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 405*54e60f84SAndroid Build Coastguard Worker uint8_t reserved8b[VA_PADDING_LOW - 1]; 406*54e60f84SAndroid Build Coastguard Worker uint32_t reserved32b; 407*54e60f84SAndroid Build Coastguard Worker 408*54e60f84SAndroid Build Coastguard Worker // weighted prediction info 409*54e60f84SAndroid Build Coastguard Worker VAWeightedPredInfo WPInfo; 410*54e60f84SAndroid Build Coastguard Worker 411*54e60f84SAndroid Build Coastguard Worker union { 412*54e60f84SAndroid Build Coastguard Worker struct { 413*54e60f84SAndroid Build Coastguard Worker /* flags below are VVC syntax. */ 414*54e60f84SAndroid Build Coastguard Worker uint32_t sh_alf_enabled_flag : 1; 415*54e60f84SAndroid Build Coastguard Worker uint32_t sh_alf_cb_enabled_flag : 1; 416*54e60f84SAndroid Build Coastguard Worker uint32_t sh_alf_cr_enabled_flag : 1; 417*54e60f84SAndroid Build Coastguard Worker uint32_t sh_alf_cc_cb_enabled_flag : 1; 418*54e60f84SAndroid Build Coastguard Worker uint32_t sh_alf_cc_cr_enabled_flag : 1; 419*54e60f84SAndroid Build Coastguard Worker uint32_t sh_lmcs_used_flag : 1; 420*54e60f84SAndroid Build Coastguard Worker uint32_t sh_explicit_scaling_list_used_flag : 1; 421*54e60f84SAndroid Build Coastguard Worker uint32_t sh_cabac_init_flag : 1; 422*54e60f84SAndroid Build Coastguard Worker uint32_t sh_collocated_from_l0_flag : 1; 423*54e60f84SAndroid Build Coastguard Worker uint32_t sh_cu_chroma_qp_offset_enabled_flag : 1; 424*54e60f84SAndroid Build Coastguard Worker uint32_t sh_sao_luma_used_flag : 1; 425*54e60f84SAndroid Build Coastguard Worker uint32_t sh_sao_chroma_used_flag : 1; 426*54e60f84SAndroid Build Coastguard Worker uint32_t sh_deblocking_filter_disabled_flag : 1; 427*54e60f84SAndroid Build Coastguard Worker uint32_t sh_dep_quant_used_flag : 1; 428*54e60f84SAndroid Build Coastguard Worker uint32_t sh_sign_data_hiding_used_flag : 1; 429*54e60f84SAndroid Build Coastguard Worker uint32_t sh_ts_residual_coding_disabled_flag : 1; 430*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved for future use, must be zero */ 431*54e60f84SAndroid Build Coastguard Worker uint32_t reserved : 16; 432*54e60f84SAndroid Build Coastguard Worker } bits; 433*54e60f84SAndroid Build Coastguard Worker uint32_t value; 434*54e60f84SAndroid Build Coastguard Worker } sh_flags; 435*54e60f84SAndroid Build Coastguard Worker 436*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 437*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_MEDIUM]; 438*54e60f84SAndroid Build Coastguard Worker } VASliceParameterBufferVVC; 439*54e60f84SAndroid Build Coastguard Worker 440*54e60f84SAndroid Build Coastguard Worker /** 441*54e60f84SAndroid Build Coastguard Worker * \brief VVC Scaling List Data Structure 442*54e60f84SAndroid Build Coastguard Worker * 443*54e60f84SAndroid Build Coastguard Worker * Host decoder sends in an array of VVC Scaling Lists through one or multiple 444*54e60f84SAndroid Build Coastguard Worker * buffers which may contain 1 to 8 VAScalingListVVC data structures in total. 445*54e60f84SAndroid Build Coastguard Worker * Each buffer contains an integer number of VAScalingListVVC data structures 446*54e60f84SAndroid Build Coastguard Worker * with no gap in between. 447*54e60f84SAndroid Build Coastguard Worker * Driver may store the data internally. Host decoder may choose not to 448*54e60f84SAndroid Build Coastguard Worker * send the same scaling list data for each frame. When a VAScalingListVVC 449*54e60f84SAndroid Build Coastguard Worker * structure carries a same value of aps_adaptation_parameter_set_id 450*54e60f84SAndroid Build Coastguard Worker * as a previously stored structure, driver should override the old structure 451*54e60f84SAndroid Build Coastguard Worker * with values in the new structure. 452*54e60f84SAndroid Build Coastguard Worker * VAIQMatrixBufferType is used to send this buffer. 453*54e60f84SAndroid Build Coastguard Worker */ 454*54e60f84SAndroid Build Coastguard Worker typedef struct _VAScalingListVVC { 455*54e60f84SAndroid Build Coastguard Worker /** \brief VVC syntax to specify the identifier for the APS.*/ 456*54e60f84SAndroid Build Coastguard Worker uint8_t aps_adaptation_parameter_set_id; 457*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved for future use, must be zero */ 458*54e60f84SAndroid Build Coastguard Worker uint8_t reserved8b; 459*54e60f84SAndroid Build Coastguard Worker /** 460*54e60f84SAndroid Build Coastguard Worker * \brief Specifies the spec variable ScalingMatrixDCRec[id−14], 461*54e60f84SAndroid Build Coastguard Worker * where id = [14..27]. 462*54e60f84SAndroid Build Coastguard Worker */ 463*54e60f84SAndroid Build Coastguard Worker uint8_t ScalingMatrixDCRec[14]; 464*54e60f84SAndroid Build Coastguard Worker /** 465*54e60f84SAndroid Build Coastguard Worker * \brief Specifies the spec variable ScalingMatrixRec[id][x][y], 466*54e60f84SAndroid Build Coastguard Worker * where id = [0..1]. Check section 7.4.3.20 for derivation process. 467*54e60f84SAndroid Build Coastguard Worker */ 468*54e60f84SAndroid Build Coastguard Worker uint8_t ScalingMatrixRec2x2[2][2][2]; 469*54e60f84SAndroid Build Coastguard Worker /** 470*54e60f84SAndroid Build Coastguard Worker * \brief Specifies the spec variable ScalingMatrixRec[id][x][y], 471*54e60f84SAndroid Build Coastguard Worker * where id = [2..7]. Check section 7.4.3.20 for derivation process. 472*54e60f84SAndroid Build Coastguard Worker */ 473*54e60f84SAndroid Build Coastguard Worker uint8_t ScalingMatrixRec4x4[6][4][4]; 474*54e60f84SAndroid Build Coastguard Worker /** 475*54e60f84SAndroid Build Coastguard Worker * \brief Specifies the spec variable ScalingMatrixRec[id][x][y], 476*54e60f84SAndroid Build Coastguard Worker * where id = [8..27]. Check section 7.4.3.20 for derivation process. 477*54e60f84SAndroid Build Coastguard Worker */ 478*54e60f84SAndroid Build Coastguard Worker uint8_t ScalingMatrixRec8x8[20][8][8]; 479*54e60f84SAndroid Build Coastguard Worker 480*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 481*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_MEDIUM]; 482*54e60f84SAndroid Build Coastguard Worker } VAScalingListVVC; 483*54e60f84SAndroid Build Coastguard Worker 484*54e60f84SAndroid Build Coastguard Worker /** 485*54e60f84SAndroid Build Coastguard Worker * \brief VVC Adaptive Loop Filter Data Structure 486*54e60f84SAndroid Build Coastguard Worker * 487*54e60f84SAndroid Build Coastguard Worker * Host decoder sends in an array of VVC ALF sets through one or multiple 488*54e60f84SAndroid Build Coastguard Worker * buffers which may contain 1 to 8 VAAlfDataVVC data structures in total. 489*54e60f84SAndroid Build Coastguard Worker * Each buffer contains an integer number of VAAlfDataVVC data structures 490*54e60f84SAndroid Build Coastguard Worker * with no gap in between. 491*54e60f84SAndroid Build Coastguard Worker * Driver may store the data internally. Host decoder may choose not to 492*54e60f84SAndroid Build Coastguard Worker * send the same ALF data for each frame. When a VAAlfDataVVC structure 493*54e60f84SAndroid Build Coastguard Worker * carries a same value of aps_adaptation_parameter_set_id as a previously 494*54e60f84SAndroid Build Coastguard Worker * stored structure, driver should override the old structure 495*54e60f84SAndroid Build Coastguard Worker * with values in the new structure. 496*54e60f84SAndroid Build Coastguard Worker * VAAlfBufferType is used to send this buffer. 497*54e60f84SAndroid Build Coastguard Worker */ 498*54e60f84SAndroid Build Coastguard Worker typedef struct _VAAlfDataVVC { 499*54e60f84SAndroid Build Coastguard Worker /** 500*54e60f84SAndroid Build Coastguard Worker * \brief VVC Adaptive Loop Filter parameters. 501*54e60f84SAndroid Build Coastguard Worker * All the parameters except reserved bytes are VVC syntax or spec variables. 502*54e60f84SAndroid Build Coastguard Worker */ 503*54e60f84SAndroid Build Coastguard Worker uint8_t aps_adaptation_parameter_set_id; 504*54e60f84SAndroid Build Coastguard Worker uint8_t alf_luma_num_filters_signalled_minus1; 505*54e60f84SAndroid Build Coastguard Worker uint8_t alf_luma_coeff_delta_idx[25]; 506*54e60f84SAndroid Build Coastguard Worker int8_t filtCoeff[25][12]; 507*54e60f84SAndroid Build Coastguard Worker uint8_t alf_luma_clip_idx[25][12]; 508*54e60f84SAndroid Build Coastguard Worker uint8_t alf_chroma_num_alt_filters_minus1; 509*54e60f84SAndroid Build Coastguard Worker int8_t AlfCoeffC[8][6]; 510*54e60f84SAndroid Build Coastguard Worker uint8_t alf_chroma_clip_idx[8][6]; 511*54e60f84SAndroid Build Coastguard Worker uint8_t alf_cc_cb_filters_signalled_minus1; 512*54e60f84SAndroid Build Coastguard Worker int8_t CcAlfApsCoeffCb[4][7]; 513*54e60f84SAndroid Build Coastguard Worker uint8_t alf_cc_cr_filters_signalled_minus1; 514*54e60f84SAndroid Build Coastguard Worker int8_t CcAlfApsCoeffCr[4][7]; 515*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 516*54e60f84SAndroid Build Coastguard Worker uint16_t reserved16b; 517*54e60f84SAndroid Build Coastguard Worker uint32_t reserved32b; 518*54e60f84SAndroid Build Coastguard Worker 519*54e60f84SAndroid Build Coastguard Worker union { 520*54e60f84SAndroid Build Coastguard Worker struct { 521*54e60f84SAndroid Build Coastguard Worker uint32_t alf_luma_filter_signal_flag : 1; 522*54e60f84SAndroid Build Coastguard Worker uint32_t alf_chroma_filter_signal_flag : 1; 523*54e60f84SAndroid Build Coastguard Worker uint32_t alf_cc_cb_filter_signal_flag : 1; 524*54e60f84SAndroid Build Coastguard Worker uint32_t alf_cc_cr_filter_signal_flag : 1; 525*54e60f84SAndroid Build Coastguard Worker uint32_t alf_luma_clip_flag : 1; 526*54e60f84SAndroid Build Coastguard Worker uint32_t alf_chroma_clip_flag : 1; 527*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved for future use, must be zero */ 528*54e60f84SAndroid Build Coastguard Worker uint32_t reserved : 26; 529*54e60f84SAndroid Build Coastguard Worker } bits; 530*54e60f84SAndroid Build Coastguard Worker uint32_t value; 531*54e60f84SAndroid Build Coastguard Worker } alf_flags; 532*54e60f84SAndroid Build Coastguard Worker 533*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved for future use, must be zero */ 534*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_MEDIUM]; 535*54e60f84SAndroid Build Coastguard Worker } VAAlfDataVVC; 536*54e60f84SAndroid Build Coastguard Worker 537*54e60f84SAndroid Build Coastguard Worker /** 538*54e60f84SAndroid Build Coastguard Worker * \brief VVC Luma Mapping with Chroma Scaling Data Structure 539*54e60f84SAndroid Build Coastguard Worker * 540*54e60f84SAndroid Build Coastguard Worker * Host decoder sends in an array of VVC LMCS sets through one or multiple 541*54e60f84SAndroid Build Coastguard Worker * buffers which may contain 1 to 4 VALmcsDataVVC data structures in total. 542*54e60f84SAndroid Build Coastguard Worker * Each buffer contains an integer number of VALmcsDataVVC data structures 543*54e60f84SAndroid Build Coastguard Worker * with no gap in between. 544*54e60f84SAndroid Build Coastguard Worker * Driver may store the data internally. Host decoder may choose not to 545*54e60f84SAndroid Build Coastguard Worker * send the same LMCS data for each frame. When a VALmcsDataVVC structure 546*54e60f84SAndroid Build Coastguard Worker * carries a same value of aps_adaptation_parameter_set_id as a previously 547*54e60f84SAndroid Build Coastguard Worker * stored structure, driver should override the old structure 548*54e60f84SAndroid Build Coastguard Worker * with values in the new structure. 549*54e60f84SAndroid Build Coastguard Worker * VALmcsBufferType is used to send this buffer. 550*54e60f84SAndroid Build Coastguard Worker */ 551*54e60f84SAndroid Build Coastguard Worker typedef struct _VALmcsDataVVC { 552*54e60f84SAndroid Build Coastguard Worker /** 553*54e60f84SAndroid Build Coastguard Worker * \brief VVC Luma Mapping with Chroma Scaling parameters. 554*54e60f84SAndroid Build Coastguard Worker * All the parameters except reserved bytes are VVC syntax or spec variables. 555*54e60f84SAndroid Build Coastguard Worker */ 556*54e60f84SAndroid Build Coastguard Worker uint8_t aps_adaptation_parameter_set_id; 557*54e60f84SAndroid Build Coastguard Worker uint8_t lmcs_min_bin_idx; 558*54e60f84SAndroid Build Coastguard Worker uint8_t lmcs_delta_max_bin_idx; 559*54e60f84SAndroid Build Coastguard Worker int16_t lmcsDeltaCW[16]; 560*54e60f84SAndroid Build Coastguard Worker int8_t lmcsDeltaCrs; 561*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved for future use, must be zero */ 562*54e60f84SAndroid Build Coastguard Worker uint8_t reserved8b[VA_PADDING_LOW - 1]; 563*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_MEDIUM]; 564*54e60f84SAndroid Build Coastguard Worker } VALmcsDataVVC; 565*54e60f84SAndroid Build Coastguard Worker 566*54e60f84SAndroid Build Coastguard Worker /** 567*54e60f84SAndroid Build Coastguard Worker * \brief VVC SubPicture Data Structure 568*54e60f84SAndroid Build Coastguard Worker * 569*54e60f84SAndroid Build Coastguard Worker * Host decoder sends in an array of VVC SubPic sets through one or 570*54e60f84SAndroid Build Coastguard Worker * multiple buffers which contain sps_num_subpics_minus1 + 1 571*54e60f84SAndroid Build Coastguard Worker * VASubPicVVC data structures in total. Each buffer contains 572*54e60f84SAndroid Build Coastguard Worker * an integer number of VASubPicVVC data structures with no gap in between. 573*54e60f84SAndroid Build Coastguard Worker * The Subpic sets are sent sequentially in the order of indices 574*54e60f84SAndroid Build Coastguard Worker * from 0 to sps_num_subpics_minus1 according to the bitstream. 575*54e60f84SAndroid Build Coastguard Worker * VASubPicBufferType is used to send this buffer. 576*54e60f84SAndroid Build Coastguard Worker */ 577*54e60f84SAndroid Build Coastguard Worker typedef struct _VASubPicVVC { 578*54e60f84SAndroid Build Coastguard Worker /** 579*54e60f84SAndroid Build Coastguard Worker * \brief VVC SubPicture layout parameters. 580*54e60f84SAndroid Build Coastguard Worker * All the parameters except reserved bytes are VVC syntax or spec variables. 581*54e60f84SAndroid Build Coastguard Worker */ 582*54e60f84SAndroid Build Coastguard Worker uint16_t sps_subpic_ctu_top_left_x; 583*54e60f84SAndroid Build Coastguard Worker uint16_t sps_subpic_ctu_top_left_y; 584*54e60f84SAndroid Build Coastguard Worker uint16_t sps_subpic_width_minus1; 585*54e60f84SAndroid Build Coastguard Worker uint16_t sps_subpic_height_minus1; 586*54e60f84SAndroid Build Coastguard Worker /** \brief the subpicture ID of the i-th subpicture. 587*54e60f84SAndroid Build Coastguard Worker * It is same variable as in VVC spec. 588*54e60f84SAndroid Build Coastguard Worker */ 589*54e60f84SAndroid Build Coastguard Worker uint16_t SubpicIdVal; 590*54e60f84SAndroid Build Coastguard Worker 591*54e60f84SAndroid Build Coastguard Worker union { 592*54e60f84SAndroid Build Coastguard Worker struct { 593*54e60f84SAndroid Build Coastguard Worker uint16_t sps_subpic_treated_as_pic_flag : 1; 594*54e60f84SAndroid Build Coastguard Worker uint16_t sps_loop_filter_across_subpic_enabled_flag : 1; 595*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved for future use, must be zero */ 596*54e60f84SAndroid Build Coastguard Worker uint16_t reserved : 14; 597*54e60f84SAndroid Build Coastguard Worker } bits; 598*54e60f84SAndroid Build Coastguard Worker uint16_t value; 599*54e60f84SAndroid Build Coastguard Worker } subpic_flags; 600*54e60f84SAndroid Build Coastguard Worker 601*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved for future use, must be zero */ 602*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_LOW]; 603*54e60f84SAndroid Build Coastguard Worker } VASubPicVVC; 604*54e60f84SAndroid Build Coastguard Worker 605*54e60f84SAndroid Build Coastguard Worker /** 606*54e60f84SAndroid Build Coastguard Worker * \brief data buffer of tile widths and heights. 607*54e60f84SAndroid Build Coastguard Worker * VATileBufferType is used to send this buffer. 608*54e60f84SAndroid Build Coastguard Worker * 609*54e60f84SAndroid Build Coastguard Worker * Host decoder sends in number of pps_num_exp_tile_columns_minus1 + 1 610*54e60f84SAndroid Build Coastguard Worker * tile column widths of pps_tile_column_width_minus1[i], followed by 611*54e60f84SAndroid Build Coastguard Worker * number of pps_num_exp_tile_rows_minus1 + 1 of tile row heights of 612*54e60f84SAndroid Build Coastguard Worker * pps_tile_row_height_minus1[i], through one or multiple buffers. 613*54e60f84SAndroid Build Coastguard Worker * Each tile width or height is formatted as 614*54e60f84SAndroid Build Coastguard Worker uint16_t tile_dimension; 615*54e60f84SAndroid Build Coastguard Worker * Each buffer contains an integer number of tile_dimension with 616*54e60f84SAndroid Build Coastguard Worker * no gap in between. 617*54e60f84SAndroid Build Coastguard Worker * The buffers with type VATileBufferType should be submitted for each 618*54e60f84SAndroid Build Coastguard Worker * picture. And driver will derive the tile structure from it. 619*54e60f84SAndroid Build Coastguard Worker * When pps_num_exp_tile_columns_minus1 + pps_num_exp_tile_rows_minus1 equals 0, 620*54e60f84SAndroid Build Coastguard Worker * this buffer is still submitted by app to driver. 621*54e60f84SAndroid Build Coastguard Worker */ 622*54e60f84SAndroid Build Coastguard Worker 623*54e60f84SAndroid Build Coastguard Worker 624*54e60f84SAndroid Build Coastguard Worker /** 625*54e60f84SAndroid Build Coastguard Worker * \brief VVC SliceStruct Data Structure 626*54e60f84SAndroid Build Coastguard Worker * 627*54e60f84SAndroid Build Coastguard Worker * Host decoder sends in an array of SliceStruct sets through one or multiple 628*54e60f84SAndroid Build Coastguard Worker * buffers. These SliceStruct sets contain only the "explicit" slices parsed 629*54e60f84SAndroid Build Coastguard Worker * from PPS header. 630*54e60f84SAndroid Build Coastguard Worker * Each SliceStruct set is described by VASliceStructVVC data structure. 631*54e60f84SAndroid Build Coastguard Worker * Each buffer contains an integer number of VASliceStructVVC data structures, 632*54e60f84SAndroid Build Coastguard Worker * which are laid out sequentially in the order of 633*54e60f84SAndroid Build Coastguard Worker * ascending slice indices according to the spec with no gap in between. 634*54e60f84SAndroid Build Coastguard Worker * 635*54e60f84SAndroid Build Coastguard Worker * When pps_rect_slice_flag equals 0 or there are no explicit slices, 636*54e60f84SAndroid Build Coastguard Worker * this buffer is not submitted by app to driver. Otherwise, for each picture, 637*54e60f84SAndroid Build Coastguard Worker * this buffer should be submitted. 638*54e60f84SAndroid Build Coastguard Worker * 639*54e60f84SAndroid Build Coastguard Worker * Note: When pps_slice_width_in_tiles_minus1 + pps_slice_height_in_tiles_minus1 640*54e60f84SAndroid Build Coastguard Worker * equals 0, if the sum of pps_exp_slice_height_in_ctus_minus1 + 1 of all those 641*54e60f84SAndroid Build Coastguard Worker * slices with same SliceTopLeftTileIdx value is less than the height of tile 642*54e60f84SAndroid Build Coastguard Worker * SliceTopLeftTileIdx in unit of CTUs, driver should derive the rest slices in 643*54e60f84SAndroid Build Coastguard Worker * that tile according to equation (21) in spec section 6.5.1. And VASliceStructVVC 644*54e60f84SAndroid Build Coastguard Worker * for these (derived) slices are not passed in to LibVA by App. 645*54e60f84SAndroid Build Coastguard Worker * 646*54e60f84SAndroid Build Coastguard Worker * App should populate the data entries regardless of values of 647*54e60f84SAndroid Build Coastguard Worker * pps_single_slice_per_subpic_flag or sps_subpic_info_present_flag. 648*54e60f84SAndroid Build Coastguard Worker * 649*54e60f84SAndroid Build Coastguard Worker * VASliceStructBufferType is used to send this buffer. 650*54e60f84SAndroid Build Coastguard Worker */ 651*54e60f84SAndroid Build Coastguard Worker typedef struct _VASliceStructVVC { 652*54e60f84SAndroid Build Coastguard Worker /** \brief the tile index of which the starting CTU (top-left) of 653*54e60f84SAndroid Build Coastguard Worker * the slice belongs to. The tile index is in raster scan order. 654*54e60f84SAndroid Build Coastguard Worker * Same syntax variable as in VVC spec. 655*54e60f84SAndroid Build Coastguard Worker */ 656*54e60f84SAndroid Build Coastguard Worker uint16_t SliceTopLeftTileIdx; 657*54e60f84SAndroid Build Coastguard Worker /* plus 1 specifies the width of the rectangular slice in units 658*54e60f84SAndroid Build Coastguard Worker * of tile columns. 659*54e60f84SAndroid Build Coastguard Worker */ 660*54e60f84SAndroid Build Coastguard Worker uint16_t pps_slice_width_in_tiles_minus1; 661*54e60f84SAndroid Build Coastguard Worker /* plus 1 specifies the height of the rectangular slice in units 662*54e60f84SAndroid Build Coastguard Worker * of tile rows. If the slice does not cover the whole tile, 663*54e60f84SAndroid Build Coastguard Worker * pps_slice_height_in_tiles_minus1 shall be 0. 664*54e60f84SAndroid Build Coastguard Worker */ 665*54e60f84SAndroid Build Coastguard Worker uint16_t pps_slice_height_in_tiles_minus1; 666*54e60f84SAndroid Build Coastguard Worker /* plus 1 specifies the height of the rectangular slice in units 667*54e60f84SAndroid Build Coastguard Worker * of CTU rows. 668*54e60f84SAndroid Build Coastguard Worker * If pps_slice_width_in_tiles_minus1 + pps_slice_height_in_tiles_minus1 > 0, 669*54e60f84SAndroid Build Coastguard Worker * set this value to 0. 670*54e60f84SAndroid Build Coastguard Worker * If pps_slice_width_in_tiles_minus1 + pps_slice_height_in_tiles_minus1 == 0, 671*54e60f84SAndroid Build Coastguard Worker * and if there is only one slice in tile, set this value to the number of 672*54e60f84SAndroid Build Coastguard Worker * CTU rows of the tile minus 1, otherwise, set the value equal to 673*54e60f84SAndroid Build Coastguard Worker * corresponding pps_exp_slice_height_in_ctus_minus1 from bitstream. 674*54e60f84SAndroid Build Coastguard Worker */ 675*54e60f84SAndroid Build Coastguard Worker uint16_t pps_exp_slice_height_in_ctus_minus1; 676*54e60f84SAndroid Build Coastguard Worker 677*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved for future use, must be zero */ 678*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_LOW]; 679*54e60f84SAndroid Build Coastguard Worker } VASliceStructVVC; 680*54e60f84SAndroid Build Coastguard Worker 681*54e60f84SAndroid Build Coastguard Worker 682*54e60f84SAndroid Build Coastguard Worker /**@}*/ 683*54e60f84SAndroid Build Coastguard Worker 684*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus 685*54e60f84SAndroid Build Coastguard Worker } 686*54e60f84SAndroid Build Coastguard Worker #endif 687*54e60f84SAndroid Build Coastguard Worker 688*54e60f84SAndroid Build Coastguard Worker #endif /* VA_DEC_VVC_H */ 689