xref: /aosp_15_r20/external/libva/va/va_dec_av1.h (revision 54e60f844a168e9a219354de272cd517ee8cd4b7)
1*54e60f84SAndroid Build Coastguard Worker /*
2*54e60f84SAndroid Build Coastguard Worker  * Copyright (c) 2019 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_av1.h
27*54e60f84SAndroid Build Coastguard Worker  * \brief The AV1 decoding API
28*54e60f84SAndroid Build Coastguard Worker  *
29*54e60f84SAndroid Build Coastguard Worker  * This file contains the \ref api_dec_av1 "AV1 decoding API".
30*54e60f84SAndroid Build Coastguard Worker  */
31*54e60f84SAndroid Build Coastguard Worker 
32*54e60f84SAndroid Build Coastguard Worker #ifndef VA_DEC_AV1_H
33*54e60f84SAndroid Build Coastguard Worker #define VA_DEC_AV1_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_av1 AV1 decoding API
43*54e60f84SAndroid Build Coastguard Worker  *
44*54e60f84SAndroid Build Coastguard Worker  * This AV1 decoding API supports 8-bit/10bit 420 format only.
45*54e60f84SAndroid Build Coastguard Worker  *
46*54e60f84SAndroid Build Coastguard Worker  * @{
47*54e60f84SAndroid Build Coastguard Worker  */
48*54e60f84SAndroid Build Coastguard Worker 
49*54e60f84SAndroid Build Coastguard Worker /** Attribute value for VAConfigAttribDecAV1Features.
50*54e60f84SAndroid Build Coastguard Worker  *
51*54e60f84SAndroid Build Coastguard Worker  * This attribute decribes the supported features of a AV1
52*54e60f84SAndroid Build Coastguard Worker  * decoder configuration.
53*54e60f84SAndroid Build Coastguard Worker  *
54*54e60f84SAndroid Build Coastguard Worker  */
55*54e60f84SAndroid Build Coastguard Worker typedef union VAConfigAttribValDecAV1Features {
56*54e60f84SAndroid Build Coastguard Worker     struct {
57*54e60f84SAndroid Build Coastguard Worker         /** large scale tile
58*54e60f84SAndroid Build Coastguard Worker          *
59*54e60f84SAndroid Build Coastguard Worker          * This conveys whether AV1 large scale tile is supported by HW.
60*54e60f84SAndroid Build Coastguard Worker          * 0 - unsupported, 1 - supported.
61*54e60f84SAndroid Build Coastguard Worker          */
62*54e60f84SAndroid Build Coastguard Worker         uint32_t lst_support     : 2;
63*54e60f84SAndroid Build Coastguard Worker         /* Reserved for future use. */
64*54e60f84SAndroid Build Coastguard Worker         uint32_t reserved        : 30;
65*54e60f84SAndroid Build Coastguard Worker     } bits;
66*54e60f84SAndroid Build Coastguard Worker     uint32_t value;
67*54e60f84SAndroid Build Coastguard Worker } VAConfigAttribValDecAV1Features;
68*54e60f84SAndroid Build Coastguard Worker 
69*54e60f84SAndroid Build Coastguard Worker /**
70*54e60f84SAndroid Build Coastguard Worker  * \brief AV1 Decoding Picture Parameter Buffer Structure
71*54e60f84SAndroid Build Coastguard Worker  *
72*54e60f84SAndroid Build Coastguard Worker  * This structure conveys picture level parameters.
73*54e60f84SAndroid Build Coastguard Worker  * App should send a surface with this data structure down to VAAPI once
74*54e60f84SAndroid Build Coastguard Worker  * per frame.
75*54e60f84SAndroid Build Coastguard Worker  *
76*54e60f84SAndroid Build Coastguard Worker  */
77*54e60f84SAndroid Build Coastguard Worker 
78*54e60f84SAndroid Build Coastguard Worker /** \brief Segmentation Information
79*54e60f84SAndroid Build Coastguard Worker   */
80*54e60f84SAndroid Build Coastguard Worker typedef struct _VASegmentationStructAV1 {
81*54e60f84SAndroid Build Coastguard Worker     union {
82*54e60f84SAndroid Build Coastguard Worker         struct {
83*54e60f84SAndroid Build Coastguard Worker             /** Indicates whether segmentation map related syntax elements
84*54e60f84SAndroid Build Coastguard Worker             *  are present or not for current frame. If equal to 0,
85*54e60f84SAndroid Build Coastguard Worker             *  the segmentation map related syntax elements are
86*54e60f84SAndroid Build Coastguard Worker             *  not present for the current frame and the control flags of
87*54e60f84SAndroid Build Coastguard Worker             *  segmentation map related tables feature_data[][], and
88*54e60f84SAndroid Build Coastguard Worker             *  feature_mask[] are not valid and shall be ignored by accelerator.
89*54e60f84SAndroid Build Coastguard Worker             */
90*54e60f84SAndroid Build Coastguard Worker             uint32_t         enabled                                     : 1;
91*54e60f84SAndroid Build Coastguard Worker             /** Value 1 indicates that the segmentation map are updated
92*54e60f84SAndroid Build Coastguard Worker              *  during the decoding of this frame.
93*54e60f84SAndroid Build Coastguard Worker              *  Value 0 means that the segmentation map from the previous
94*54e60f84SAndroid Build Coastguard Worker              *  frame is used.
95*54e60f84SAndroid Build Coastguard Worker              */
96*54e60f84SAndroid Build Coastguard Worker             uint32_t         update_map                                  : 1;
97*54e60f84SAndroid Build Coastguard Worker             /** Value 1 indicates that the updates to the segmentation map
98*54e60f84SAndroid Build Coastguard Worker              *  are coded relative to the existing segmentation map.
99*54e60f84SAndroid Build Coastguard Worker              *  Value 0 indicates that the new segmentation map is coded
100*54e60f84SAndroid Build Coastguard Worker              *  without reference to the existing segmentation map.
101*54e60f84SAndroid Build Coastguard Worker              */
102*54e60f84SAndroid Build Coastguard Worker             uint32_t         temporal_update                             : 1;
103*54e60f84SAndroid Build Coastguard Worker             /** Value 1 indicates that new parameters are about to be
104*54e60f84SAndroid Build Coastguard Worker              *  specified for each segment.
105*54e60f84SAndroid Build Coastguard Worker              *  Value 0 indicates that the segmentation parameters
106*54e60f84SAndroid Build Coastguard Worker              *  should keep their existing values.
107*54e60f84SAndroid Build Coastguard Worker              */
108*54e60f84SAndroid Build Coastguard Worker             uint32_t         update_data                                 : 1;
109*54e60f84SAndroid Build Coastguard Worker 
110*54e60f84SAndroid Build Coastguard Worker             /** \brief Reserved bytes for future use, must be zero */
111*54e60f84SAndroid Build Coastguard Worker             uint32_t         reserved                                    : 28;
112*54e60f84SAndroid Build Coastguard Worker         } bits;
113*54e60f84SAndroid Build Coastguard Worker         uint32_t             value;
114*54e60f84SAndroid Build Coastguard Worker     } segment_info_fields;
115*54e60f84SAndroid Build Coastguard Worker 
116*54e60f84SAndroid Build Coastguard Worker     /** \brief Segmentation parameters for current frame.
117*54e60f84SAndroid Build Coastguard Worker      *  feature_data[segment_id][feature_id]
118*54e60f84SAndroid Build Coastguard Worker      *  where segment_id has value range [0..7] indicating the segment id.
119*54e60f84SAndroid Build Coastguard Worker      *  and feature_id is defined as
120*54e60f84SAndroid Build Coastguard Worker         typedef enum {
121*54e60f84SAndroid Build Coastguard Worker             SEG_LVL_ALT_Q,       // Use alternate Quantizer ....
122*54e60f84SAndroid Build Coastguard Worker             SEG_LVL_ALT_LF_Y_V,  // Use alternate loop filter value on y plane vertical
123*54e60f84SAndroid Build Coastguard Worker             SEG_LVL_ALT_LF_Y_H,  // Use alternate loop filter value on y plane horizontal
124*54e60f84SAndroid Build Coastguard Worker             SEG_LVL_ALT_LF_U,    // Use alternate loop filter value on u plane
125*54e60f84SAndroid Build Coastguard Worker             SEG_LVL_ALT_LF_V,    // Use alternate loop filter value on v plane
126*54e60f84SAndroid Build Coastguard Worker             SEG_LVL_REF_FRAME,   // Optional Segment reference frame
127*54e60f84SAndroid Build Coastguard Worker             SEG_LVL_SKIP,        // Optional Segment (0,0) + skip mode
128*54e60f84SAndroid Build Coastguard Worker             SEG_LVL_GLOBALMV,
129*54e60f84SAndroid Build Coastguard Worker             SEG_LVL_MAX
130*54e60f84SAndroid Build Coastguard Worker         } SEG_LVL_FEATURES;
131*54e60f84SAndroid Build Coastguard Worker      *  feature_data[][] is equivalent to variable FeatureData[][] in spec,
132*54e60f84SAndroid Build Coastguard Worker      *  which is after clip3() operation.
133*54e60f84SAndroid Build Coastguard Worker      *  Clip3(x, y, z) = (z < x)? x : ((z > y)? y : z);
134*54e60f84SAndroid Build Coastguard Worker      *  The limit is defined in Segmentation_Feature_Max[ SEG_LVL_MAX ] = {
135*54e60f84SAndroid Build Coastguard Worker      *  255, MAX_LOOP_FILTER, MAX_LOOP_FILTER, MAX_LOOP_FILTER, MAX_LOOP_FILTER, 7, 0, 0 }
136*54e60f84SAndroid Build Coastguard Worker      */
137*54e60f84SAndroid Build Coastguard Worker     int16_t                 feature_data[8][8];
138*54e60f84SAndroid Build Coastguard Worker 
139*54e60f84SAndroid Build Coastguard Worker     /** \brief indicates if a feature is enabled or not.
140*54e60f84SAndroid Build Coastguard Worker      *  Each bit field itself is the feature_id. Index is segment_id.
141*54e60f84SAndroid Build Coastguard Worker      *  feature_mask[segment_id] & (1 << feature_id) equal to 1 specify that the feature of
142*54e60f84SAndroid Build Coastguard Worker      *  feature_id for segment of segment_id is enabled, otherwise disabled.
143*54e60f84SAndroid Build Coastguard Worker      */
144*54e60f84SAndroid Build Coastguard Worker     uint8_t                 feature_mask[8];
145*54e60f84SAndroid Build Coastguard Worker 
146*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
147*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
148*54e60f84SAndroid Build Coastguard Worker 
149*54e60f84SAndroid Build Coastguard Worker } VASegmentationStructAV1;
150*54e60f84SAndroid Build Coastguard Worker 
151*54e60f84SAndroid Build Coastguard Worker /** \brief Film Grain Information
152*54e60f84SAndroid Build Coastguard Worker   */
153*54e60f84SAndroid Build Coastguard Worker typedef struct _VAFilmGrainStructAV1 {
154*54e60f84SAndroid Build Coastguard Worker     union {
155*54e60f84SAndroid Build Coastguard Worker         struct {
156*54e60f84SAndroid Build Coastguard Worker             /** \brief Specify whether or not film grain is applied on current frame.
157*54e60f84SAndroid Build Coastguard Worker              *  If set to 0, all the rest parameters should be set to zero
158*54e60f84SAndroid Build Coastguard Worker              *  and ignored.
159*54e60f84SAndroid Build Coastguard Worker              */
160*54e60f84SAndroid Build Coastguard Worker             uint32_t        apply_grain                                 : 1;
161*54e60f84SAndroid Build Coastguard Worker             uint32_t        chroma_scaling_from_luma                    : 1;
162*54e60f84SAndroid Build Coastguard Worker             uint32_t        grain_scaling_minus_8                       : 2;
163*54e60f84SAndroid Build Coastguard Worker             uint32_t        ar_coeff_lag                                : 2;
164*54e60f84SAndroid Build Coastguard Worker             uint32_t        ar_coeff_shift_minus_6                      : 2;
165*54e60f84SAndroid Build Coastguard Worker             uint32_t        grain_scale_shift                           : 2;
166*54e60f84SAndroid Build Coastguard Worker             uint32_t        overlap_flag                                : 1;
167*54e60f84SAndroid Build Coastguard Worker             uint32_t        clip_to_restricted_range                    : 1;
168*54e60f84SAndroid Build Coastguard Worker             /** \brief Reserved bytes for future use, must be zero */
169*54e60f84SAndroid Build Coastguard Worker             uint32_t        reserved                                    : 20;
170*54e60f84SAndroid Build Coastguard Worker         } bits;
171*54e60f84SAndroid Build Coastguard Worker         uint32_t            value;
172*54e60f84SAndroid Build Coastguard Worker     } film_grain_info_fields;
173*54e60f84SAndroid Build Coastguard Worker 
174*54e60f84SAndroid Build Coastguard Worker     uint16_t                grain_seed;
175*54e60f84SAndroid Build Coastguard Worker     /*  value range [0..14] */
176*54e60f84SAndroid Build Coastguard Worker     uint8_t                 num_y_points;
177*54e60f84SAndroid Build Coastguard Worker     uint8_t                 point_y_value[14];
178*54e60f84SAndroid Build Coastguard Worker     uint8_t                 point_y_scaling[14];
179*54e60f84SAndroid Build Coastguard Worker     /*  value range [0..10] */
180*54e60f84SAndroid Build Coastguard Worker     uint8_t                 num_cb_points;
181*54e60f84SAndroid Build Coastguard Worker     uint8_t                 point_cb_value[10];
182*54e60f84SAndroid Build Coastguard Worker     uint8_t                 point_cb_scaling[10];
183*54e60f84SAndroid Build Coastguard Worker     /*  value range [0..10] */
184*54e60f84SAndroid Build Coastguard Worker     uint8_t                 num_cr_points;
185*54e60f84SAndroid Build Coastguard Worker     uint8_t                 point_cr_value[10];
186*54e60f84SAndroid Build Coastguard Worker     uint8_t                 point_cr_scaling[10];
187*54e60f84SAndroid Build Coastguard Worker     /*  value range [-128..127] */
188*54e60f84SAndroid Build Coastguard Worker     int8_t                  ar_coeffs_y[24];
189*54e60f84SAndroid Build Coastguard Worker     int8_t                  ar_coeffs_cb[25];
190*54e60f84SAndroid Build Coastguard Worker     int8_t                  ar_coeffs_cr[25];
191*54e60f84SAndroid Build Coastguard Worker     uint8_t                 cb_mult;
192*54e60f84SAndroid Build Coastguard Worker     uint8_t                 cb_luma_mult;
193*54e60f84SAndroid Build Coastguard Worker     uint16_t                cb_offset;
194*54e60f84SAndroid Build Coastguard Worker     uint8_t                 cr_mult;
195*54e60f84SAndroid Build Coastguard Worker     uint8_t                 cr_luma_mult;
196*54e60f84SAndroid Build Coastguard Worker     uint16_t                cr_offset;
197*54e60f84SAndroid Build Coastguard Worker 
198*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
199*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
200*54e60f84SAndroid Build Coastguard Worker 
201*54e60f84SAndroid Build Coastguard Worker } VAFilmGrainStructAV1;
202*54e60f84SAndroid Build Coastguard Worker 
203*54e60f84SAndroid Build Coastguard Worker typedef enum {
204*54e60f84SAndroid Build Coastguard Worker     /** identity transformation, 0-parameter */
205*54e60f84SAndroid Build Coastguard Worker     VAAV1TransformationIdentity           = 0,
206*54e60f84SAndroid Build Coastguard Worker     /** translational motion, 2-parameter */
207*54e60f84SAndroid Build Coastguard Worker     VAAV1TransformationTranslation        = 1,
208*54e60f84SAndroid Build Coastguard Worker     /** simplified affine with rotation + zoom only, 4-parameter */
209*54e60f84SAndroid Build Coastguard Worker     VAAV1TransformationRotzoom            = 2,
210*54e60f84SAndroid Build Coastguard Worker     /** affine, 6-parameter */
211*54e60f84SAndroid Build Coastguard Worker     VAAV1TransformationAffine             = 3,
212*54e60f84SAndroid Build Coastguard Worker     /** transformation count */
213*54e60f84SAndroid Build Coastguard Worker     VAAV1TransformationCount
214*54e60f84SAndroid Build Coastguard Worker } VAAV1TransformationType;
215*54e60f84SAndroid Build Coastguard Worker 
216*54e60f84SAndroid Build Coastguard Worker typedef struct _VAWarpedMotionParamsAV1 {
217*54e60f84SAndroid Build Coastguard Worker 
218*54e60f84SAndroid Build Coastguard Worker     /** \brief Specify the type of warped motion */
219*54e60f84SAndroid Build Coastguard Worker     VAAV1TransformationType  wmtype;
220*54e60f84SAndroid Build Coastguard Worker 
221*54e60f84SAndroid Build Coastguard Worker     /** \brief Specify warp motion parameters
222*54e60f84SAndroid Build Coastguard Worker      *  wm.wmmat[] corresponds to gm_params[][] in spec.
223*54e60f84SAndroid Build Coastguard Worker      *  Details in AV1 spec section 5.9.24 or refer to libaom code
224*54e60f84SAndroid Build Coastguard Worker      *  https://aomedia.googlesource.com/aom/+/refs/heads/master/av1/decoder/decodeframe.c
225*54e60f84SAndroid Build Coastguard Worker      */
226*54e60f84SAndroid Build Coastguard Worker     int32_t                 wmmat[8];
227*54e60f84SAndroid Build Coastguard Worker 
228*54e60f84SAndroid Build Coastguard Worker     /* valid or invalid on affine set */
229*54e60f84SAndroid Build Coastguard Worker     uint8_t  invalid;
230*54e60f84SAndroid Build Coastguard Worker 
231*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
232*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
233*54e60f84SAndroid Build Coastguard Worker 
234*54e60f84SAndroid Build Coastguard Worker } VAWarpedMotionParamsAV1;
235*54e60f84SAndroid Build Coastguard Worker 
236*54e60f84SAndroid Build Coastguard Worker /**
237*54e60f84SAndroid Build Coastguard Worker  * \brief AV1 Decoding Picture Parameter Buffer Structure
238*54e60f84SAndroid Build Coastguard Worker  *
239*54e60f84SAndroid Build Coastguard Worker  * This structure conveys picture level parameters and should be sent once
240*54e60f84SAndroid Build Coastguard Worker  * per frame.
241*54e60f84SAndroid Build Coastguard Worker  *
242*54e60f84SAndroid Build Coastguard Worker  */
243*54e60f84SAndroid Build Coastguard Worker typedef struct  _VADecPictureParameterBufferAV1 {
244*54e60f84SAndroid Build Coastguard Worker     /**@{*/
245*54e60f84SAndroid Build Coastguard Worker 
246*54e60f84SAndroid Build Coastguard Worker     /** \brief sequence level information
247*54e60f84SAndroid Build Coastguard Worker      */
248*54e60f84SAndroid Build Coastguard Worker 
249*54e60f84SAndroid Build Coastguard Worker     /** \brief AV1 bit stream profile
250*54e60f84SAndroid Build Coastguard Worker      */
251*54e60f84SAndroid Build Coastguard Worker     uint8_t                 profile;
252*54e60f84SAndroid Build Coastguard Worker 
253*54e60f84SAndroid Build Coastguard Worker     uint8_t                 order_hint_bits_minus_1;
254*54e60f84SAndroid Build Coastguard Worker 
255*54e60f84SAndroid Build Coastguard Worker     /** \brief bit depth index
256*54e60f84SAndroid Build Coastguard Worker      *  value range [0..2]
257*54e60f84SAndroid Build Coastguard Worker      *  0 - bit depth 8;
258*54e60f84SAndroid Build Coastguard Worker      *  1 - bit depth 10;
259*54e60f84SAndroid Build Coastguard Worker      *  2 - bit depth 12;
260*54e60f84SAndroid Build Coastguard Worker      */
261*54e60f84SAndroid Build Coastguard Worker     uint8_t                 bit_depth_idx;
262*54e60f84SAndroid Build Coastguard Worker 
263*54e60f84SAndroid Build Coastguard Worker     /** \brief corresponds to AV1 spec variable of the same name. */
264*54e60f84SAndroid Build Coastguard Worker     uint8_t                 matrix_coefficients;
265*54e60f84SAndroid Build Coastguard Worker 
266*54e60f84SAndroid Build Coastguard Worker     union {
267*54e60f84SAndroid Build Coastguard Worker         struct {
268*54e60f84SAndroid Build Coastguard Worker             uint32_t        still_picture                               : 1;
269*54e60f84SAndroid Build Coastguard Worker             uint32_t        use_128x128_superblock                      : 1;
270*54e60f84SAndroid Build Coastguard Worker             uint32_t        enable_filter_intra                         : 1;
271*54e60f84SAndroid Build Coastguard Worker             uint32_t        enable_intra_edge_filter                    : 1;
272*54e60f84SAndroid Build Coastguard Worker 
273*54e60f84SAndroid Build Coastguard Worker             /** read_compound_tools */
274*54e60f84SAndroid Build Coastguard Worker             uint32_t        enable_interintra_compound                  : 1;
275*54e60f84SAndroid Build Coastguard Worker             uint32_t        enable_masked_compound                      : 1;
276*54e60f84SAndroid Build Coastguard Worker 
277*54e60f84SAndroid Build Coastguard Worker             uint32_t        enable_dual_filter                          : 1;
278*54e60f84SAndroid Build Coastguard Worker             uint32_t        enable_order_hint                           : 1;
279*54e60f84SAndroid Build Coastguard Worker             uint32_t        enable_jnt_comp                             : 1;
280*54e60f84SAndroid Build Coastguard Worker             uint32_t        enable_cdef                                 : 1;
281*54e60f84SAndroid Build Coastguard Worker             uint32_t        mono_chrome                                 : 1;
282*54e60f84SAndroid Build Coastguard Worker             uint32_t        color_range                                 : 1;
283*54e60f84SAndroid Build Coastguard Worker             uint32_t        subsampling_x                               : 1;
284*54e60f84SAndroid Build Coastguard Worker             uint32_t        subsampling_y                               : 1;
285*54e60f84SAndroid Build Coastguard Worker             va_deprecated uint32_t        chroma_sample_position        : 1;
286*54e60f84SAndroid Build Coastguard Worker             uint32_t        film_grain_params_present                   : 1;
287*54e60f84SAndroid Build Coastguard Worker             /** \brief Reserved bytes for future use, must be zero */
288*54e60f84SAndroid Build Coastguard Worker             uint32_t        reserved                                    : 16;
289*54e60f84SAndroid Build Coastguard Worker         } fields;
290*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
291*54e60f84SAndroid Build Coastguard Worker     } seq_info_fields;
292*54e60f84SAndroid Build Coastguard Worker 
293*54e60f84SAndroid Build Coastguard Worker     /** \brief Picture level information
294*54e60f84SAndroid Build Coastguard Worker      */
295*54e60f84SAndroid Build Coastguard Worker 
296*54e60f84SAndroid Build Coastguard Worker     /** \brief buffer description of decoded current picture
297*54e60f84SAndroid Build Coastguard Worker      */
298*54e60f84SAndroid Build Coastguard Worker     VASurfaceID             current_frame;
299*54e60f84SAndroid Build Coastguard Worker 
300*54e60f84SAndroid Build Coastguard Worker     /** \brief display buffer of current picture
301*54e60f84SAndroid Build Coastguard Worker      *  Used for film grain applied decoded picture.
302*54e60f84SAndroid Build Coastguard Worker      *  Valid only when apply_grain equals 1.
303*54e60f84SAndroid Build Coastguard Worker      */
304*54e60f84SAndroid Build Coastguard Worker     VASurfaceID             current_display_picture;
305*54e60f84SAndroid Build Coastguard Worker 
306*54e60f84SAndroid Build Coastguard Worker     /** \brief number of anchor frames for large scale tile
307*54e60f84SAndroid Build Coastguard Worker      *  This parameter gives the number of entries of anchor_frames_list[].
308*54e60f84SAndroid Build Coastguard Worker      *  Value range [0..128].
309*54e60f84SAndroid Build Coastguard Worker      */
310*54e60f84SAndroid Build Coastguard Worker     uint8_t                anchor_frames_num;
311*54e60f84SAndroid Build Coastguard Worker 
312*54e60f84SAndroid Build Coastguard Worker     /** \brief anchor frame list for large scale tile
313*54e60f84SAndroid Build Coastguard Worker      *  For large scale tile applications, the anchor frames could come from
314*54e60f84SAndroid Build Coastguard Worker      *  previously decoded frames in current sequence (aka. internal), or
315*54e60f84SAndroid Build Coastguard Worker      *  from external sources.
316*54e60f84SAndroid Build Coastguard Worker      *  For external anchor frames, application should call API
317*54e60f84SAndroid Build Coastguard Worker      *  vaCreateBuffer() to generate frame buffers and populate them with
318*54e60f84SAndroid Build Coastguard Worker      *  pixel frames. And this process may happen multiple times.
319*54e60f84SAndroid Build Coastguard Worker      *  The array anchor_frames_list[] is used to register all the available
320*54e60f84SAndroid Build Coastguard Worker      *  anchor frames from both external and internal, up to the current
321*54e60f84SAndroid Build Coastguard Worker      *  frame instance. If a previously registerred anchor frame is no longer
322*54e60f84SAndroid Build Coastguard Worker      *  needed, it should be removed from the list. But it does not prevent
323*54e60f84SAndroid Build Coastguard Worker      *  applications from relacing the frame buffer with new anchor frames.
324*54e60f84SAndroid Build Coastguard Worker      *  Please note that the internal anchor frames may not still be present
325*54e60f84SAndroid Build Coastguard Worker      *  in the current DPB buffer. But if it is in the anchor_frames_list[],
326*54e60f84SAndroid Build Coastguard Worker      *  it should not be replaced with other frames or removed from memory
327*54e60f84SAndroid Build Coastguard Worker      *  until it is not shown in the list.
328*54e60f84SAndroid Build Coastguard Worker      *  This number of entries of the list is given by parameter anchor_frames_num.
329*54e60f84SAndroid Build Coastguard Worker      */
330*54e60f84SAndroid Build Coastguard Worker     VASurfaceID             *anchor_frames_list;
331*54e60f84SAndroid Build Coastguard Worker 
332*54e60f84SAndroid Build Coastguard Worker     /** \brief Picture resolution minus 1
333*54e60f84SAndroid Build Coastguard Worker      *  Picture original resolution. If SuperRes is enabled,
334*54e60f84SAndroid Build Coastguard Worker      *  this is the upscaled resolution.
335*54e60f84SAndroid Build Coastguard Worker      *  value range [0..65535]
336*54e60f84SAndroid Build Coastguard Worker      */
337*54e60f84SAndroid Build Coastguard Worker     uint16_t                frame_width_minus1;
338*54e60f84SAndroid Build Coastguard Worker     uint16_t                frame_height_minus1;
339*54e60f84SAndroid Build Coastguard Worker 
340*54e60f84SAndroid Build Coastguard Worker     /** \brief Output frame buffer size in unit of tiles
341*54e60f84SAndroid Build Coastguard Worker      *  Valid only when large_scale_tile equals 1.
342*54e60f84SAndroid Build Coastguard Worker      *  value range [0..65535]
343*54e60f84SAndroid Build Coastguard Worker      */
344*54e60f84SAndroid Build Coastguard Worker     uint16_t                output_frame_width_in_tiles_minus_1;
345*54e60f84SAndroid Build Coastguard Worker     uint16_t                output_frame_height_in_tiles_minus_1;
346*54e60f84SAndroid Build Coastguard Worker 
347*54e60f84SAndroid Build Coastguard Worker     /** \brief Surface indices of reference frames in DPB.
348*54e60f84SAndroid Build Coastguard Worker      *
349*54e60f84SAndroid Build Coastguard Worker      *  Contains a list of uncompressed frame buffer surface indices as references.
350*54e60f84SAndroid Build Coastguard Worker      *  Application needs to make sure all the entries point to valid frames
351*54e60f84SAndroid Build Coastguard Worker      *  except for intra frames by checking ref_frame_id[]. If missing frame
352*54e60f84SAndroid Build Coastguard Worker      *  is identified, application may choose to perform error recovery by
353*54e60f84SAndroid Build Coastguard Worker      *  pointing problematic index to an alternative frame buffer.
354*54e60f84SAndroid Build Coastguard Worker      *  Driver is not responsible to validate reference frames' id.
355*54e60f84SAndroid Build Coastguard Worker      */
356*54e60f84SAndroid Build Coastguard Worker     VASurfaceID             ref_frame_map[8];
357*54e60f84SAndroid Build Coastguard Worker 
358*54e60f84SAndroid Build Coastguard Worker     /** \brief Reference frame indices.
359*54e60f84SAndroid Build Coastguard Worker      *
360*54e60f84SAndroid Build Coastguard Worker      *  Contains a list of indices into ref_frame_map[8].
361*54e60f84SAndroid Build Coastguard Worker      *  It specifies the reference frame correspondence.
362*54e60f84SAndroid Build Coastguard Worker      *  The indices of the array are defined as [LAST_FRAME – LAST_FRAME,
363*54e60f84SAndroid Build Coastguard Worker      *  LAST2_FRAME – LAST_FRAME, …, ALTREF_FRAME – LAST_FRAME], where each
364*54e60f84SAndroid Build Coastguard Worker      *  symbol is defined as:
365*54e60f84SAndroid Build Coastguard Worker      *  enum{INTRA_FRAME = 0, LAST_FRAME, LAST2_FRAME, LAST3_FRAME, GOLDEN_FRAME,
366*54e60f84SAndroid Build Coastguard Worker      *  BWDREF_FRAME, ALTREF2_FRAME, ALTREF_FRAME};
367*54e60f84SAndroid Build Coastguard Worker      */
368*54e60f84SAndroid Build Coastguard Worker     uint8_t                 ref_frame_idx[7];
369*54e60f84SAndroid Build Coastguard Worker 
370*54e60f84SAndroid Build Coastguard Worker     /** \brief primary reference frame index
371*54e60f84SAndroid Build Coastguard Worker      *  Index into ref_frame_idx[], specifying which reference frame contains
372*54e60f84SAndroid Build Coastguard Worker      *  propagated info that should be loaded at the start of the frame.
373*54e60f84SAndroid Build Coastguard Worker      *  When value equals PRIMARY_REF_NONE (7), it indicates there is
374*54e60f84SAndroid Build Coastguard Worker      *  no primary reference frame.
375*54e60f84SAndroid Build Coastguard Worker      *  value range [0..7]
376*54e60f84SAndroid Build Coastguard Worker      */
377*54e60f84SAndroid Build Coastguard Worker     uint8_t                 primary_ref_frame;
378*54e60f84SAndroid Build Coastguard Worker 
379*54e60f84SAndroid Build Coastguard Worker     uint8_t                 order_hint;
380*54e60f84SAndroid Build Coastguard Worker 
381*54e60f84SAndroid Build Coastguard Worker     VASegmentationStructAV1 seg_info;
382*54e60f84SAndroid Build Coastguard Worker     VAFilmGrainStructAV1    film_grain_info;
383*54e60f84SAndroid Build Coastguard Worker 
384*54e60f84SAndroid Build Coastguard Worker     /** \brief tile structure
385*54e60f84SAndroid Build Coastguard Worker      *  When uniform_tile_spacing_flag == 1, width_in_sbs_minus_1[] and
386*54e60f84SAndroid Build Coastguard Worker      *  height_in_sbs_minus_1[] should be ignored, which will be generated
387*54e60f84SAndroid Build Coastguard Worker      *  by driver based on tile_cols and tile_rows.
388*54e60f84SAndroid Build Coastguard Worker      */
389*54e60f84SAndroid Build Coastguard Worker     uint8_t                 tile_cols;
390*54e60f84SAndroid Build Coastguard Worker     uint8_t                 tile_rows;
391*54e60f84SAndroid Build Coastguard Worker 
392*54e60f84SAndroid Build Coastguard Worker     /* The width/height of a tile minus 1 in units of superblocks. Though the
393*54e60f84SAndroid Build Coastguard Worker      * maximum number of tiles is 64, since ones of the last tile are computed
394*54e60f84SAndroid Build Coastguard Worker      * from ones of the other tiles and frame_width/height, they are not
395*54e60f84SAndroid Build Coastguard Worker      * necessarily specified.
396*54e60f84SAndroid Build Coastguard Worker      */
397*54e60f84SAndroid Build Coastguard Worker     uint16_t                width_in_sbs_minus_1[63];
398*54e60f84SAndroid Build Coastguard Worker     uint16_t                height_in_sbs_minus_1[63];
399*54e60f84SAndroid Build Coastguard Worker 
400*54e60f84SAndroid Build Coastguard Worker     /** \brief number of tiles minus 1 in large scale tile list
401*54e60f84SAndroid Build Coastguard Worker      *  Same as AV1 semantic element.
402*54e60f84SAndroid Build Coastguard Worker      *  Valid only when large_scale_tiles == 1.
403*54e60f84SAndroid Build Coastguard Worker      */
404*54e60f84SAndroid Build Coastguard Worker     uint16_t                tile_count_minus_1;
405*54e60f84SAndroid Build Coastguard Worker 
406*54e60f84SAndroid Build Coastguard Worker     /* specify the tile index for context updating */
407*54e60f84SAndroid Build Coastguard Worker     uint16_t                context_update_tile_id;
408*54e60f84SAndroid Build Coastguard Worker 
409*54e60f84SAndroid Build Coastguard Worker     union {
410*54e60f84SAndroid Build Coastguard Worker         struct {
411*54e60f84SAndroid Build Coastguard Worker             /** \brief flags for current picture
412*54e60f84SAndroid Build Coastguard Worker              *  same syntax and semantic as those in AV1 code
413*54e60f84SAndroid Build Coastguard Worker              */
414*54e60f84SAndroid Build Coastguard Worker 
415*54e60f84SAndroid Build Coastguard Worker             /** \brief Frame Type
416*54e60f84SAndroid Build Coastguard Worker              *  0:     KEY_FRAME;
417*54e60f84SAndroid Build Coastguard Worker              *  1:     INTER_FRAME;
418*54e60f84SAndroid Build Coastguard Worker              *  2:     INTRA_ONLY_FRAME;
419*54e60f84SAndroid Build Coastguard Worker              *  3:     SWITCH_FRAME
420*54e60f84SAndroid Build Coastguard Worker              *  For SWITCH_FRAME, application shall set error_resilient_mode = 1,
421*54e60f84SAndroid Build Coastguard Worker              *  refresh_frame_flags, etc. appropriately. And driver will convert it
422*54e60f84SAndroid Build Coastguard Worker              *  to INTER_FRAME.
423*54e60f84SAndroid Build Coastguard Worker              */
424*54e60f84SAndroid Build Coastguard Worker             uint32_t        frame_type                                  : 2;
425*54e60f84SAndroid Build Coastguard Worker             uint32_t        show_frame                                  : 1;
426*54e60f84SAndroid Build Coastguard Worker             uint32_t        showable_frame                              : 1;
427*54e60f84SAndroid Build Coastguard Worker             uint32_t        error_resilient_mode                        : 1;
428*54e60f84SAndroid Build Coastguard Worker             uint32_t        disable_cdf_update                          : 1;
429*54e60f84SAndroid Build Coastguard Worker             uint32_t        allow_screen_content_tools                  : 1;
430*54e60f84SAndroid Build Coastguard Worker             uint32_t        force_integer_mv                            : 1;
431*54e60f84SAndroid Build Coastguard Worker             uint32_t        allow_intrabc                               : 1;
432*54e60f84SAndroid Build Coastguard Worker             uint32_t        use_superres                                : 1;
433*54e60f84SAndroid Build Coastguard Worker             uint32_t        allow_high_precision_mv                     : 1;
434*54e60f84SAndroid Build Coastguard Worker             uint32_t        is_motion_mode_switchable                   : 1;
435*54e60f84SAndroid Build Coastguard Worker             uint32_t        use_ref_frame_mvs                           : 1;
436*54e60f84SAndroid Build Coastguard Worker             /* disable_frame_end_update_cdf is coded as refresh_frame_context. */
437*54e60f84SAndroid Build Coastguard Worker             uint32_t        disable_frame_end_update_cdf                : 1;
438*54e60f84SAndroid Build Coastguard Worker             uint32_t        uniform_tile_spacing_flag                   : 1;
439*54e60f84SAndroid Build Coastguard Worker             uint32_t        allow_warped_motion                         : 1;
440*54e60f84SAndroid Build Coastguard Worker             /** \brief indicate if current frame in large scale tile mode */
441*54e60f84SAndroid Build Coastguard Worker             uint32_t        large_scale_tile                            : 1;
442*54e60f84SAndroid Build Coastguard Worker 
443*54e60f84SAndroid Build Coastguard Worker             /** \brief Reserved bytes for future use, must be zero */
444*54e60f84SAndroid Build Coastguard Worker             uint32_t        reserved                                    : 15;
445*54e60f84SAndroid Build Coastguard Worker         } bits;
446*54e60f84SAndroid Build Coastguard Worker         uint32_t            value;
447*54e60f84SAndroid Build Coastguard Worker     } pic_info_fields;
448*54e60f84SAndroid Build Coastguard Worker 
449*54e60f84SAndroid Build Coastguard Worker     /** \brief Supper resolution scale denominator.
450*54e60f84SAndroid Build Coastguard Worker      *  When use_superres=1, superres_scale_denominator must be in the range [9..16].
451*54e60f84SAndroid Build Coastguard Worker      *  When use_superres=0, superres_scale_denominator must be 8.
452*54e60f84SAndroid Build Coastguard Worker      */
453*54e60f84SAndroid Build Coastguard Worker     uint8_t                 superres_scale_denominator;
454*54e60f84SAndroid Build Coastguard Worker 
455*54e60f84SAndroid Build Coastguard Worker     /** \brief Interpolation filter.
456*54e60f84SAndroid Build Coastguard Worker      *  value range [0..4]
457*54e60f84SAndroid Build Coastguard Worker      */
458*54e60f84SAndroid Build Coastguard Worker     uint8_t                 interp_filter;
459*54e60f84SAndroid Build Coastguard Worker 
460*54e60f84SAndroid Build Coastguard Worker     /** \brief luma loop filter levels.
461*54e60f84SAndroid Build Coastguard Worker      *  value range [0..63].
462*54e60f84SAndroid Build Coastguard Worker      */
463*54e60f84SAndroid Build Coastguard Worker     uint8_t                 filter_level[2];
464*54e60f84SAndroid Build Coastguard Worker 
465*54e60f84SAndroid Build Coastguard Worker     /** \brief chroma loop filter levels.
466*54e60f84SAndroid Build Coastguard Worker      *  value range [0..63].
467*54e60f84SAndroid Build Coastguard Worker      */
468*54e60f84SAndroid Build Coastguard Worker     uint8_t                 filter_level_u;
469*54e60f84SAndroid Build Coastguard Worker     uint8_t                 filter_level_v;
470*54e60f84SAndroid Build Coastguard Worker 
471*54e60f84SAndroid Build Coastguard Worker     union {
472*54e60f84SAndroid Build Coastguard Worker         struct {
473*54e60f84SAndroid Build Coastguard Worker             /** \brief flags for reference pictures
474*54e60f84SAndroid Build Coastguard Worker              *  same syntax and semantic as those in AV1 code
475*54e60f84SAndroid Build Coastguard Worker              */
476*54e60f84SAndroid Build Coastguard Worker             uint8_t         sharpness_level                             : 3;
477*54e60f84SAndroid Build Coastguard Worker             uint8_t         mode_ref_delta_enabled                      : 1;
478*54e60f84SAndroid Build Coastguard Worker             uint8_t         mode_ref_delta_update                       : 1;
479*54e60f84SAndroid Build Coastguard Worker 
480*54e60f84SAndroid Build Coastguard Worker             /** \brief Reserved bytes for future use, must be zero */
481*54e60f84SAndroid Build Coastguard Worker             uint8_t         reserved                                    : 3;
482*54e60f84SAndroid Build Coastguard Worker         } bits;
483*54e60f84SAndroid Build Coastguard Worker         uint8_t             value;
484*54e60f84SAndroid Build Coastguard Worker     } loop_filter_info_fields;
485*54e60f84SAndroid Build Coastguard Worker 
486*54e60f84SAndroid Build Coastguard Worker     /** \brief The adjustment needed for the filter level based on
487*54e60f84SAndroid Build Coastguard Worker      *  the chosen reference frame.
488*54e60f84SAndroid Build Coastguard Worker      *  value range [-64..63].
489*54e60f84SAndroid Build Coastguard Worker      */
490*54e60f84SAndroid Build Coastguard Worker     int8_t                  ref_deltas[8];
491*54e60f84SAndroid Build Coastguard Worker 
492*54e60f84SAndroid Build Coastguard Worker     /** \brief The adjustment needed for the filter level based on
493*54e60f84SAndroid Build Coastguard Worker      *  the chosen mode.
494*54e60f84SAndroid Build Coastguard Worker      *  value range [-64..63].
495*54e60f84SAndroid Build Coastguard Worker      */
496*54e60f84SAndroid Build Coastguard Worker     int8_t                  mode_deltas[2];
497*54e60f84SAndroid Build Coastguard Worker 
498*54e60f84SAndroid Build Coastguard Worker     /** \brief quantization
499*54e60f84SAndroid Build Coastguard Worker      */
500*54e60f84SAndroid Build Coastguard Worker     /** \brief Y AC index
501*54e60f84SAndroid Build Coastguard Worker      *  value range [0..255]
502*54e60f84SAndroid Build Coastguard Worker      */
503*54e60f84SAndroid Build Coastguard Worker     uint8_t                base_qindex;
504*54e60f84SAndroid Build Coastguard Worker     /** \brief Y DC delta from Y AC
505*54e60f84SAndroid Build Coastguard Worker      *  value range [-64..63]
506*54e60f84SAndroid Build Coastguard Worker      */
507*54e60f84SAndroid Build Coastguard Worker     int8_t                  y_dc_delta_q;
508*54e60f84SAndroid Build Coastguard Worker     /** \brief U DC delta from Y AC
509*54e60f84SAndroid Build Coastguard Worker      *  value range [-64..63]
510*54e60f84SAndroid Build Coastguard Worker      */
511*54e60f84SAndroid Build Coastguard Worker     int8_t                  u_dc_delta_q;
512*54e60f84SAndroid Build Coastguard Worker     /** \brief U AC delta from Y AC
513*54e60f84SAndroid Build Coastguard Worker      *  value range [-64..63]
514*54e60f84SAndroid Build Coastguard Worker      */
515*54e60f84SAndroid Build Coastguard Worker     int8_t                  u_ac_delta_q;
516*54e60f84SAndroid Build Coastguard Worker     /** \brief V DC delta from Y AC
517*54e60f84SAndroid Build Coastguard Worker      *  value range [-64..63]
518*54e60f84SAndroid Build Coastguard Worker      */
519*54e60f84SAndroid Build Coastguard Worker     int8_t                  v_dc_delta_q;
520*54e60f84SAndroid Build Coastguard Worker     /** \brief V AC delta from Y AC
521*54e60f84SAndroid Build Coastguard Worker      *  value range [-64..63]
522*54e60f84SAndroid Build Coastguard Worker      */
523*54e60f84SAndroid Build Coastguard Worker     int8_t                  v_ac_delta_q;
524*54e60f84SAndroid Build Coastguard Worker 
525*54e60f84SAndroid Build Coastguard Worker     /** \brief quantization_matrix
526*54e60f84SAndroid Build Coastguard Worker      */
527*54e60f84SAndroid Build Coastguard Worker     union {
528*54e60f84SAndroid Build Coastguard Worker         struct {
529*54e60f84SAndroid Build Coastguard Worker             uint16_t        using_qmatrix                               : 1;
530*54e60f84SAndroid Build Coastguard Worker             /** \brief qm level
531*54e60f84SAndroid Build Coastguard Worker              *  value range [0..15]
532*54e60f84SAndroid Build Coastguard Worker              *  Invalid if using_qmatrix equals 0.
533*54e60f84SAndroid Build Coastguard Worker              */
534*54e60f84SAndroid Build Coastguard Worker             uint16_t        qm_y                                        : 4;
535*54e60f84SAndroid Build Coastguard Worker             uint16_t        qm_u                                        : 4;
536*54e60f84SAndroid Build Coastguard Worker             uint16_t        qm_v                                        : 4;
537*54e60f84SAndroid Build Coastguard Worker 
538*54e60f84SAndroid Build Coastguard Worker             /** \brief Reserved bytes for future use, must be zero */
539*54e60f84SAndroid Build Coastguard Worker             uint16_t        reserved                                    : 3;
540*54e60f84SAndroid Build Coastguard Worker         } bits;
541*54e60f84SAndroid Build Coastguard Worker         uint16_t            value;
542*54e60f84SAndroid Build Coastguard Worker     } qmatrix_fields;
543*54e60f84SAndroid Build Coastguard Worker 
544*54e60f84SAndroid Build Coastguard Worker     union {
545*54e60f84SAndroid Build Coastguard Worker         struct {
546*54e60f84SAndroid Build Coastguard Worker             /** \brief delta_q parameters
547*54e60f84SAndroid Build Coastguard Worker              */
548*54e60f84SAndroid Build Coastguard Worker             uint32_t        delta_q_present_flag                        : 1;
549*54e60f84SAndroid Build Coastguard Worker             uint32_t        log2_delta_q_res                            : 2;
550*54e60f84SAndroid Build Coastguard Worker 
551*54e60f84SAndroid Build Coastguard Worker             /** \brief delta_lf parameters
552*54e60f84SAndroid Build Coastguard Worker              */
553*54e60f84SAndroid Build Coastguard Worker             uint32_t        delta_lf_present_flag                       : 1;
554*54e60f84SAndroid Build Coastguard Worker             uint32_t        log2_delta_lf_res                           : 2;
555*54e60f84SAndroid Build Coastguard Worker 
556*54e60f84SAndroid Build Coastguard Worker             /** \brief CONFIG_LOOPFILTER_LEVEL
557*54e60f84SAndroid Build Coastguard Worker              */
558*54e60f84SAndroid Build Coastguard Worker             uint32_t        delta_lf_multi                              : 1;
559*54e60f84SAndroid Build Coastguard Worker 
560*54e60f84SAndroid Build Coastguard Worker             /** \brief read_tx_mode
561*54e60f84SAndroid Build Coastguard Worker              *  value range [0..2]
562*54e60f84SAndroid Build Coastguard Worker              */
563*54e60f84SAndroid Build Coastguard Worker             uint32_t        tx_mode                                     : 2;
564*54e60f84SAndroid Build Coastguard Worker 
565*54e60f84SAndroid Build Coastguard Worker             /* AV1 frame reference mode semantic */
566*54e60f84SAndroid Build Coastguard Worker             uint32_t        reference_select                            : 1;
567*54e60f84SAndroid Build Coastguard Worker 
568*54e60f84SAndroid Build Coastguard Worker             uint32_t        reduced_tx_set_used                         : 1;
569*54e60f84SAndroid Build Coastguard Worker 
570*54e60f84SAndroid Build Coastguard Worker             uint32_t        skip_mode_present                           : 1;
571*54e60f84SAndroid Build Coastguard Worker 
572*54e60f84SAndroid Build Coastguard Worker             /** \brief Reserved bytes for future use, must be zero */
573*54e60f84SAndroid Build Coastguard Worker             uint32_t        reserved                                    : 20;
574*54e60f84SAndroid Build Coastguard Worker         } bits;
575*54e60f84SAndroid Build Coastguard Worker         uint32_t            value;
576*54e60f84SAndroid Build Coastguard Worker     } mode_control_fields;
577*54e60f84SAndroid Build Coastguard Worker 
578*54e60f84SAndroid Build Coastguard Worker     /** \brief CDEF parameters
579*54e60f84SAndroid Build Coastguard Worker      */
580*54e60f84SAndroid Build Coastguard Worker     /*  value range [0..3]  */
581*54e60f84SAndroid Build Coastguard Worker     uint8_t                 cdef_damping_minus_3;
582*54e60f84SAndroid Build Coastguard Worker     /*  value range [0..3]  */
583*54e60f84SAndroid Build Coastguard Worker     uint8_t                 cdef_bits;
584*54e60f84SAndroid Build Coastguard Worker 
585*54e60f84SAndroid Build Coastguard Worker     /** Encode cdef strength:
586*54e60f84SAndroid Build Coastguard Worker      *
587*54e60f84SAndroid Build Coastguard Worker      * The cdef_y_strengths[] and cdef_uv_strengths[] are expected to be packed
588*54e60f84SAndroid Build Coastguard Worker      * with both primary and secondary strength. The secondary strength is
589*54e60f84SAndroid Build Coastguard Worker      * given in the lower two bits and the primary strength is given in the next
590*54e60f84SAndroid Build Coastguard Worker      * four bits.
591*54e60f84SAndroid Build Coastguard Worker      *
592*54e60f84SAndroid Build Coastguard Worker      * cdef_y_strengths[] & cdef_uv_strengths[] should be derived as:
593*54e60f84SAndroid Build Coastguard Worker      * (cdef_y_strengths[]) = (cdef_y_pri_strength[] << 2) | (cdef_y_sec_strength[] & 0x03)
594*54e60f84SAndroid Build Coastguard Worker      * (cdef_uv_strengths[]) = (cdef_uv_pri_strength[] << 2) | (cdef_uv_sec_strength[] & 0x03)
595*54e60f84SAndroid Build Coastguard Worker      * In which, cdef_y_pri_strength[]/cdef_y_sec_strength[]/cdef_uv_pri_strength[]/cdef_uv_sec_strength[]
596*54e60f84SAndroid Build Coastguard Worker      * are variables defined in AV1 Spec 5.9.19. The cdef_y_strengths[] & cdef_uv_strengths[]
597*54e60f84SAndroid Build Coastguard Worker      * are corresponding to LIBAOM variables cm->cdef_strengths[] & cm->cdef_uv_strengths[] respectively.
598*54e60f84SAndroid Build Coastguard Worker      */
599*54e60f84SAndroid Build Coastguard Worker     /*  value range [0..63]  */
600*54e60f84SAndroid Build Coastguard Worker     uint8_t                 cdef_y_strengths[8];
601*54e60f84SAndroid Build Coastguard Worker     /*  value range [0..63]  */
602*54e60f84SAndroid Build Coastguard Worker     uint8_t                 cdef_uv_strengths[8];
603*54e60f84SAndroid Build Coastguard Worker 
604*54e60f84SAndroid Build Coastguard Worker     /** \brief loop restoration parameters
605*54e60f84SAndroid Build Coastguard Worker      */
606*54e60f84SAndroid Build Coastguard Worker     union {
607*54e60f84SAndroid Build Coastguard Worker         struct {
608*54e60f84SAndroid Build Coastguard Worker             uint16_t        yframe_restoration_type                     : 2;
609*54e60f84SAndroid Build Coastguard Worker             uint16_t        cbframe_restoration_type                    : 2;
610*54e60f84SAndroid Build Coastguard Worker             uint16_t        crframe_restoration_type                    : 2;
611*54e60f84SAndroid Build Coastguard Worker             uint16_t        lr_unit_shift                               : 2;
612*54e60f84SAndroid Build Coastguard Worker             uint16_t        lr_uv_shift                                 : 1;
613*54e60f84SAndroid Build Coastguard Worker 
614*54e60f84SAndroid Build Coastguard Worker             /** \brief Reserved bytes for future use, must be zero */
615*54e60f84SAndroid Build Coastguard Worker             uint16_t        reserved                                    : 7;
616*54e60f84SAndroid Build Coastguard Worker         } bits;
617*54e60f84SAndroid Build Coastguard Worker         uint16_t            value;
618*54e60f84SAndroid Build Coastguard Worker     } loop_restoration_fields;
619*54e60f84SAndroid Build Coastguard Worker 
620*54e60f84SAndroid Build Coastguard Worker     /** \brief global motion
621*54e60f84SAndroid Build Coastguard Worker      */
622*54e60f84SAndroid Build Coastguard Worker     VAWarpedMotionParamsAV1 wm[7];
623*54e60f84SAndroid Build Coastguard Worker 
624*54e60f84SAndroid Build Coastguard Worker     /**@}*/
625*54e60f84SAndroid Build Coastguard Worker 
626*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
627*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_MEDIUM];
628*54e60f84SAndroid Build Coastguard Worker } VADecPictureParameterBufferAV1;
629*54e60f84SAndroid Build Coastguard Worker 
630*54e60f84SAndroid Build Coastguard Worker 
631*54e60f84SAndroid Build Coastguard Worker /**
632*54e60f84SAndroid Build Coastguard Worker  * \brief AV1 Slice Parameter Buffer Structure
633*54e60f84SAndroid Build Coastguard Worker  *
634*54e60f84SAndroid Build Coastguard Worker  * This structure conveys parameters related to bit stream data and should be
635*54e60f84SAndroid Build Coastguard Worker  * sent once per tile.
636*54e60f84SAndroid Build Coastguard Worker  *
637*54e60f84SAndroid Build Coastguard Worker  * It uses the name VASliceParameterBufferAV1 to be consistent with other codec,
638*54e60f84SAndroid Build Coastguard Worker  * but actually means VATileParameterBufferAV1.
639*54e60f84SAndroid Build Coastguard Worker  *
640*54e60f84SAndroid Build Coastguard Worker  * Slice data buffer of VASliceDataBufferType is used
641*54e60f84SAndroid Build Coastguard Worker  * to send the bitstream.
642*54e60f84SAndroid Build Coastguard Worker  *
643*54e60f84SAndroid Build Coastguard Worker  * Please note that host decoder is responsible to parse out the
644*54e60f84SAndroid Build Coastguard Worker  * per tile information. And the bit stream in sent to driver in per
645*54e60f84SAndroid Build Coastguard Worker  * tile granularity.
646*54e60f84SAndroid Build Coastguard Worker  */
647*54e60f84SAndroid Build Coastguard Worker typedef struct _VASliceParameterBufferAV1 {
648*54e60f84SAndroid Build Coastguard Worker     /**@{*/
649*54e60f84SAndroid Build Coastguard Worker     /** \brief The byte count of current tile in the bitstream buffer,
650*54e60f84SAndroid Build Coastguard Worker      *  starting from first byte of the buffer.
651*54e60f84SAndroid Build Coastguard Worker      *  It uses the name slice_data_size to be consistent with other codec,
652*54e60f84SAndroid Build Coastguard Worker      *  but actually means tile_data_size.
653*54e60f84SAndroid Build Coastguard Worker      */
654*54e60f84SAndroid Build Coastguard Worker     uint32_t                slice_data_size;
655*54e60f84SAndroid Build Coastguard Worker     /**
656*54e60f84SAndroid Build Coastguard Worker      * offset to the first byte of the data buffer.
657*54e60f84SAndroid Build Coastguard Worker      */
658*54e60f84SAndroid Build Coastguard Worker     uint32_t                slice_data_offset;
659*54e60f84SAndroid Build Coastguard Worker     /**
660*54e60f84SAndroid Build Coastguard Worker      * see VA_SLICE_DATA_FLAG_XXX definitions
661*54e60f84SAndroid Build Coastguard Worker      */
662*54e60f84SAndroid Build Coastguard Worker     uint32_t                slice_data_flag;
663*54e60f84SAndroid Build Coastguard Worker 
664*54e60f84SAndroid Build Coastguard Worker     uint16_t                tile_row;
665*54e60f84SAndroid Build Coastguard Worker     uint16_t                tile_column;
666*54e60f84SAndroid Build Coastguard Worker 
667*54e60f84SAndroid Build Coastguard Worker     va_deprecated uint16_t  tg_start;
668*54e60f84SAndroid Build Coastguard Worker     va_deprecated uint16_t  tg_end;
669*54e60f84SAndroid Build Coastguard Worker     /** \brief anchor frame index for large scale tile.
670*54e60f84SAndroid Build Coastguard Worker      *  index into an array AnchorFrames of the frames that the tile uses
671*54e60f84SAndroid Build Coastguard Worker      *  for prediction.
672*54e60f84SAndroid Build Coastguard Worker      *  valid only when large_scale_tile equals 1.
673*54e60f84SAndroid Build Coastguard Worker      */
674*54e60f84SAndroid Build Coastguard Worker     uint8_t                 anchor_frame_idx;
675*54e60f84SAndroid Build Coastguard Worker 
676*54e60f84SAndroid Build Coastguard Worker     /** \brief tile index in the tile list.
677*54e60f84SAndroid Build Coastguard Worker      *  Valid only when large_scale_tile is enabled.
678*54e60f84SAndroid Build Coastguard Worker      *  Driver uses this field to decide the tile output location.
679*54e60f84SAndroid Build Coastguard Worker      */
680*54e60f84SAndroid Build Coastguard Worker     uint16_t                tile_idx_in_tile_list;
681*54e60f84SAndroid Build Coastguard Worker 
682*54e60f84SAndroid Build Coastguard Worker     /**@}*/
683*54e60f84SAndroid Build Coastguard Worker 
684*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
685*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
686*54e60f84SAndroid Build Coastguard Worker } VASliceParameterBufferAV1;
687*54e60f84SAndroid Build Coastguard Worker 
688*54e60f84SAndroid Build Coastguard Worker 
689*54e60f84SAndroid Build Coastguard Worker /**@}*/
690*54e60f84SAndroid Build Coastguard Worker 
691*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus
692*54e60f84SAndroid Build Coastguard Worker }
693*54e60f84SAndroid Build Coastguard Worker #endif
694*54e60f84SAndroid Build Coastguard Worker 
695*54e60f84SAndroid Build Coastguard Worker #endif /* VA_DEC_AV1_H */
696