xref: /aosp_15_r20/external/libva/va/va_enc_av1.h (revision 54e60f844a168e9a219354de272cd517ee8cd4b7)
1*54e60f84SAndroid Build Coastguard Worker /*
2*54e60f84SAndroid Build Coastguard Worker  * Copyright (c) 2021 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_enc_av1.h
27*54e60f84SAndroid Build Coastguard Worker  * \brief AV1 encoding API
28*54e60f84SAndroid Build Coastguard Worker  *
29*54e60f84SAndroid Build Coastguard Worker  * This file contains the \ref api_enc_av1 "AV1 encoding API".
30*54e60f84SAndroid Build Coastguard Worker  *
31*54e60f84SAndroid Build Coastguard Worker  */
32*54e60f84SAndroid Build Coastguard Worker 
33*54e60f84SAndroid Build Coastguard Worker #ifndef VA_ENC_AV1_H
34*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_AV1_H
35*54e60f84SAndroid Build Coastguard Worker 
36*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus
37*54e60f84SAndroid Build Coastguard Worker extern "C" {
38*54e60f84SAndroid Build Coastguard Worker #endif
39*54e60f84SAndroid Build Coastguard Worker 
40*54e60f84SAndroid Build Coastguard Worker #include <stdint.h>
41*54e60f84SAndroid Build Coastguard Worker 
42*54e60f84SAndroid Build Coastguard Worker /**
43*54e60f84SAndroid Build Coastguard Worker  * \defgroup api_enc_av1 AV1 encoding API
44*54e60f84SAndroid Build Coastguard Worker  *
45*54e60f84SAndroid Build Coastguard Worker  * This AV1 encoding API supports 8-bit/10bit 420 format only.
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 /** \brief Attribute value for VAConfigAttribEncAV1.
51*54e60f84SAndroid Build Coastguard Worker  *
52*54e60f84SAndroid Build Coastguard Worker  * This attribute decribes the supported features of an AV1
53*54e60f84SAndroid Build Coastguard Worker  * encoder configuration.
54*54e60f84SAndroid Build Coastguard Worker  *
55*54e60f84SAndroid Build Coastguard Worker  * All of the field values in this attribute are VA_FEATURE_* values,
56*54e60f84SAndroid Build Coastguard Worker  * indicating support for the corresponding feature.
57*54e60f84SAndroid Build Coastguard Worker  *
58*54e60f84SAndroid Build Coastguard Worker  */
59*54e60f84SAndroid Build Coastguard Worker typedef union _VAConfigAttribValEncAV1 {
60*54e60f84SAndroid Build Coastguard Worker     struct {
61*54e60f84SAndroid Build Coastguard Worker         /**
62*54e60f84SAndroid Build Coastguard Worker          * \brief Use 128x128 superblock.
63*54e60f84SAndroid Build Coastguard Worker          *
64*54e60f84SAndroid Build Coastguard Worker          * Allows setting use_128x128_superblock in the SPS.
65*54e60f84SAndroid Build Coastguard Worker          */
66*54e60f84SAndroid Build Coastguard Worker         uint32_t support_128x128_superblock     : 2;
67*54e60f84SAndroid Build Coastguard Worker         /**
68*54e60f84SAndroid Build Coastguard Worker          * \brief Intra  filter.
69*54e60f84SAndroid Build Coastguard Worker          * Allows setting enable_filter_intra in the SPS.
70*54e60f84SAndroid Build Coastguard Worker          */
71*54e60f84SAndroid Build Coastguard Worker         uint32_t support_filter_intra           : 2;
72*54e60f84SAndroid Build Coastguard Worker         /**
73*54e60f84SAndroid Build Coastguard Worker          * \brief  Intra edge filter.
74*54e60f84SAndroid Build Coastguard Worker          * Allows setting enable_intra_edge_filter in the SPS.
75*54e60f84SAndroid Build Coastguard Worker          */
76*54e60f84SAndroid Build Coastguard Worker         uint32_t support_intra_edge_filter      : 2;
77*54e60f84SAndroid Build Coastguard Worker         /**
78*54e60f84SAndroid Build Coastguard Worker          * \brief  Interintra compound.
79*54e60f84SAndroid Build Coastguard Worker          * Allows setting enable_interintra_compound in the SPS.
80*54e60f84SAndroid Build Coastguard Worker          */
81*54e60f84SAndroid Build Coastguard Worker         uint32_t support_interintra_compound    : 2;
82*54e60f84SAndroid Build Coastguard Worker         /**
83*54e60f84SAndroid Build Coastguard Worker          * \brief  Masked compound.
84*54e60f84SAndroid Build Coastguard Worker          * Allows setting enable_masked_compound in the SPS.
85*54e60f84SAndroid Build Coastguard Worker          */
86*54e60f84SAndroid Build Coastguard Worker         uint32_t support_masked_compound        : 2;
87*54e60f84SAndroid Build Coastguard Worker         /**
88*54e60f84SAndroid Build Coastguard Worker          * \brief  Warped motion.
89*54e60f84SAndroid Build Coastguard Worker          * Allows setting enable_warped_motion in the SPS.
90*54e60f84SAndroid Build Coastguard Worker          */
91*54e60f84SAndroid Build Coastguard Worker         uint32_t support_warped_motion          : 2;
92*54e60f84SAndroid Build Coastguard Worker         /**
93*54e60f84SAndroid Build Coastguard Worker          * \brief  Palette mode.
94*54e60f84SAndroid Build Coastguard Worker          * Allows setting palette_mode in the PPS.
95*54e60f84SAndroid Build Coastguard Worker          */
96*54e60f84SAndroid Build Coastguard Worker         uint32_t support_palette_mode           : 2;
97*54e60f84SAndroid Build Coastguard Worker         /**
98*54e60f84SAndroid Build Coastguard Worker          * \brief  Dual filter.
99*54e60f84SAndroid Build Coastguard Worker          * Allows setting enable_dual_filter in the SPS.
100*54e60f84SAndroid Build Coastguard Worker          */
101*54e60f84SAndroid Build Coastguard Worker         uint32_t support_dual_filter            : 2;
102*54e60f84SAndroid Build Coastguard Worker         /**
103*54e60f84SAndroid Build Coastguard Worker          * \brief  Jnt compound.
104*54e60f84SAndroid Build Coastguard Worker          * Allows setting enable_jnt_comp in the SPS.
105*54e60f84SAndroid Build Coastguard Worker          */
106*54e60f84SAndroid Build Coastguard Worker         uint32_t support_jnt_comp               : 2;
107*54e60f84SAndroid Build Coastguard Worker         /**
108*54e60f84SAndroid Build Coastguard Worker          * \brief  Refrence frame mvs.
109*54e60f84SAndroid Build Coastguard Worker          * Allows setting enable_ref_frame_mvs in the SPS.
110*54e60f84SAndroid Build Coastguard Worker          */
111*54e60f84SAndroid Build Coastguard Worker         uint32_t support_ref_frame_mvs          : 2;
112*54e60f84SAndroid Build Coastguard Worker         /**
113*54e60f84SAndroid Build Coastguard Worker          * \brief  Super resolution.
114*54e60f84SAndroid Build Coastguard Worker          * Allows setting enable_superres in the SPS.
115*54e60f84SAndroid Build Coastguard Worker          */
116*54e60f84SAndroid Build Coastguard Worker         uint32_t support_superres               : 2;
117*54e60f84SAndroid Build Coastguard Worker         /**
118*54e60f84SAndroid Build Coastguard Worker          * \brief  Restoration.
119*54e60f84SAndroid Build Coastguard Worker          * Allows setting enable_restoration in the SPS.
120*54e60f84SAndroid Build Coastguard Worker          */
121*54e60f84SAndroid Build Coastguard Worker         uint32_t support_restoration            : 2;
122*54e60f84SAndroid Build Coastguard Worker         /**
123*54e60f84SAndroid Build Coastguard Worker          * \brief  Allow intraBC.
124*54e60f84SAndroid Build Coastguard Worker          * Allows setting allow_intrabc in the PPS.
125*54e60f84SAndroid Build Coastguard Worker          */
126*54e60f84SAndroid Build Coastguard Worker         uint32_t support_allow_intrabc          : 2;
127*54e60f84SAndroid Build Coastguard Worker         /**
128*54e60f84SAndroid Build Coastguard Worker          * \brief  Cdef channel strength.
129*54e60f84SAndroid Build Coastguard Worker          * Allows setting cdef_y_strengths and cdef_uv_strengths in PPS.
130*54e60f84SAndroid Build Coastguard Worker          */
131*54e60f84SAndroid Build Coastguard Worker         uint32_t support_cdef_channel_strength  : 2;
132*54e60f84SAndroid Build Coastguard Worker         /** \brief Reserved bits for future, must be zero. */
133*54e60f84SAndroid Build Coastguard Worker         uint32_t reserved                       : 4;
134*54e60f84SAndroid Build Coastguard Worker     } bits;
135*54e60f84SAndroid Build Coastguard Worker     uint32_t value;
136*54e60f84SAndroid Build Coastguard Worker } VAConfigAttribValEncAV1;
137*54e60f84SAndroid Build Coastguard Worker 
138*54e60f84SAndroid Build Coastguard Worker /** \brief Attribute value for VAConfigAttribEncAV1Ext1. */
139*54e60f84SAndroid Build Coastguard Worker typedef union _VAConfigAttribValEncAV1Ext1 {
140*54e60f84SAndroid Build Coastguard Worker     struct {
141*54e60f84SAndroid Build Coastguard Worker         /**
142*54e60f84SAndroid Build Coastguard Worker          * \brief Fields indicate which types of interpolation filter are supported.
143*54e60f84SAndroid Build Coastguard Worker          * (interpolation_filter & 0x01) == 1: eight_tap filter is supported, 0: not.
144*54e60f84SAndroid Build Coastguard Worker          * (interpolation_filter & 0x02) == 1: eight_tap_smooth filter is supported, 0: not.
145*54e60f84SAndroid Build Coastguard Worker          * (interpolation_filter & 0x04) == 1: eight_sharp filter is supported, 0: not.
146*54e60f84SAndroid Build Coastguard Worker          * (interpolation_filter & 0x08) == 1: bilinear filter is supported, 0: not.
147*54e60f84SAndroid Build Coastguard Worker          * (interpolation_filter & 0x10) == 1: switchable filter is supported, 0: not.
148*54e60f84SAndroid Build Coastguard Worker          */
149*54e60f84SAndroid Build Coastguard Worker         uint32_t interpolation_filter          : 5;
150*54e60f84SAndroid Build Coastguard Worker         /**
151*54e60f84SAndroid Build Coastguard Worker          * \brief Min segmentId block size accepted.
152*54e60f84SAndroid Build Coastguard Worker          * Application need to send seg_id_block_size in PPS equal or larger than this value.
153*54e60f84SAndroid Build Coastguard Worker          */
154*54e60f84SAndroid Build Coastguard Worker         uint32_t min_segid_block_size_accepted : 8;
155*54e60f84SAndroid Build Coastguard Worker         /**
156*54e60f84SAndroid Build Coastguard Worker          * \brief Type of segment feature supported.
157*54e60f84SAndroid Build Coastguard Worker          * (segment_feature_support & 0x01) == 1: SEG_LVL_ALT_Q is supported, 0: not.
158*54e60f84SAndroid Build Coastguard Worker          * (segment_feature_support & 0x02) == 1: SEG_LVL_ALT_LF_Y_V is supported, 0: not.
159*54e60f84SAndroid Build Coastguard Worker          * (segment_feature_support & 0x04) == 1: SEG_LVL_ALT_LF_Y_H is supported, 0: not.
160*54e60f84SAndroid Build Coastguard Worker          * (segment_feature_support & 0x08) == 1: SEG_LVL_ALT_LF_U is supported, 0: not.
161*54e60f84SAndroid Build Coastguard Worker          * (segment_feature_support & 0x10) == 1: SEG_LVL_ALT_LF_V is supported, 0: not.
162*54e60f84SAndroid Build Coastguard Worker          * (segment_feature_support & 0x20) == 1: SEG_LVL_REF_FRAME is supported, 0: not.
163*54e60f84SAndroid Build Coastguard Worker          * (segment_feature_support & 0x40) == 1: SEG_LVL_SKIP is supported, 0: not.
164*54e60f84SAndroid Build Coastguard Worker          * (segment_feature_support & 0x80) == 1: SEG_LVL_GLOBALMV is supported, 0: not.
165*54e60f84SAndroid Build Coastguard Worker          */
166*54e60f84SAndroid Build Coastguard Worker         uint32_t segment_feature_support       : 8;
167*54e60f84SAndroid Build Coastguard Worker         /** \brief Reserved bits for future, must be zero. */
168*54e60f84SAndroid Build Coastguard Worker         uint32_t reserved                      : 11;
169*54e60f84SAndroid Build Coastguard Worker     } bits;
170*54e60f84SAndroid Build Coastguard Worker     uint32_t value;
171*54e60f84SAndroid Build Coastguard Worker } VAConfigAttribValEncAV1Ext1;
172*54e60f84SAndroid Build Coastguard Worker 
173*54e60f84SAndroid Build Coastguard Worker /** \brief Attribute value for VAConfigAttribEncAV1Ext2. */
174*54e60f84SAndroid Build Coastguard Worker typedef union _VAConfigAttribValEncAV1Ext2 {
175*54e60f84SAndroid Build Coastguard Worker     struct {
176*54e60f84SAndroid Build Coastguard Worker         /**
177*54e60f84SAndroid Build Coastguard Worker         * \brief Tile size bytes minus1.
178*54e60f84SAndroid Build Coastguard Worker         * Specify the number of bytes needed to code tile size supported.
179*54e60f84SAndroid Build Coastguard Worker         * This value need to be set in frame header obu.
180*54e60f84SAndroid Build Coastguard Worker         */
181*54e60f84SAndroid Build Coastguard Worker         uint32_t tile_size_bytes_minus1        : 2;
182*54e60f84SAndroid Build Coastguard Worker         /**
183*54e60f84SAndroid Build Coastguard Worker         * \brief Tile size bytes minus1.
184*54e60f84SAndroid Build Coastguard Worker         * Specify the fixed number of bytes needed to code syntax obu_size.
185*54e60f84SAndroid Build Coastguard Worker         */
186*54e60f84SAndroid Build Coastguard Worker         uint32_t obu_size_bytes_minus1         : 2;
187*54e60f84SAndroid Build Coastguard Worker         /**
188*54e60f84SAndroid Build Coastguard Worker          * \brief tx_mode supported.
189*54e60f84SAndroid Build Coastguard Worker          * (tx_mode_support & 0x01) == 1: ONLY_4X4 is supported, 0: not.
190*54e60f84SAndroid Build Coastguard Worker          * (tx_mode_support & 0x02) == 1: TX_MODE_LARGEST is supported, 0: not.
191*54e60f84SAndroid Build Coastguard Worker          * (tx_mode_support & 0x04) == 1: TX_MODE_SELECT is supported, 0: not.
192*54e60f84SAndroid Build Coastguard Worker          */
193*54e60f84SAndroid Build Coastguard Worker         uint32_t tx_mode_support               : 3;
194*54e60f84SAndroid Build Coastguard Worker         /**
195*54e60f84SAndroid Build Coastguard Worker          * \brief Max tile num minus1.
196*54e60f84SAndroid Build Coastguard Worker          * Specify the max number of tile supported by driver.
197*54e60f84SAndroid Build Coastguard Worker          */
198*54e60f84SAndroid Build Coastguard Worker         uint32_t max_tile_num_minus1           : 13;
199*54e60f84SAndroid Build Coastguard Worker         /** \brief Reserved bits for future, must be zero. */
200*54e60f84SAndroid Build Coastguard Worker         uint32_t reserved                      : 12;
201*54e60f84SAndroid Build Coastguard Worker     } bits;
202*54e60f84SAndroid Build Coastguard Worker     uint32_t value;
203*54e60f84SAndroid Build Coastguard Worker } VAConfigAttribValEncAV1Ext2;
204*54e60f84SAndroid Build Coastguard Worker 
205*54e60f84SAndroid Build Coastguard Worker /**
206*54e60f84SAndroid Build Coastguard Worker  * \brief Packed header types specific to AV1 encoding.
207*54e60f84SAndroid Build Coastguard Worker  *
208*54e60f84SAndroid Build Coastguard Worker  * Types of packed headers generally used for AV1 encoding.
209*54e60f84SAndroid Build Coastguard Worker  *
210*54e60f84SAndroid Build Coastguard Worker  */
211*54e60f84SAndroid Build Coastguard Worker typedef enum {
212*54e60f84SAndroid Build Coastguard Worker     /**
213*54e60f84SAndroid Build Coastguard Worker      * \brief Packed Sequence Parameter Set (SPS).
214*54e60f84SAndroid Build Coastguard Worker      *
215*54e60f84SAndroid Build Coastguard Worker      * The corresponding packed header data buffer shall contain the
216*54e60f84SAndroid Build Coastguard Worker      * complete sequence_header_obu() syntax element.
217*54e60f84SAndroid Build Coastguard Worker      *
218*54e60f84SAndroid Build Coastguard Worker      */
219*54e60f84SAndroid Build Coastguard Worker     VAEncPackedHeaderAV1_SPS = VAEncPackedHeaderSequence,
220*54e60f84SAndroid Build Coastguard Worker     /**
221*54e60f84SAndroid Build Coastguard Worker      * \brief Packed Picture Parameter Set (PPS).
222*54e60f84SAndroid Build Coastguard Worker      *
223*54e60f84SAndroid Build Coastguard Worker      * The corresponding packed header data buffer shall contain the
224*54e60f84SAndroid Build Coastguard Worker      * complete frame_header_obu() syntax element.
225*54e60f84SAndroid Build Coastguard Worker      *
226*54e60f84SAndroid Build Coastguard Worker      */
227*54e60f84SAndroid Build Coastguard Worker     VAEncPackedHeaderAV1_PPS = VAEncPackedHeaderPicture,
228*54e60f84SAndroid Build Coastguard Worker } VAEncPackedHeaderTypeAV1;
229*54e60f84SAndroid Build Coastguard Worker 
230*54e60f84SAndroid Build Coastguard Worker /**
231*54e60f84SAndroid Build Coastguard Worker  * \brief AV1 Encoding Sequence Parameter Buffer Structure.
232*54e60f84SAndroid Build Coastguard Worker  *
233*54e60f84SAndroid Build Coastguard Worker  * This structure conveys sequence level parameters.
234*54e60f84SAndroid Build Coastguard Worker  *
235*54e60f84SAndroid Build Coastguard Worker  */
236*54e60f84SAndroid Build Coastguard Worker typedef struct  _VAEncSequenceParameterBufferAV1 {
237*54e60f84SAndroid Build Coastguard Worker     /** \brief AV1 profile setting.
238*54e60f84SAndroid Build Coastguard Worker      *  value range [0..2].
239*54e60f84SAndroid Build Coastguard Worker      */
240*54e60f84SAndroid Build Coastguard Worker     uint8_t     seq_profile;
241*54e60f84SAndroid Build Coastguard Worker 
242*54e60f84SAndroid Build Coastguard Worker     /** \brief Level Setting of current operation point.
243*54e60f84SAndroid Build Coastguard Worker      *  value range [0..23].
244*54e60f84SAndroid Build Coastguard Worker      */
245*54e60f84SAndroid Build Coastguard Worker     uint8_t     seq_level_idx;
246*54e60f84SAndroid Build Coastguard Worker 
247*54e60f84SAndroid Build Coastguard Worker     /** \brief Tier Setting of current operation point.
248*54e60f84SAndroid Build Coastguard Worker      *  value range [0..1].
249*54e60f84SAndroid Build Coastguard Worker      */
250*54e60f84SAndroid Build Coastguard Worker     uint8_t     seq_tier;
251*54e60f84SAndroid Build Coastguard Worker 
252*54e60f84SAndroid Build Coastguard Worker     /** \brief Indicates whether or not the encoding is in dyadic hierarchical GOP structure.
253*54e60f84SAndroid Build Coastguard Worker      *  value range [0..1].
254*54e60f84SAndroid Build Coastguard Worker      */
255*54e60f84SAndroid Build Coastguard Worker     uint8_t     hierarchical_flag;
256*54e60f84SAndroid Build Coastguard Worker 
257*54e60f84SAndroid Build Coastguard Worker     /** \brief Period between intra_only frames. */
258*54e60f84SAndroid Build Coastguard Worker     uint32_t    intra_period;
259*54e60f84SAndroid Build Coastguard Worker 
260*54e60f84SAndroid Build Coastguard Worker     /** \brief Period between I/P frames.
261*54e60f84SAndroid Build Coastguard Worker      *  For hierarchical structure, this is the anchor frame distance.
262*54e60f84SAndroid Build Coastguard Worker      */
263*54e60f84SAndroid Build Coastguard Worker     uint32_t    ip_period;
264*54e60f84SAndroid Build Coastguard Worker 
265*54e60f84SAndroid Build Coastguard Worker     /* \brief RC related fields. RC modes are set with VAConfigAttribRateControl. */
266*54e60f84SAndroid Build Coastguard Worker     /* For AV1, CBR implies HRD conformance and VBR implies no HRD conformance. */
267*54e60f84SAndroid Build Coastguard Worker 
268*54e60f84SAndroid Build Coastguard Worker     /**
269*54e60f84SAndroid Build Coastguard Worker      * \brief Initial bitrate set for this sequence in CBR or VBR modes.
270*54e60f84SAndroid Build Coastguard Worker      *
271*54e60f84SAndroid Build Coastguard Worker      * This field represents the initial bitrate value for CBR mode or
272*54e60f84SAndroid Build Coastguard Worker      * initial max bitrate value for VBR mode in this sequence.
273*54e60f84SAndroid Build Coastguard Worker      * i.e. if the encoder pipeline was created with a #VAConfigAttribRateControl
274*54e60f84SAndroid Build Coastguard Worker      * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR.
275*54e60f84SAndroid Build Coastguard Worker      *
276*54e60f84SAndroid Build Coastguard Worker      * The bitrate can be modified later on through
277*54e60f84SAndroid Build Coastguard Worker      * #VAEncMiscParameterRateControl buffers.
278*54e60f84SAndroid Build Coastguard Worker      */
279*54e60f84SAndroid Build Coastguard Worker     uint32_t    bits_per_second;
280*54e60f84SAndroid Build Coastguard Worker 
281*54e60f84SAndroid Build Coastguard Worker     union {
282*54e60f84SAndroid Build Coastguard Worker         struct {
283*54e60f84SAndroid Build Coastguard Worker             /** \brief Still picture encoding, no inter frame referencing. */
284*54e60f84SAndroid Build Coastguard Worker             uint32_t    still_picture                               : 1;
285*54e60f84SAndroid Build Coastguard Worker             /** \brief Force using 128x128 or 64x64 Supper block */
286*54e60f84SAndroid Build Coastguard Worker             uint32_t    use_128x128_superblock                      : 1;
287*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
288*54e60f84SAndroid Build Coastguard Worker             uint32_t    enable_filter_intra                         : 1;
289*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
290*54e60f84SAndroid Build Coastguard Worker             uint32_t    enable_intra_edge_filter                    : 1;
291*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
292*54e60f84SAndroid Build Coastguard Worker             uint32_t    enable_interintra_compound                  : 1;
293*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
294*54e60f84SAndroid Build Coastguard Worker             uint32_t    enable_masked_compound                      : 1;
295*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
296*54e60f84SAndroid Build Coastguard Worker             uint32_t    enable_warped_motion                        : 1;
297*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
298*54e60f84SAndroid Build Coastguard Worker             uint32_t    enable_dual_filter                          : 1;
299*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
300*54e60f84SAndroid Build Coastguard Worker             uint32_t    enable_order_hint                           : 1;
301*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
302*54e60f84SAndroid Build Coastguard Worker             uint32_t    enable_jnt_comp                             : 1;
303*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
304*54e60f84SAndroid Build Coastguard Worker             uint32_t    enable_ref_frame_mvs                        : 1;
305*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
306*54e60f84SAndroid Build Coastguard Worker             uint32_t    enable_superres                             : 1;
307*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
308*54e60f84SAndroid Build Coastguard Worker             uint32_t    enable_cdef                                 : 1;
309*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
310*54e60f84SAndroid Build Coastguard Worker             uint32_t    enable_restoration                          : 1;
311*54e60f84SAndroid Build Coastguard Worker             /** \brief Sepcify number of bits for every channel(Y, U or V). */
312*54e60f84SAndroid Build Coastguard Worker             uint32_t    bit_depth_minus8                            : 3;
313*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
314*54e60f84SAndroid Build Coastguard Worker             uint32_t    subsampling_x                               : 1;
315*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
316*54e60f84SAndroid Build Coastguard Worker             uint32_t    subsampling_y                               : 1;
317*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
318*54e60f84SAndroid Build Coastguard Worker             uint32_t    mono_chrome                                 : 1;
319*54e60f84SAndroid Build Coastguard Worker             /** \brief Reserved bytes for future use, must be zero. */
320*54e60f84SAndroid Build Coastguard Worker             uint32_t    reserved_bits                               : 12;
321*54e60f84SAndroid Build Coastguard Worker         } bits;
322*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
323*54e60f84SAndroid Build Coastguard Worker     } seq_fields;
324*54e60f84SAndroid Build Coastguard Worker 
325*54e60f84SAndroid Build Coastguard Worker     /** \brief Corresponds to AV1 syntax element of the same name.
326*54e60f84SAndroid Build Coastguard Worker      *  value range [0..7].
327*54e60f84SAndroid Build Coastguard Worker      */
328*54e60f84SAndroid Build Coastguard Worker     uint8_t     order_hint_bits_minus_1;
329*54e60f84SAndroid Build Coastguard Worker 
330*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
331*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_HIGH];
332*54e60f84SAndroid Build Coastguard Worker } VAEncSequenceParameterBufferAV1;
333*54e60f84SAndroid Build Coastguard Worker 
334*54e60f84SAndroid Build Coastguard Worker #define VA_AV1_MAX_SEGMENTS    8
335*54e60f84SAndroid Build Coastguard Worker #define VA_AV1_SEG_LVL_MAX     8
336*54e60f84SAndroid Build Coastguard Worker 
337*54e60f84SAndroid Build Coastguard Worker /**
338*54e60f84SAndroid Build Coastguard Worker  * \brief Segment parameters
339*54e60f84SAndroid Build Coastguard Worker  */
340*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncSegParamAV1 {
341*54e60f84SAndroid Build Coastguard Worker     union {
342*54e60f84SAndroid Build Coastguard Worker         struct {
343*54e60f84SAndroid Build Coastguard Worker             /** \brief Indicates if segmentation is enabled in the current frame.
344*54e60f84SAndroid Build Coastguard Worker              *  If disabled, all the below parameters in the structure should
345*54e60f84SAndroid Build Coastguard Worker              *  be set to 0, and ignored by driver.
346*54e60f84SAndroid Build Coastguard Worker              */
347*54e60f84SAndroid Build Coastguard Worker             uint8_t     segmentation_enabled            : 1;
348*54e60f84SAndroid Build Coastguard Worker 
349*54e60f84SAndroid Build Coastguard Worker             /**
350*54e60f84SAndroid Build Coastguard Worker              *  When segmentation_enabled equals 1 and segment_number > 0,
351*54e60f84SAndroid Build Coastguard Worker              *  this parameter equals 1 indicates the segmentation map may
352*54e60f84SAndroid Build Coastguard Worker              *  come from application, and that "Segment map data buffer"
353*54e60f84SAndroid Build Coastguard Worker              *  should be provided with populated segment_id. If equals 0,
354*54e60f84SAndroid Build Coastguard Worker              *  segmentation map should be inherited from a reference frame
355*54e60f84SAndroid Build Coastguard Worker              *  (specified by \c primary_ref_frame). When segmentation_enabled or
356*54e60f84SAndroid Build Coastguard Worker              *  segment_number equals 0, this parameter should be set to 0
357*54e60f84SAndroid Build Coastguard Worker              *  and ignored by driver.
358*54e60f84SAndroid Build Coastguard Worker              */
359*54e60f84SAndroid Build Coastguard Worker             uint8_t     segmentation_update_map         : 1;
360*54e60f84SAndroid Build Coastguard Worker             /**
361*54e60f84SAndroid Build Coastguard Worker              * When segmentation_update_map equals 1, this parameter equaling 1
362*54e60f84SAndroid Build Coastguard Worker              * indicates segment id per block will be determined either from
363*54e60f84SAndroid Build Coastguard Worker              * reference frame or from app. Equaling 0 means segment id per block
364*54e60f84SAndroid Build Coastguard Worker              * will come from app. When segmentation_temporal_update equals 0,
365*54e60f84SAndroid Build Coastguard Worker              * this parameter should be set to 0 and ignored by driver.
366*54e60f84SAndroid Build Coastguard Worker             */
367*54e60f84SAndroid Build Coastguard Worker             uint8_t     segmentation_temporal_update    : 1;
368*54e60f84SAndroid Build Coastguard Worker             /** \brief Reserved bytes for future use, must be zero. */
369*54e60f84SAndroid Build Coastguard Worker             uint8_t     reserved                        : 5;
370*54e60f84SAndroid Build Coastguard Worker 
371*54e60f84SAndroid Build Coastguard Worker         } bits;
372*54e60f84SAndroid Build Coastguard Worker         uint8_t value;
373*54e60f84SAndroid Build Coastguard Worker     } seg_flags;
374*54e60f84SAndroid Build Coastguard Worker 
375*54e60f84SAndroid Build Coastguard Worker     /**
376*54e60f84SAndroid Build Coastguard Worker      *  If segmentation_enabled equals 1, this parameter indicates
377*54e60f84SAndroid Build Coastguard Worker      *  the number of segments conveyed through VAAPI. In this case,
378*54e60f84SAndroid Build Coastguard Worker      *  if segment_number equals 0, it will force the driver to determine
379*54e60f84SAndroid Build Coastguard Worker      *  how many segments would be created as well as the segmentation map
380*54e60f84SAndroid Build Coastguard Worker      *  to be generated. Also the driver shall write the segmentation_params()
381*54e60f84SAndroid Build Coastguard Worker      *  syntax in the uncompressed header at \c bit_offset_segmentation (back-annotation).
382*54e60f84SAndroid Build Coastguard Worker      *  In application, the rest parameters in this structure should be all
383*54e60f84SAndroid Build Coastguard Worker      *  set to 0 and ignored by driver. And app should NOT send the
384*54e60f84SAndroid Build Coastguard Worker      *  "Segment map data buffer". In packed uncompressed header
385*54e60f84SAndroid Build Coastguard Worker      *  bitstream, app should write syntax element segmentation_enabled
386*54e60f84SAndroid Build Coastguard Worker      *  as 0 and segmentation_params() should be only 1-bit-long.
387*54e60f84SAndroid Build Coastguard Worker      *  If segment_number > 0, and segmentation_update_map = 1, app should provide
388*54e60f84SAndroid Build Coastguard Worker      *  the "Segment map data buffer" and populate the rest of the
389*54e60f84SAndroid Build Coastguard Worker      *  current data structure. And that underline encoder would honor
390*54e60f84SAndroid Build Coastguard Worker      *  the segmentation parameters feature_data[0..segment_number-1][]
391*54e60f84SAndroid Build Coastguard Worker      *  and feature_mask[0..segment_number-1], etc.
392*54e60f84SAndroid Build Coastguard Worker      *  Value range [0..8].
393*54e60f84SAndroid Build Coastguard Worker      */
394*54e60f84SAndroid Build Coastguard Worker     uint8_t      segment_number;
395*54e60f84SAndroid Build Coastguard Worker 
396*54e60f84SAndroid Build Coastguard Worker     /** \brief segment parameters.
397*54e60f84SAndroid Build Coastguard Worker      *  feature_data[][] is equivalent to variable FeatureData[][] in spec,
398*54e60f84SAndroid Build Coastguard Worker      *  which is after clip3() operation.
399*54e60f84SAndroid Build Coastguard Worker      *  Clip3(x, y, z) = (z<x)? x : ((z > y)? y : z);
400*54e60f84SAndroid Build Coastguard Worker      *  The limit is defined in Segmentation_Feature_Max[ SEG_LVL_MAX ] = {
401*54e60f84SAndroid Build Coastguard Worker      *  255, MAX_LOOP_FILTER, MAX_LOOP_FILTER, MAX_LOOP_FILTER,
402*54e60f84SAndroid Build Coastguard Worker      *  MAX_LOOP_FILTER, 7, 0, 0 }
403*54e60f84SAndroid Build Coastguard Worker      */
404*54e60f84SAndroid Build Coastguard Worker     int16_t     feature_data[VA_AV1_MAX_SEGMENTS][VA_AV1_SEG_LVL_MAX];
405*54e60f84SAndroid Build Coastguard Worker 
406*54e60f84SAndroid Build Coastguard Worker     /** \brief Bit field to indicate each feature is enabled or not per
407*54e60f84SAndroid Build Coastguard Worker      *  segment_id. Each bit is the feature_id.
408*54e60f84SAndroid Build Coastguard Worker      */
409*54e60f84SAndroid Build Coastguard Worker     uint8_t     feature_mask[VA_AV1_MAX_SEGMENTS];
410*54e60f84SAndroid Build Coastguard Worker 
411*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero. */
412*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
413*54e60f84SAndroid Build Coastguard Worker } VAEncSegParamAV1;
414*54e60f84SAndroid Build Coastguard Worker 
415*54e60f84SAndroid Build Coastguard Worker /**
416*54e60f84SAndroid Build Coastguard Worker  * \brief Segment map data buffer.
417*54e60f84SAndroid Build Coastguard Worker  *
418*54e60f84SAndroid Build Coastguard Worker  * This buffer is optional depending on the value of av1_segments.segmentation_enabled.
419*54e60f84SAndroid Build Coastguard Worker  * If av1_segments.segmentation_enabled in the picture parameters equals 1,
420*54e60f84SAndroid Build Coastguard Worker  * and RateControlMethod is not CQP and this surface is not provided by App,
421*54e60f84SAndroid Build Coastguard Worker  * the encoder will determine the per block segmentation map. In this case,
422*54e60f84SAndroid Build Coastguard Worker  * App should not provide the segmentation parameter data structure
423*54e60f84SAndroid Build Coastguard Worker  * in frame header as well. If av1_segments.segmentation_enabled equals 1
424*54e60f84SAndroid Build Coastguard Worker  * and the segmentation map buffer is provided, app should embed the
425*54e60f84SAndroid Build Coastguard Worker  * segmentation info in frame header, populate the VAEncSegParamAV1 structure with
426*54e60f84SAndroid Build Coastguard Worker  * #VAEncMacroblockMapBufferType and the driver as well as the underline encoder
427*54e60f84SAndroid Build Coastguard Worker  * should honor what is given by the app.
428*54e60f84SAndroid Build Coastguard Worker  */
429*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncSegMapBufferAV1 {
430*54e60f84SAndroid Build Coastguard Worker     /** \brief Segment map data size. */
431*54e60f84SAndroid Build Coastguard Worker     uint32_t    segmentMapDataSize;
432*54e60f84SAndroid Build Coastguard Worker 
433*54e60f84SAndroid Build Coastguard Worker     /**
434*54e60f84SAndroid Build Coastguard Worker      * \brief Segment map.
435*54e60f84SAndroid Build Coastguard Worker      * Size of this map is indicated by \ref segmentMapDataSize and each element
436*54e60f84SAndroid Build Coastguard Worker      * in this map contains the segment id of a particular block.
437*54e60f84SAndroid Build Coastguard Worker      * The element is indexed by raster scan order.
438*54e60f84SAndroid Build Coastguard Worker      * The value of each entry should be in the range [0..7], inclusive.
439*54e60f84SAndroid Build Coastguard Worker      */
440*54e60f84SAndroid Build Coastguard Worker     uint8_t    *pSegmentMap;
441*54e60f84SAndroid Build Coastguard Worker } VAEncSegMapBufferAV1;
442*54e60f84SAndroid Build Coastguard Worker 
443*54e60f84SAndroid Build Coastguard Worker typedef enum {
444*54e60f84SAndroid Build Coastguard Worker     /** \brief Identity transformation, 0-parameter. */
445*54e60f84SAndroid Build Coastguard Worker     VAAV1EncTransformationIdentity           = 0,
446*54e60f84SAndroid Build Coastguard Worker     /** \brief Translational motion, 2-parameter. */
447*54e60f84SAndroid Build Coastguard Worker     VAAV1EncTransformationTranslation        = 1,
448*54e60f84SAndroid Build Coastguard Worker     /** \brief Simplified affine with rotation + zoom only, 4-parameter. */
449*54e60f84SAndroid Build Coastguard Worker     VAAV1EncTransformationRotzoom            = 2,
450*54e60f84SAndroid Build Coastguard Worker     /** \brief Affine, 6-parameter. */
451*54e60f84SAndroid Build Coastguard Worker     VAAV1EncTransformationAffine             = 3,
452*54e60f84SAndroid Build Coastguard Worker     /** \brief Transformation count. */
453*54e60f84SAndroid Build Coastguard Worker     VAAV1EncTransformationCount
454*54e60f84SAndroid Build Coastguard Worker } VAEncTransformationTypeAV1;
455*54e60f84SAndroid Build Coastguard Worker 
456*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncWarpedMotionParamsAV1 {
457*54e60f84SAndroid Build Coastguard Worker 
458*54e60f84SAndroid Build Coastguard Worker     /** \brief Specify the type of warped motion. */
459*54e60f84SAndroid Build Coastguard Worker     VAEncTransformationTypeAV1  wmtype;
460*54e60f84SAndroid Build Coastguard Worker 
461*54e60f84SAndroid Build Coastguard Worker     /** \brief Specify warp motion parameters.
462*54e60f84SAndroid Build Coastguard Worker      *  wm.wmmat[] corresponds to gm_params[][] in spec.
463*54e60f84SAndroid Build Coastguard Worker      *  Details in AV1 spec section 5.9.24 or refer to libaom code
464*54e60f84SAndroid Build Coastguard Worker      *  https://aomedia.googlesource.com/aom/+/refs/heads/master/av1/decoder/decodeframe.c.
465*54e60f84SAndroid Build Coastguard Worker      */
466*54e60f84SAndroid Build Coastguard Worker     int32_t                 wmmat[8];
467*54e60f84SAndroid Build Coastguard Worker 
468*54e60f84SAndroid Build Coastguard Worker     /** \brief Valid or invalid on affine set. */
469*54e60f84SAndroid Build Coastguard Worker     uint8_t                 invalid;
470*54e60f84SAndroid Build Coastguard Worker 
471*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero. */
472*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
473*54e60f84SAndroid Build Coastguard Worker 
474*54e60f84SAndroid Build Coastguard Worker } VAEncWarpedMotionParamsAV1;
475*54e60f84SAndroid Build Coastguard Worker 
476*54e60f84SAndroid Build Coastguard Worker /**
477*54e60f84SAndroid Build Coastguard Worker  * \brief Reference frame control.
478*54e60f84SAndroid Build Coastguard Worker  *
479*54e60f84SAndroid Build Coastguard Worker  * Suggest which frame to be used as reference along with preferred search order.
480*54e60f84SAndroid Build Coastguard Worker  *
481*54e60f84SAndroid Build Coastguard Worker  * search_idx#: index into ref_frame_idx[] to indicate that frame will be included
482*54e60f84SAndroid Build Coastguard Worker  * in the reference list if value in range [1..7]. Invalid when value is 0.
483*54e60f84SAndroid Build Coastguard Worker  * The order of the search_idx# indicates the preferred search order.
484*54e60f84SAndroid Build Coastguard Worker  *
485*54e60f84SAndroid Build Coastguard Worker  */
486*54e60f84SAndroid Build Coastguard Worker typedef union {
487*54e60f84SAndroid Build Coastguard Worker     struct {
488*54e60f84SAndroid Build Coastguard Worker         /**
489*54e60f84SAndroid Build Coastguard Worker          * \brief Value used as index into ref_frame_idx[] to indicate that frame
490*54e60f84SAndroid Build Coastguard Worker          * will be included in the reference list.
491*54e60f84SAndroid Build Coastguard Worker          * valid value range: [1..7], invalid when value is 0.
492*54e60f84SAndroid Build Coastguard Worker          */
493*54e60f84SAndroid Build Coastguard Worker         uint32_t search_idx0 : 3;
494*54e60f84SAndroid Build Coastguard Worker         /**
495*54e60f84SAndroid Build Coastguard Worker          * \brief Value used as index into ref_frame_idx[] to indicate that frame
496*54e60f84SAndroid Build Coastguard Worker          * will be included in the reference list.
497*54e60f84SAndroid Build Coastguard Worker          * valid value range: [1..7], invalid when value is 0.
498*54e60f84SAndroid Build Coastguard Worker          */
499*54e60f84SAndroid Build Coastguard Worker         uint32_t search_idx1 : 3;
500*54e60f84SAndroid Build Coastguard Worker         /**
501*54e60f84SAndroid Build Coastguard Worker          * \brief Value used as index into ref_frame_idx[] to indicate that frame
502*54e60f84SAndroid Build Coastguard Worker          * will be included in the reference list.
503*54e60f84SAndroid Build Coastguard Worker          * valid value range: [1..7], invalid when value is 0.
504*54e60f84SAndroid Build Coastguard Worker          */
505*54e60f84SAndroid Build Coastguard Worker         uint32_t search_idx2 : 3;
506*54e60f84SAndroid Build Coastguard Worker         /**
507*54e60f84SAndroid Build Coastguard Worker          * \brief Value used as index into ref_frame_idx[] to indicate that frame
508*54e60f84SAndroid Build Coastguard Worker          * will be included in the reference list.
509*54e60f84SAndroid Build Coastguard Worker          * valid value range: [1..7], invalid when value is 0.
510*54e60f84SAndroid Build Coastguard Worker          */
511*54e60f84SAndroid Build Coastguard Worker         uint32_t search_idx3 : 3;
512*54e60f84SAndroid Build Coastguard Worker         /**
513*54e60f84SAndroid Build Coastguard Worker          * \brief Value used as index into ref_frame_idx[] to indicate that frame
514*54e60f84SAndroid Build Coastguard Worker          * will be included in the reference list.
515*54e60f84SAndroid Build Coastguard Worker          * valid value range: [1..7], invalid when value is 0.
516*54e60f84SAndroid Build Coastguard Worker          */
517*54e60f84SAndroid Build Coastguard Worker         uint32_t search_idx4 : 3;
518*54e60f84SAndroid Build Coastguard Worker         /**
519*54e60f84SAndroid Build Coastguard Worker          * \brief Value used as index into ref_frame_idx[] to indicate that frame
520*54e60f84SAndroid Build Coastguard Worker          * will be included in the reference list.
521*54e60f84SAndroid Build Coastguard Worker          * valid value range: [1..7], invalid when value is 0.
522*54e60f84SAndroid Build Coastguard Worker          */
523*54e60f84SAndroid Build Coastguard Worker         uint32_t search_idx5 : 3;
524*54e60f84SAndroid Build Coastguard Worker         /**
525*54e60f84SAndroid Build Coastguard Worker          * \brief Value used as index into ref_frame_idx[] to indicate that frame
526*54e60f84SAndroid Build Coastguard Worker          * will be included in the reference list.
527*54e60f84SAndroid Build Coastguard Worker          * valid value range: [1..7], invalid when value is 0.
528*54e60f84SAndroid Build Coastguard Worker          */
529*54e60f84SAndroid Build Coastguard Worker         uint32_t search_idx6 : 3;
530*54e60f84SAndroid Build Coastguard Worker 
531*54e60f84SAndroid Build Coastguard Worker         /** \brief Reserved bytes for future use, must be zero. */
532*54e60f84SAndroid Build Coastguard Worker         uint32_t Reserved    : 11;
533*54e60f84SAndroid Build Coastguard Worker     } fields;
534*54e60f84SAndroid Build Coastguard Worker     uint32_t value;
535*54e60f84SAndroid Build Coastguard Worker } VARefFrameCtrlAV1;
536*54e60f84SAndroid Build Coastguard Worker 
537*54e60f84SAndroid Build Coastguard Worker /**
538*54e60f84SAndroid Build Coastguard Worker  * \brief AV1 Encoding Picture Parameter Buffer Structure.
539*54e60f84SAndroid Build Coastguard Worker  *
540*54e60f84SAndroid Build Coastguard Worker  * This structure conveys picture level parameters.
541*54e60f84SAndroid Build Coastguard Worker  *
542*54e60f84SAndroid Build Coastguard Worker  */
543*54e60f84SAndroid Build Coastguard Worker typedef struct  _VAEncPictureParameterBufferAV1 {
544*54e60f84SAndroid Build Coastguard Worker     /** \brief AV1 encoder may support SupRes and dynamic scaling function.
545*54e60f84SAndroid Build Coastguard Worker      *  For SupRes, underline encoder is responsible to do downscaling.
546*54e60f84SAndroid Build Coastguard Worker      *  For dynamic scaling, app should provide the scaled raw source.
547*54e60f84SAndroid Build Coastguard Worker      */
548*54e60f84SAndroid Build Coastguard Worker     /** \brief Raw source frame width in pixels. */
549*54e60f84SAndroid Build Coastguard Worker     uint16_t    frame_width_minus_1;
550*54e60f84SAndroid Build Coastguard Worker     /** \brief Raw source frame height in pixels. */
551*54e60f84SAndroid Build Coastguard Worker     uint16_t    frame_height_minus_1;
552*54e60f84SAndroid Build Coastguard Worker 
553*54e60f84SAndroid Build Coastguard Worker     /** \brief Surface to store reconstructed frame, not used for enc only case. */
554*54e60f84SAndroid Build Coastguard Worker     VASurfaceID reconstructed_frame;
555*54e60f84SAndroid Build Coastguard Worker 
556*54e60f84SAndroid Build Coastguard Worker     /** \brief Buffer to store coded data. */
557*54e60f84SAndroid Build Coastguard Worker     VABufferID  coded_buf;
558*54e60f84SAndroid Build Coastguard Worker 
559*54e60f84SAndroid Build Coastguard Worker     /** \brief Reference frame buffers.
560*54e60f84SAndroid Build Coastguard Worker      *  Each entry of the array specifies the surface index of the picture
561*54e60f84SAndroid Build Coastguard Worker      *  that is referred by current picture or will be referred by any future
562*54e60f84SAndroid Build Coastguard Worker      *  picture. The valid entries take value from 0 to 127, inclusive.
563*54e60f84SAndroid Build Coastguard Worker      *  Non-valid entries, those do not point to pictures which are referred
564*54e60f84SAndroid Build Coastguard Worker      *  by current picture or future pictures, should take value 0xFF.
565*54e60f84SAndroid Build Coastguard Worker      *  Other values are not allowed.
566*54e60f84SAndroid Build Coastguard Worker      *
567*54e60f84SAndroid Build Coastguard Worker      *  Application should update this array based on the refreshing
568*54e60f84SAndroid Build Coastguard Worker      *  information expected.
569*54e60f84SAndroid Build Coastguard Worker      */
570*54e60f84SAndroid Build Coastguard Worker     VASurfaceID reference_frames[8];
571*54e60f84SAndroid Build Coastguard Worker 
572*54e60f84SAndroid Build Coastguard Worker     /** \brief Reference index list.
573*54e60f84SAndroid Build Coastguard Worker      *  Contains a list of indices into refernce_frames[].
574*54e60f84SAndroid Build Coastguard Worker      *  Indice with refernce frames range: [LAST_FRAME - LAST_FRAME,
575*54e60f84SAndroid Build Coastguard Worker      *  LAST2_FRAME - LAST_FRAME, ..., ALTREF2_FRAME - LAST_FRAME].
576*54e60f84SAndroid Build Coastguard Worker      *  #define LAST_FRAME 1
577*54e60f84SAndroid Build Coastguard Worker      *  #define LAST2_FRAME 2
578*54e60f84SAndroid Build Coastguard Worker      *  #define LAST3_FRAME 3
579*54e60f84SAndroid Build Coastguard Worker      *  #define GOLDEN_FRAME 4
580*54e60f84SAndroid Build Coastguard Worker      *  #define BWDREF_FRAME 5
581*54e60f84SAndroid Build Coastguard Worker      *  #define ALTREF_FRAME 6
582*54e60f84SAndroid Build Coastguard Worker      *  #define ALTREF2_FRAME 7
583*54e60f84SAndroid Build Coastguard Worker      *  value range [0..7].
584*54e60f84SAndroid Build Coastguard Worker      */
585*54e60f84SAndroid Build Coastguard Worker     uint8_t     ref_frame_idx[7];
586*54e60f84SAndroid Build Coastguard Worker 
587*54e60f84SAndroid Build Coastguard Worker     /** \brief When hierarchical_level_plus1 > 0, hierarchical_level_plus1-1 indicates
588*54e60f84SAndroid Build Coastguard Worker      *  the current frame's level. If VAEncMiscParameterTemporalLayerStructure
589*54e60f84SAndroid Build Coastguard Worker      *  is valid (number_of_layers >0), hierarchical_level_plus1 shouldn't larger than number_of_layers.
590*54e60f84SAndroid Build Coastguard Worker      */
591*54e60f84SAndroid Build Coastguard Worker     uint8_t     hierarchical_level_plus1;
592*54e60f84SAndroid Build Coastguard Worker 
593*54e60f84SAndroid Build Coastguard Worker     /** \brief primary reference frame.
594*54e60f84SAndroid Build Coastguard Worker      *  Index into reference_frames[]
595*54e60f84SAndroid Build Coastguard Worker      *  segment id map, context table, etc. come from the reference
596*54e60f84SAndroid Build Coastguard Worker      *  frame pointed by this index.
597*54e60f84SAndroid Build Coastguard Worker      *  value range [0..7].
598*54e60f84SAndroid Build Coastguard Worker      */
599*54e60f84SAndroid Build Coastguard Worker     uint8_t     primary_ref_frame;
600*54e60f84SAndroid Build Coastguard Worker 
601*54e60f84SAndroid Build Coastguard Worker     /** \brief Corresponds to AV1 syntax element of the same name. */
602*54e60f84SAndroid Build Coastguard Worker     uint8_t     order_hint;
603*54e60f84SAndroid Build Coastguard Worker 
604*54e60f84SAndroid Build Coastguard Worker     /** \brief Corresponds to AV1 syntax element of the same name. */
605*54e60f84SAndroid Build Coastguard Worker     uint8_t     refresh_frame_flags;
606*54e60f84SAndroid Build Coastguard Worker 
607*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero. */
608*54e60f84SAndroid Build Coastguard Worker     uint8_t     reserved8bits1;
609*54e60f84SAndroid Build Coastguard Worker 
610*54e60f84SAndroid Build Coastguard Worker     /** \brief Suggest which frames to be used as references.
611*54e60f84SAndroid Build Coastguard Worker      *  see struct #VARefFrameCtrl for details.
612*54e60f84SAndroid Build Coastguard Worker      */
613*54e60f84SAndroid Build Coastguard Worker     VARefFrameCtrlAV1     ref_frame_ctrl_l0;
614*54e60f84SAndroid Build Coastguard Worker     VARefFrameCtrlAV1     ref_frame_ctrl_l1;
615*54e60f84SAndroid Build Coastguard Worker 
616*54e60f84SAndroid Build Coastguard Worker     union {
617*54e60f84SAndroid Build Coastguard Worker         struct {
618*54e60f84SAndroid Build Coastguard Worker             /** \brief frame type.
619*54e60f84SAndroid Build Coastguard Worker              *  0:  key_frame.
620*54e60f84SAndroid Build Coastguard Worker              *  1:  inter_frame.
621*54e60f84SAndroid Build Coastguard Worker              *  2:  intra_only frame.
622*54e60f84SAndroid Build Coastguard Worker              *  3:  switch_frame (app needs to set error_resilient_mode = 1,
623*54e60f84SAndroid Build Coastguard Worker              *      refresh_frame_flags, etc approperately.).
624*54e60f84SAndroid Build Coastguard Worker              */
625*54e60f84SAndroid Build Coastguard Worker             uint32_t    frame_type                      : 2;
626*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
627*54e60f84SAndroid Build Coastguard Worker             uint32_t    error_resilient_mode            : 1;
628*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
629*54e60f84SAndroid Build Coastguard Worker             uint32_t    disable_cdf_update              : 1;
630*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
631*54e60f84SAndroid Build Coastguard Worker             uint32_t    use_superres                    : 1;
632*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
633*54e60f84SAndroid Build Coastguard Worker             uint32_t    allow_high_precision_mv         : 1;
634*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
635*54e60f84SAndroid Build Coastguard Worker             uint32_t    use_ref_frame_mvs               : 1;
636*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
637*54e60f84SAndroid Build Coastguard Worker             uint32_t    disable_frame_end_update_cdf    : 1;
638*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
639*54e60f84SAndroid Build Coastguard Worker             uint32_t    reduced_tx_set                  : 1;
640*54e60f84SAndroid Build Coastguard Worker 
641*54e60f84SAndroid Build Coastguard Worker             /** \brief For single tile group, app may choose to use one frame obu
642*54e60f84SAndroid Build Coastguard Worker              *  to replace one frame header obu + one tile group obu.
643*54e60f84SAndroid Build Coastguard Worker              *  Invalid if num_tile_groups_minus1 > 0.
644*54e60f84SAndroid Build Coastguard Worker              */
645*54e60f84SAndroid Build Coastguard Worker             uint32_t    enable_frame_obu                : 1;
646*54e60f84SAndroid Build Coastguard Worker 
647*54e60f84SAndroid Build Coastguard Worker             /** \brief Indicate the current frame will be used as a long term reference. */
648*54e60f84SAndroid Build Coastguard Worker             uint32_t    long_term_reference             : 1;
649*54e60f84SAndroid Build Coastguard Worker             /** \brief If the encoded frame will not be referred by other frames,
650*54e60f84SAndroid Build Coastguard Worker              * its recon may not be generated in order to save memory bandwidth.
651*54e60f84SAndroid Build Coastguard Worker              */
652*54e60f84SAndroid Build Coastguard Worker             uint32_t    disable_frame_recon             : 1;
653*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
654*54e60f84SAndroid Build Coastguard Worker             uint32_t    allow_intrabc                   : 1;
655*54e60f84SAndroid Build Coastguard Worker             /** \brief Equal to 1 indicates that intra blocks may use palette encoding.
656*54e60f84SAndroid Build Coastguard Worker              * Otherwise disable palette encoding.
657*54e60f84SAndroid Build Coastguard Worker              */
658*54e60f84SAndroid Build Coastguard Worker             uint32_t    palette_mode_enable             : 1;
659*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
660*54e60f84SAndroid Build Coastguard Worker             uint32_t    allow_screen_content_tools      : 1;
661*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
662*54e60f84SAndroid Build Coastguard Worker             uint32_t    force_integer_mv                : 1;
663*54e60f84SAndroid Build Coastguard Worker             /** \brief Reserved bytes for future use, must be zero. */
664*54e60f84SAndroid Build Coastguard Worker             uint32_t    reserved                        : 16;
665*54e60f84SAndroid Build Coastguard Worker         } bits;
666*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
667*54e60f84SAndroid Build Coastguard Worker     } picture_flags;
668*54e60f84SAndroid Build Coastguard Worker 
669*54e60f84SAndroid Build Coastguard Worker     /** \brief Block size for each Segment ID in Segment Map.
670*54e60f84SAndroid Build Coastguard Worker      *  0: 16x16 block size, default value;
671*54e60f84SAndroid Build Coastguard Worker      *  1: 32x32 block size;
672*54e60f84SAndroid Build Coastguard Worker      *  2: 64x64 block size;
673*54e60f84SAndroid Build Coastguard Worker      *  3: 8x8 block size.
674*54e60f84SAndroid Build Coastguard Worker      */
675*54e60f84SAndroid Build Coastguard Worker     uint8_t     seg_id_block_size;
676*54e60f84SAndroid Build Coastguard Worker 
677*54e60f84SAndroid Build Coastguard Worker     /** \brief Number of tile groups minus 1.
678*54e60f84SAndroid Build Coastguard Worker      *  value range [0..255].
679*54e60f84SAndroid Build Coastguard Worker      */
680*54e60f84SAndroid Build Coastguard Worker     uint8_t     num_tile_groups_minus1;
681*54e60f84SAndroid Build Coastguard Worker 
682*54e60f84SAndroid Build Coastguard Worker     /** \brief Temporal id of the frame.*/
683*54e60f84SAndroid Build Coastguard Worker     uint8_t     temporal_id;
684*54e60f84SAndroid Build Coastguard Worker 
685*54e60f84SAndroid Build Coastguard Worker     /** \brief Deblock filter parameters.
686*54e60f84SAndroid Build Coastguard Worker      *  value range [0..63].
687*54e60f84SAndroid Build Coastguard Worker      */
688*54e60f84SAndroid Build Coastguard Worker     uint8_t     filter_level[2];
689*54e60f84SAndroid Build Coastguard Worker     uint8_t     filter_level_u;
690*54e60f84SAndroid Build Coastguard Worker     uint8_t     filter_level_v;
691*54e60f84SAndroid Build Coastguard Worker 
692*54e60f84SAndroid Build Coastguard Worker     union {
693*54e60f84SAndroid Build Coastguard Worker         struct {
694*54e60f84SAndroid Build Coastguard Worker             /** \brief Sharpness level for deblock filter.
695*54e60f84SAndroid Build Coastguard Worker              *  value range [0..7].
696*54e60f84SAndroid Build Coastguard Worker              */
697*54e60f84SAndroid Build Coastguard Worker             uint8_t     sharpness_level                 : 3;
698*54e60f84SAndroid Build Coastguard Worker             uint8_t     mode_ref_delta_enabled          : 1;
699*54e60f84SAndroid Build Coastguard Worker             uint8_t     mode_ref_delta_update           : 1;
700*54e60f84SAndroid Build Coastguard Worker             /** \brief Reserved bytes for future use, must be zero. */
701*54e60f84SAndroid Build Coastguard Worker             uint8_t     reserved                        : 3;
702*54e60f84SAndroid Build Coastguard Worker         } bits;
703*54e60f84SAndroid Build Coastguard Worker         uint8_t    value;
704*54e60f84SAndroid Build Coastguard Worker     } loop_filter_flags;
705*54e60f84SAndroid Build Coastguard Worker 
706*54e60f84SAndroid Build Coastguard Worker     /** \brief Super resolution scale denominator.
707*54e60f84SAndroid Build Coastguard Worker      *  value range [9..16].
708*54e60f84SAndroid Build Coastguard Worker      */
709*54e60f84SAndroid Build Coastguard Worker     uint8_t     superres_scale_denominator;
710*54e60f84SAndroid Build Coastguard Worker     /** \brief Corresponds to AV1 syntax element of the same name. */
711*54e60f84SAndroid Build Coastguard Worker     uint8_t     interpolation_filter;
712*54e60f84SAndroid Build Coastguard Worker 
713*54e60f84SAndroid Build Coastguard Worker     /** \brief Loop filter ref deltas.
714*54e60f84SAndroid Build Coastguard Worker      *  value range [-63..63].
715*54e60f84SAndroid Build Coastguard Worker      */
716*54e60f84SAndroid Build Coastguard Worker     int8_t      ref_deltas[8];
717*54e60f84SAndroid Build Coastguard Worker 
718*54e60f84SAndroid Build Coastguard Worker     /** \brief Loop filter mode deltas.
719*54e60f84SAndroid Build Coastguard Worker      *  value range [-63..63].
720*54e60f84SAndroid Build Coastguard Worker      */
721*54e60f84SAndroid Build Coastguard Worker     int8_t      mode_deltas[2];
722*54e60f84SAndroid Build Coastguard Worker 
723*54e60f84SAndroid Build Coastguard Worker     /** \brief Quantization params. */
724*54e60f84SAndroid Build Coastguard Worker     uint8_t     base_qindex;
725*54e60f84SAndroid Build Coastguard Worker     int8_t      y_dc_delta_q;
726*54e60f84SAndroid Build Coastguard Worker     int8_t      u_dc_delta_q;
727*54e60f84SAndroid Build Coastguard Worker     int8_t      u_ac_delta_q;
728*54e60f84SAndroid Build Coastguard Worker     int8_t      v_dc_delta_q;
729*54e60f84SAndroid Build Coastguard Worker     int8_t      v_ac_delta_q;
730*54e60f84SAndroid Build Coastguard Worker 
731*54e60f84SAndroid Build Coastguard Worker     /** \brief Min value for base q index for BRC.
732*54e60f84SAndroid Build Coastguard Worker      *  value range [1..255].
733*54e60f84SAndroid Build Coastguard Worker      */
734*54e60f84SAndroid Build Coastguard Worker     uint8_t     min_base_qindex;
735*54e60f84SAndroid Build Coastguard Worker 
736*54e60f84SAndroid Build Coastguard Worker     /** \brief Max value for base q index for BRC.
737*54e60f84SAndroid Build Coastguard Worker      *  value range [1..255].
738*54e60f84SAndroid Build Coastguard Worker      */
739*54e60f84SAndroid Build Coastguard Worker     uint8_t     max_base_qindex;
740*54e60f84SAndroid Build Coastguard Worker 
741*54e60f84SAndroid Build Coastguard Worker     /** \brief Quantization matrix. */
742*54e60f84SAndroid Build Coastguard Worker     union {
743*54e60f84SAndroid Build Coastguard Worker         struct {
744*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
745*54e60f84SAndroid Build Coastguard Worker             uint16_t    using_qmatrix                   : 1;
746*54e60f84SAndroid Build Coastguard Worker             /** \brief Following parameters only valid when using_qmatrix == 1. */
747*54e60f84SAndroid Build Coastguard Worker             uint16_t    qm_y                            : 4;
748*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
749*54e60f84SAndroid Build Coastguard Worker             uint16_t    qm_u                            : 4;
750*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name. */
751*54e60f84SAndroid Build Coastguard Worker             uint16_t    qm_v                            : 4;
752*54e60f84SAndroid Build Coastguard Worker             /** \brief Reserved bytes for future use, must be zero. */
753*54e60f84SAndroid Build Coastguard Worker             uint16_t    reserved                        : 3;
754*54e60f84SAndroid Build Coastguard Worker         } bits;
755*54e60f84SAndroid Build Coastguard Worker         uint16_t    value;
756*54e60f84SAndroid Build Coastguard Worker     } qmatrix_flags;
757*54e60f84SAndroid Build Coastguard Worker 
758*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero. */
759*54e60f84SAndroid Build Coastguard Worker     uint16_t reserved16bits1;
760*54e60f84SAndroid Build Coastguard Worker 
761*54e60f84SAndroid Build Coastguard Worker     union {
762*54e60f84SAndroid Build Coastguard Worker         struct {
763*54e60f84SAndroid Build Coastguard Worker             /** \brief Specify whether quantizer index delta values are present.
764*54e60f84SAndroid Build Coastguard Worker              *  value range [0..1]. */
765*54e60f84SAndroid Build Coastguard Worker             uint32_t    delta_q_present                 : 1;
766*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name.
767*54e60f84SAndroid Build Coastguard Worker              *  value range [0..3]. */
768*54e60f84SAndroid Build Coastguard Worker             uint32_t    delta_q_res                     : 2;
769*54e60f84SAndroid Build Coastguard Worker 
770*54e60f84SAndroid Build Coastguard Worker             /** \brief Specify whether loop filter delta values are present.
771*54e60f84SAndroid Build Coastguard Worker              *  value range [0..1]. */
772*54e60f84SAndroid Build Coastguard Worker             uint32_t    delta_lf_present                : 1;
773*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name.
774*54e60f84SAndroid Build Coastguard Worker              *  value range [0..3]. */
775*54e60f84SAndroid Build Coastguard Worker             uint32_t    delta_lf_res                    : 2;
776*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name.
777*54e60f84SAndroid Build Coastguard Worker              *  value range [0..1]. */
778*54e60f84SAndroid Build Coastguard Worker             uint32_t    delta_lf_multi                  : 1;
779*54e60f84SAndroid Build Coastguard Worker 
780*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name.
781*54e60f84SAndroid Build Coastguard Worker              *  0: ONLY_4X4;
782*54e60f84SAndroid Build Coastguard Worker              *  1: TX_MODE_LARGEST;
783*54e60f84SAndroid Build Coastguard Worker              *  2: TX_MODE_SELECT;
784*54e60f84SAndroid Build Coastguard Worker              *  3: Invalid.
785*54e60f84SAndroid Build Coastguard Worker              */
786*54e60f84SAndroid Build Coastguard Worker             uint32_t    tx_mode                         : 2;
787*54e60f84SAndroid Build Coastguard Worker 
788*54e60f84SAndroid Build Coastguard Worker             /** \brief Indicates whether to use single or compound reference prediction.
789*54e60f84SAndroid Build Coastguard Worker              *  0: SINGLE_REFERENCE;
790*54e60f84SAndroid Build Coastguard Worker              *  1: COMPOUND_REFERENCE;
791*54e60f84SAndroid Build Coastguard Worker              *  2: REFERENCE_MODE_SELECT.
792*54e60f84SAndroid Build Coastguard Worker              *  3: Invalid.
793*54e60f84SAndroid Build Coastguard Worker              *
794*54e60f84SAndroid Build Coastguard Worker              *  Value 2 means driver make decision to use single reference or compound reference.
795*54e60f84SAndroid Build Coastguard Worker              */
796*54e60f84SAndroid Build Coastguard Worker             uint32_t    reference_mode                  : 2;
797*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name.
798*54e60f84SAndroid Build Coastguard Worker              *  value range [0..1].
799*54e60f84SAndroid Build Coastguard Worker              */
800*54e60f84SAndroid Build Coastguard Worker             uint32_t    skip_mode_present               : 1;
801*54e60f84SAndroid Build Coastguard Worker             /** \brief Reserved bytes for future use, must be zero. */
802*54e60f84SAndroid Build Coastguard Worker             uint32_t    reserved                        : 20;
803*54e60f84SAndroid Build Coastguard Worker         } bits;
804*54e60f84SAndroid Build Coastguard Worker         uint32_t    value;
805*54e60f84SAndroid Build Coastguard Worker     } mode_control_flags;
806*54e60f84SAndroid Build Coastguard Worker 
807*54e60f84SAndroid Build Coastguard Worker     /** \brief Segmentation parameters. */
808*54e60f84SAndroid Build Coastguard Worker     VAEncSegParamAV1    segments;
809*54e60f84SAndroid Build Coastguard Worker 
810*54e60f84SAndroid Build Coastguard Worker     /** \brief Number of tile columns. */
811*54e60f84SAndroid Build Coastguard Worker     uint8_t     tile_cols;
812*54e60f84SAndroid Build Coastguard Worker     /** \brief Number of tile rows. */
813*54e60f84SAndroid Build Coastguard Worker     uint8_t     tile_rows;
814*54e60f84SAndroid Build Coastguard Worker 
815*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero. */
816*54e60f84SAndroid Build Coastguard Worker     uint16_t    reserved16bits2;
817*54e60f84SAndroid Build Coastguard Worker 
818*54e60f84SAndroid Build Coastguard Worker     /** \brief The last tile column or row size needs to be derived. */
819*54e60f84SAndroid Build Coastguard Worker     uint16_t    width_in_sbs_minus_1[63];
820*54e60f84SAndroid Build Coastguard Worker     uint16_t    height_in_sbs_minus_1[63];
821*54e60f84SAndroid Build Coastguard Worker 
822*54e60f84SAndroid Build Coastguard Worker     /** \brief specify which tile to use for the CDF update.
823*54e60f84SAndroid Build Coastguard Worker      *  value range [0..127]*/
824*54e60f84SAndroid Build Coastguard Worker     uint16_t     context_update_tile_id;
825*54e60f84SAndroid Build Coastguard Worker 
826*54e60f84SAndroid Build Coastguard Worker     /** \brief Corresponds to AV1 syntax element of the same name.
827*54e60f84SAndroid Build Coastguard Worker      *  value range [0..3].
828*54e60f84SAndroid Build Coastguard Worker      */
829*54e60f84SAndroid Build Coastguard Worker     uint8_t     cdef_damping_minus_3;
830*54e60f84SAndroid Build Coastguard Worker     /** \brief Corresponds to AV1 syntax element of the same name.
831*54e60f84SAndroid Build Coastguard Worker      *  value range [0..3].
832*54e60f84SAndroid Build Coastguard Worker      */
833*54e60f84SAndroid Build Coastguard Worker     uint8_t     cdef_bits;
834*54e60f84SAndroid Build Coastguard Worker     /** \brief CDEF Y strengths.
835*54e60f84SAndroid Build Coastguard Worker      *  value range [0..63]*/
836*54e60f84SAndroid Build Coastguard Worker     uint8_t     cdef_y_strengths[8];
837*54e60f84SAndroid Build Coastguard Worker     /** \brief CDEF UV strengths.
838*54e60f84SAndroid Build Coastguard Worker      *  value range [0..63]*/
839*54e60f84SAndroid Build Coastguard Worker     uint8_t     cdef_uv_strengths[8];
840*54e60f84SAndroid Build Coastguard Worker 
841*54e60f84SAndroid Build Coastguard Worker     union {
842*54e60f84SAndroid Build Coastguard Worker         struct {
843*54e60f84SAndroid Build Coastguard Worker             /** \brief Restoration type for Y frame.
844*54e60f84SAndroid Build Coastguard Worker              *  value range [0..3].
845*54e60f84SAndroid Build Coastguard Worker              */
846*54e60f84SAndroid Build Coastguard Worker             uint16_t    yframe_restoration_type         : 2;
847*54e60f84SAndroid Build Coastguard Worker             /** \brief Restoration type for Cb frame.
848*54e60f84SAndroid Build Coastguard Worker              *  value range [0..3].
849*54e60f84SAndroid Build Coastguard Worker              */
850*54e60f84SAndroid Build Coastguard Worker             uint16_t    cbframe_restoration_type        : 2;
851*54e60f84SAndroid Build Coastguard Worker             /** \brief Restoration type for Cr frame.
852*54e60f84SAndroid Build Coastguard Worker              *  value range [0..3].
853*54e60f84SAndroid Build Coastguard Worker              */
854*54e60f84SAndroid Build Coastguard Worker             uint16_t    crframe_restoration_type        : 2;
855*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name.
856*54e60f84SAndroid Build Coastguard Worker              *  value range [0..2].
857*54e60f84SAndroid Build Coastguard Worker              */
858*54e60f84SAndroid Build Coastguard Worker             uint16_t    lr_unit_shift                   : 2;
859*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name.
860*54e60f84SAndroid Build Coastguard Worker              *  value range [0..1].
861*54e60f84SAndroid Build Coastguard Worker              */
862*54e60f84SAndroid Build Coastguard Worker             uint16_t    lr_uv_shift                     : 1;
863*54e60f84SAndroid Build Coastguard Worker             /** \brief Reserved bytes for future use, must be zero. */
864*54e60f84SAndroid Build Coastguard Worker             uint16_t    reserved                        : 7;
865*54e60f84SAndroid Build Coastguard Worker         } bits;
866*54e60f84SAndroid Build Coastguard Worker         uint16_t    value;
867*54e60f84SAndroid Build Coastguard Worker     } loop_restoration_flags;
868*54e60f84SAndroid Build Coastguard Worker 
869*54e60f84SAndroid Build Coastguard Worker     /** \brief Global motion. */
870*54e60f84SAndroid Build Coastguard Worker     VAEncWarpedMotionParamsAV1    wm[7];
871*54e60f84SAndroid Build Coastguard Worker 
872*54e60f84SAndroid Build Coastguard Worker     /**
873*54e60f84SAndroid Build Coastguard Worker      *  Offset in bits for syntax base_q_idx in packed frame header bit stream
874*54e60f84SAndroid Build Coastguard Worker      *  from the start of the packed header data.
875*54e60f84SAndroid Build Coastguard Worker      *  In BRC mode, this parameter should be set and driver will update base_q_idx in
876*54e60f84SAndroid Build Coastguard Worker      *  uncompressed header according to this offset.
877*54e60f84SAndroid Build Coastguard Worker      *  In CQP mode, this parameter should be set to 0 and ignored by driver.
878*54e60f84SAndroid Build Coastguard Worker      */
879*54e60f84SAndroid Build Coastguard Worker     uint32_t    bit_offset_qindex;
880*54e60f84SAndroid Build Coastguard Worker     /**
881*54e60f84SAndroid Build Coastguard Worker      *  Offset in bits for syntax segmentation_enabled of frame header OBU
882*54e60f84SAndroid Build Coastguard Worker      *  in packed frame header bit stream from the start of the packed header data.
883*54e60f84SAndroid Build Coastguard Worker      *  Valid only in auto segmentation mode. Other than that, this parameter
884*54e60f84SAndroid Build Coastguard Worker      *  should be set to 0 and ignored by driver.
885*54e60f84SAndroid Build Coastguard Worker      */
886*54e60f84SAndroid Build Coastguard Worker     uint32_t    bit_offset_segmentation;
887*54e60f84SAndroid Build Coastguard Worker     /**
888*54e60f84SAndroid Build Coastguard Worker      *  Offset in bits for syntax loop_filter_params() in packed frame
889*54e60f84SAndroid Build Coastguard Worker      *  header bit stream from the start of the packed header data.
890*54e60f84SAndroid Build Coastguard Worker      *  In BRC mode, this parameter should be set and driver will update filter params
891*54e60f84SAndroid Build Coastguard Worker      *  in packed frame header according to this offset.
892*54e60f84SAndroid Build Coastguard Worker      *  In CQP mode, this parameter should be set to 0 and ignored by driver.
893*54e60f84SAndroid Build Coastguard Worker      */
894*54e60f84SAndroid Build Coastguard Worker     uint32_t    bit_offset_loopfilter_params;
895*54e60f84SAndroid Build Coastguard Worker     /**
896*54e60f84SAndroid Build Coastguard Worker      *  In BRC mode, underline encoder should generate the approperiate
897*54e60f84SAndroid Build Coastguard Worker      *  CDEF values and write back into uncompressed header. And app
898*54e60f84SAndroid Build Coastguard Worker      *  should provide default CDEF values in packed header. This parameter
899*54e60f84SAndroid Build Coastguard Worker      *  should point to the starting bit of cdef_params() syntax structure
900*54e60f84SAndroid Build Coastguard Worker      *  in packed header.
901*54e60f84SAndroid Build Coastguard Worker      *  In CQP mode, this parameter should be set to 0 and ignored by driver.
902*54e60f84SAndroid Build Coastguard Worker      */
903*54e60f84SAndroid Build Coastguard Worker     uint32_t    bit_offset_cdef_params;
904*54e60f84SAndroid Build Coastguard Worker     /**
905*54e60f84SAndroid Build Coastguard Worker      *  In BRC mode, this parameter indicates the actual bit usage of
906*54e60f84SAndroid Build Coastguard Worker      *  cdef_params() syntax structure in packed uncompressed header.
907*54e60f84SAndroid Build Coastguard Worker      *  In CQP mode, this parameter should be set to 0 and ignored by driver.
908*54e60f84SAndroid Build Coastguard Worker      */
909*54e60f84SAndroid Build Coastguard Worker     uint32_t    size_in_bits_cdef_params;
910*54e60f84SAndroid Build Coastguard Worker 
911*54e60f84SAndroid Build Coastguard Worker     /**
912*54e60f84SAndroid Build Coastguard Worker      *  Offset in bytes for syntax obu_size of frame header OBU in packed
913*54e60f84SAndroid Build Coastguard Worker      *  frame header bit stream from the start of the packed header. The frame
914*54e60f84SAndroid Build Coastguard Worker      *  header OBU size depends on the encoded tile sizes. It applies to both
915*54e60f84SAndroid Build Coastguard Worker      *  Frame Header OBU and Frame OBU if obu_size needs to be updated by
916*54e60f84SAndroid Build Coastguard Worker      *  underline encoder. Otherwise, app can set it to 0 and ignored by driver.
917*54e60f84SAndroid Build Coastguard Worker      *
918*54e60f84SAndroid Build Coastguard Worker      *  In BRC mode, obu_size needs to be updated and this parameter should be set.
919*54e60f84SAndroid Build Coastguard Worker      *  In CQP mode, obu_size needs to be updated if \c enable_frame_obu == 1. Otherwise
920*54e60f84SAndroid Build Coastguard Worker      *  this parameter should be set to 0 and ignored by driver.
921*54e60f84SAndroid Build Coastguard Worker      */
922*54e60f84SAndroid Build Coastguard Worker     uint32_t    byte_offset_frame_hdr_obu_size;
923*54e60f84SAndroid Build Coastguard Worker 
924*54e60f84SAndroid Build Coastguard Worker     /**
925*54e60f84SAndroid Build Coastguard Worker      * Frame header OBU bit stream size in bits. The frame header obu packed bit
926*54e60f84SAndroid Build Coastguard Worker      * stream contains an obu header, a 4-byte long obu_size field, frame_header_obu()
927*54e60f84SAndroid Build Coastguard Worker      * syntax chain, and a trailing bit if not inside a frame obu. If \c enable_frame_obu == 1,
928*54e60f84SAndroid Build Coastguard Worker      * the value should include and up to the last bit of frame_header_obu() and
929*54e60f84SAndroid Build Coastguard Worker      * excluding the bits generated by byte_alignment(). If \c enable_frame_obu == 0,
930*54e60f84SAndroid Build Coastguard Worker      * the value should include and up to the trailing bit at the end of the frame
931*54e60f84SAndroid Build Coastguard Worker      * header obu. The size will be used by encoder to calculate the final frame
932*54e60f84SAndroid Build Coastguard Worker      * header size after bit shifting due to auto segmentation.
933*54e60f84SAndroid Build Coastguard Worker      * In CQP mode, this parameter should be set to 0 and ignored by driver.
934*54e60f84SAndroid Build Coastguard Worker      */
935*54e60f84SAndroid Build Coastguard Worker     uint32_t    size_in_bits_frame_hdr_obu;
936*54e60f84SAndroid Build Coastguard Worker 
937*54e60f84SAndroid Build Coastguard Worker     /** \brief Tile Group OBU header */
938*54e60f84SAndroid Build Coastguard Worker     union {
939*54e60f84SAndroid Build Coastguard Worker         struct {
940*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name.
941*54e60f84SAndroid Build Coastguard Worker              *  value range [0..1].
942*54e60f84SAndroid Build Coastguard Worker              */
943*54e60f84SAndroid Build Coastguard Worker             uint8_t     obu_extension_flag              : 1;
944*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name.
945*54e60f84SAndroid Build Coastguard Worker              *  value range [0..1].
946*54e60f84SAndroid Build Coastguard Worker              */
947*54e60f84SAndroid Build Coastguard Worker             uint8_t     obu_has_size_field              : 1;
948*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name.
949*54e60f84SAndroid Build Coastguard Worker              *  value range [0..7].
950*54e60f84SAndroid Build Coastguard Worker              */
951*54e60f84SAndroid Build Coastguard Worker             uint8_t     temporal_id                     : 3;
952*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to AV1 syntax element of the same name.
953*54e60f84SAndroid Build Coastguard Worker              *  value range [0..2].
954*54e60f84SAndroid Build Coastguard Worker              */
955*54e60f84SAndroid Build Coastguard Worker             uint8_t     spatial_id                      : 2;
956*54e60f84SAndroid Build Coastguard Worker             /** \brief Reserved bytes for future use, must be zero. */
957*54e60f84SAndroid Build Coastguard Worker             uint8_t     reserved                        : 1;
958*54e60f84SAndroid Build Coastguard Worker         } bits;
959*54e60f84SAndroid Build Coastguard Worker         uint8_t     value;
960*54e60f84SAndroid Build Coastguard Worker     } tile_group_obu_hdr_info;
961*54e60f84SAndroid Build Coastguard Worker 
962*54e60f84SAndroid Build Coastguard Worker     /** \brief The number of frames skipped prior to the current frame.
963*54e60f84SAndroid Build Coastguard Worker      *  It includes only the skipped frames that were not counted before.
964*54e60f84SAndroid Build Coastguard Worker      *  App may generate the "show_existing_frame" short frame header OBUs
965*54e60f84SAndroid Build Coastguard Worker      *  and send to driver with the next frame. Default value 0.
966*54e60f84SAndroid Build Coastguard Worker      */
967*54e60f84SAndroid Build Coastguard Worker     uint8_t     number_skip_frames;
968*54e60f84SAndroid Build Coastguard Worker 
969*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero. */
970*54e60f84SAndroid Build Coastguard Worker     uint16_t    reserved16bits3;
971*54e60f84SAndroid Build Coastguard Worker 
972*54e60f84SAndroid Build Coastguard Worker     /** \brief Indicates the application forced frame size change in bytes.
973*54e60f84SAndroid Build Coastguard Worker      * When the value is positive, the frame size is reduced. Otherwise, the frame
974*54e60f84SAndroid Build Coastguard Worker      * size increases. The parameter can be used when application skips frames with
975*54e60f84SAndroid Build Coastguard Worker      * setting of NumSkipFrames. And application can also use it for other scenarios
976*54e60f84SAndroid Build Coastguard Worker      * such as inserting "show_existing_frame" at very end of the sequence.
977*54e60f84SAndroid Build Coastguard Worker      */
978*54e60f84SAndroid Build Coastguard Worker     int32_t    skip_frames_reduced_size;
979*54e60f84SAndroid Build Coastguard Worker 
980*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero. */
981*54e60f84SAndroid Build Coastguard Worker     uint32_t    va_reserved[VA_PADDING_HIGH];
982*54e60f84SAndroid Build Coastguard Worker } VAEncPictureParameterBufferAV1;
983*54e60f84SAndroid Build Coastguard Worker 
984*54e60f84SAndroid Build Coastguard Worker /**
985*54e60f84SAndroid Build Coastguard Worker  * \brief Tile Group Buffer.
986*54e60f84SAndroid Build Coastguard Worker  */
987*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncTileGroupBufferAV1 {
988*54e60f84SAndroid Build Coastguard Worker     /** \brief Tile group start location.
989*54e60f84SAndroid Build Coastguard Worker      *  The position of the first tile in current tile group
990*54e60f84SAndroid Build Coastguard Worker      *  in raster scan order across the frame.
991*54e60f84SAndroid Build Coastguard Worker      *  value range [0..127].
992*54e60f84SAndroid Build Coastguard Worker      */
993*54e60f84SAndroid Build Coastguard Worker     uint8_t  tg_start;
994*54e60f84SAndroid Build Coastguard Worker     /** \brief Tile group end location.
995*54e60f84SAndroid Build Coastguard Worker      *  The position of the last tile in current tile group
996*54e60f84SAndroid Build Coastguard Worker      *  in raster scan order across the frame.
997*54e60f84SAndroid Build Coastguard Worker      *  value range [0..127].
998*54e60f84SAndroid Build Coastguard Worker      */
999*54e60f84SAndroid Build Coastguard Worker     uint8_t  tg_end;
1000*54e60f84SAndroid Build Coastguard Worker 
1001*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero. */
1002*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
1003*54e60f84SAndroid Build Coastguard Worker } VAEncTileGroupBufferAV1;
1004*54e60f84SAndroid Build Coastguard Worker 
1005*54e60f84SAndroid Build Coastguard Worker /**@}*/
1006*54e60f84SAndroid Build Coastguard Worker 
1007*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus
1008*54e60f84SAndroid Build Coastguard Worker }
1009*54e60f84SAndroid Build Coastguard Worker #endif
1010*54e60f84SAndroid Build Coastguard Worker 
1011*54e60f84SAndroid Build Coastguard Worker #endif /* VA_ENC_AV1_H */
1012