xref: /aosp_15_r20/external/libva/va/va_dec_vvc.h (revision 54e60f844a168e9a219354de272cd517ee8cd4b7)
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