xref: /aosp_15_r20/external/libva/va/va_enc_vp9.h (revision 54e60f844a168e9a219354de272cd517ee8cd4b7)
1*54e60f84SAndroid Build Coastguard Worker /*
2*54e60f84SAndroid Build Coastguard Worker  * Copyright (c) 2007-2015 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_vp9.h
27*54e60f84SAndroid Build Coastguard Worker  * \brief VP9 encoding API
28*54e60f84SAndroid Build Coastguard Worker  *
29*54e60f84SAndroid Build Coastguard Worker  * This file contains the \ref api_enc_vp9 "VP9 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_VP9_H
34*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_VP9_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 /**
41*54e60f84SAndroid Build Coastguard Worker  * \defgroup api_enc_vp9 VP9 encoding API
42*54e60f84SAndroid Build Coastguard Worker  *
43*54e60f84SAndroid Build Coastguard Worker  * @{
44*54e60f84SAndroid Build Coastguard Worker  */
45*54e60f84SAndroid Build Coastguard Worker 
46*54e60f84SAndroid Build Coastguard Worker /**
47*54e60f84SAndroid Build Coastguard Worker  * \brief VP9 Encoding Status Data Buffer Structure
48*54e60f84SAndroid Build Coastguard Worker  *
49*54e60f84SAndroid Build Coastguard Worker  * This structure is used to convey status data from encoder to application.
50*54e60f84SAndroid Build Coastguard Worker  * Driver allocates VACodedBufferVP9Status as a private data buffer.
51*54e60f84SAndroid Build Coastguard Worker  * Driver encapsulates the status buffer with a VACodedBufferSegment,
52*54e60f84SAndroid Build Coastguard Worker  * and sets VACodedBufferSegment.status to be VA_CODED_BUF_STATUS_CODEC_SPECIFIC.
53*54e60f84SAndroid Build Coastguard Worker  * And driver associates status data segment to the bit stream buffer segment
54*54e60f84SAndroid Build Coastguard Worker  * by setting VACodedBufferSegment.next of coded_buf (bit stream) to the private
55*54e60f84SAndroid Build Coastguard Worker  * buffer segment of status data.
56*54e60f84SAndroid Build Coastguard Worker  * Application accesses it by calling VAMapBuffer() with VAEncCodedBufferType.
57*54e60f84SAndroid Build Coastguard Worker  */
58*54e60f84SAndroid Build Coastguard Worker typedef struct  _VACodedBufferVP9Status {
59*54e60f84SAndroid Build Coastguard Worker     /** Final quantization index used (yac), determined by BRC.
60*54e60f84SAndroid Build Coastguard Worker      *  Application is providing quantization index deltas
61*54e60f84SAndroid Build Coastguard Worker      *  ydc(0), y2dc(1), y2ac(2), uvdc(3), uvac(4) that are applied to all segments
62*54e60f84SAndroid Build Coastguard Worker      *  and segmentation qi deltas, they will not be changed by BRC.
63*54e60f84SAndroid Build Coastguard Worker      */
64*54e60f84SAndroid Build Coastguard Worker     uint16_t    base_qp_index;
65*54e60f84SAndroid Build Coastguard Worker 
66*54e60f84SAndroid Build Coastguard Worker     /** Final loopfilter levels for the frame, if segmentation is disabled only
67*54e60f84SAndroid Build Coastguard Worker      *  index 0 is used.
68*54e60f84SAndroid Build Coastguard Worker      *  If loop_filter_level is 0, it indicates loop filter is disabled.
69*54e60f84SAndroid Build Coastguard Worker      */
70*54e60f84SAndroid Build Coastguard Worker     uint8_t     loop_filter_level;
71*54e60f84SAndroid Build Coastguard Worker 
72*54e60f84SAndroid Build Coastguard Worker     /**
73*54e60f84SAndroid Build Coastguard Worker      * Long term reference frame indication from BRC.  BRC recommends the
74*54e60f84SAndroid Build Coastguard Worker      * current frame that is being queried is a good candidate for a long
75*54e60f84SAndroid Build Coastguard Worker      * term reference.
76*54e60f84SAndroid Build Coastguard Worker      */
77*54e60f84SAndroid Build Coastguard Worker     uint8_t     long_term_indication;
78*54e60f84SAndroid Build Coastguard Worker 
79*54e60f84SAndroid Build Coastguard Worker     /* suggested next frame width */
80*54e60f84SAndroid Build Coastguard Worker     uint16_t    next_frame_width;
81*54e60f84SAndroid Build Coastguard Worker 
82*54e60f84SAndroid Build Coastguard Worker     /* suggested next frame height */
83*54e60f84SAndroid Build Coastguard Worker     uint16_t    next_frame_height;
84*54e60f84SAndroid Build Coastguard Worker 
85*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
86*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
87*54e60f84SAndroid Build Coastguard Worker } VACodedBufferVP9Status;
88*54e60f84SAndroid Build Coastguard Worker 
89*54e60f84SAndroid Build Coastguard Worker /**
90*54e60f84SAndroid Build Coastguard Worker  * \brief VP9 Encoding Sequence Parameter Buffer Structure
91*54e60f84SAndroid Build Coastguard Worker  *
92*54e60f84SAndroid Build Coastguard Worker  * This structure conveys sequence level parameters.
93*54e60f84SAndroid Build Coastguard Worker  *
94*54e60f84SAndroid Build Coastguard Worker  */
95*54e60f84SAndroid Build Coastguard Worker typedef struct  _VAEncSequenceParameterBufferVP9 {
96*54e60f84SAndroid Build Coastguard Worker     /** \brief Frame size note:
97*54e60f84SAndroid Build Coastguard Worker      *  Picture resolution may change frame by frame.
98*54e60f84SAndroid Build Coastguard Worker      *  Application needs to allocate surfaces and frame buffers based on
99*54e60f84SAndroid Build Coastguard Worker      *  max frame resolution in case resolution changes for later frames.
100*54e60f84SAndroid Build Coastguard Worker      *  The source and recon surfaces allocated should be 64x64(SB) aligned
101*54e60f84SAndroid Build Coastguard Worker      *  on both horizontal and vertical directions.
102*54e60f84SAndroid Build Coastguard Worker      *  But buffers on the surfaces need to be aligned to CU boundaries.
103*54e60f84SAndroid Build Coastguard Worker      */
104*54e60f84SAndroid Build Coastguard Worker     /* maximum frame width in pixels for the whole sequence */
105*54e60f84SAndroid Build Coastguard Worker     uint32_t    max_frame_width;
106*54e60f84SAndroid Build Coastguard Worker 
107*54e60f84SAndroid Build Coastguard Worker     /* maximum frame height in pixels for the whole sequence */
108*54e60f84SAndroid Build Coastguard Worker     uint32_t    max_frame_height;
109*54e60f84SAndroid Build Coastguard Worker 
110*54e60f84SAndroid Build Coastguard Worker     /* auto keyframe placement, non-zero means enable auto keyframe placement */
111*54e60f84SAndroid Build Coastguard Worker     uint32_t    kf_auto;
112*54e60f84SAndroid Build Coastguard Worker 
113*54e60f84SAndroid Build Coastguard Worker     /* keyframe minimum interval */
114*54e60f84SAndroid Build Coastguard Worker     uint32_t    kf_min_dist;
115*54e60f84SAndroid Build Coastguard Worker 
116*54e60f84SAndroid Build Coastguard Worker     /* keyframe maximum interval */
117*54e60f84SAndroid Build Coastguard Worker     uint32_t    kf_max_dist;
118*54e60f84SAndroid Build Coastguard Worker 
119*54e60f84SAndroid Build Coastguard Worker 
120*54e60f84SAndroid Build Coastguard Worker     /* RC related fields. RC modes are set with VAConfigAttribRateControl */
121*54e60f84SAndroid Build Coastguard Worker     /* For VP9, CBR implies HRD conformance and VBR implies no HRD conformance */
122*54e60f84SAndroid Build Coastguard Worker 
123*54e60f84SAndroid Build Coastguard Worker     /**
124*54e60f84SAndroid Build Coastguard Worker      * Initial bitrate set for this sequence in CBR or VBR modes.
125*54e60f84SAndroid Build Coastguard Worker      *
126*54e60f84SAndroid Build Coastguard Worker      * This field represents the initial bitrate value for this
127*54e60f84SAndroid Build Coastguard Worker      * sequence if CBR or VBR mode is used, i.e. if the encoder
128*54e60f84SAndroid Build Coastguard Worker      * pipeline was created with a #VAConfigAttribRateControl
129*54e60f84SAndroid Build Coastguard Worker      * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR.
130*54e60f84SAndroid Build Coastguard Worker      *
131*54e60f84SAndroid Build Coastguard Worker      * The bitrate can be modified later on through
132*54e60f84SAndroid Build Coastguard Worker      * #VAEncMiscParameterRateControl buffers.
133*54e60f84SAndroid Build Coastguard Worker      */
134*54e60f84SAndroid Build Coastguard Worker     uint32_t    bits_per_second;
135*54e60f84SAndroid Build Coastguard Worker 
136*54e60f84SAndroid Build Coastguard Worker     /* Period between key frames */
137*54e60f84SAndroid Build Coastguard Worker     uint32_t    intra_period;
138*54e60f84SAndroid Build Coastguard Worker 
139*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
140*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
141*54e60f84SAndroid Build Coastguard Worker } VAEncSequenceParameterBufferVP9;
142*54e60f84SAndroid Build Coastguard Worker 
143*54e60f84SAndroid Build Coastguard Worker 
144*54e60f84SAndroid Build Coastguard Worker /**
145*54e60f84SAndroid Build Coastguard Worker  * \brief VP9 Encoding Picture Parameter Buffer Structure
146*54e60f84SAndroid Build Coastguard Worker  *
147*54e60f84SAndroid Build Coastguard Worker  * This structure conveys picture level parameters.
148*54e60f84SAndroid Build Coastguard Worker  *
149*54e60f84SAndroid Build Coastguard Worker  */
150*54e60f84SAndroid Build Coastguard Worker typedef struct  _VAEncPictureParameterBufferVP9 {
151*54e60f84SAndroid Build Coastguard Worker     /** VP9 encoder may support dynamic scaling function.
152*54e60f84SAndroid Build Coastguard Worker      *  If enabled (enable_dynamic_scaling is set), application may request
153*54e60f84SAndroid Build Coastguard Worker      *  GPU encodes picture with a different resolution from the raw source.
154*54e60f84SAndroid Build Coastguard Worker      *  GPU should handle the scaling process of source and
155*54e60f84SAndroid Build Coastguard Worker      *  all reference frames.
156*54e60f84SAndroid Build Coastguard Worker      */
157*54e60f84SAndroid Build Coastguard Worker     /* raw source frame width in pixels */
158*54e60f84SAndroid Build Coastguard Worker     uint32_t    frame_width_src;
159*54e60f84SAndroid Build Coastguard Worker     /* raw source frame height in pixels */
160*54e60f84SAndroid Build Coastguard Worker     uint32_t    frame_height_src;
161*54e60f84SAndroid Build Coastguard Worker 
162*54e60f84SAndroid Build Coastguard Worker     /* to be encoded frame width in pixels */
163*54e60f84SAndroid Build Coastguard Worker     uint32_t    frame_width_dst;
164*54e60f84SAndroid Build Coastguard Worker     /* to be encoded frame height in pixels */
165*54e60f84SAndroid Build Coastguard Worker     uint32_t    frame_height_dst;
166*54e60f84SAndroid Build Coastguard Worker 
167*54e60f84SAndroid Build Coastguard Worker     /* surface to store reconstructed frame, not used for enc only case */
168*54e60f84SAndroid Build Coastguard Worker     VASurfaceID reconstructed_frame;
169*54e60f84SAndroid Build Coastguard Worker 
170*54e60f84SAndroid Build Coastguard Worker     /** \brief reference frame buffers
171*54e60f84SAndroid Build Coastguard Worker      *  Each entry of the array specifies the surface index of the picture
172*54e60f84SAndroid Build Coastguard Worker      *  that is referred by current picture or will be referred by any future
173*54e60f84SAndroid Build Coastguard Worker      *  picture. The valid entries take value from 0 to 127, inclusive.
174*54e60f84SAndroid Build Coastguard Worker      *  Non-valid entries, those do not point to pictures which are referred
175*54e60f84SAndroid Build Coastguard Worker      *  by current picture or future pictures, should take value 0xFF.
176*54e60f84SAndroid Build Coastguard Worker      *  Other values are not allowed.
177*54e60f84SAndroid Build Coastguard Worker      *
178*54e60f84SAndroid Build Coastguard Worker      *  Application should update this array based on the refreshing
179*54e60f84SAndroid Build Coastguard Worker      *  information expected.
180*54e60f84SAndroid Build Coastguard Worker      */
181*54e60f84SAndroid Build Coastguard Worker     VASurfaceID reference_frames[8];
182*54e60f84SAndroid Build Coastguard Worker 
183*54e60f84SAndroid Build Coastguard Worker     /* buffer to store coded data */
184*54e60f84SAndroid Build Coastguard Worker     VABufferID  coded_buf;
185*54e60f84SAndroid Build Coastguard Worker 
186*54e60f84SAndroid Build Coastguard Worker     union {
187*54e60f84SAndroid Build Coastguard Worker         struct {
188*54e60f84SAndroid Build Coastguard Worker             /* force this frame to be a keyframe */
189*54e60f84SAndroid Build Coastguard Worker             uint32_t    force_kf                       : 1;
190*54e60f84SAndroid Build Coastguard Worker 
191*54e60f84SAndroid Build Coastguard Worker             /** \brief Indiates which frames to be used as reference.
192*54e60f84SAndroid Build Coastguard Worker              *  (Ref_frame_ctrl & 0x01) ? 1: last frame as reference frame, 0: not.
193*54e60f84SAndroid Build Coastguard Worker              *  (Ref_frame_ctrl & 0x02) ? 1: golden frame as reference frame, 0: not.
194*54e60f84SAndroid Build Coastguard Worker              *  (Ref_frame_ctrl & 0x04) ? 1: alt frame as reference frame, 0: not.
195*54e60f84SAndroid Build Coastguard Worker              *  L0 is for forward prediction.
196*54e60f84SAndroid Build Coastguard Worker              *  L1 is for backward prediction.
197*54e60f84SAndroid Build Coastguard Worker              */
198*54e60f84SAndroid Build Coastguard Worker             uint32_t    ref_frame_ctrl_l0              : 3;
199*54e60f84SAndroid Build Coastguard Worker             uint32_t    ref_frame_ctrl_l1              : 3;
200*54e60f84SAndroid Build Coastguard Worker 
201*54e60f84SAndroid Build Coastguard Worker             /** \brief Last Reference Frame index
202*54e60f84SAndroid Build Coastguard Worker              *  Specifies the index to RefFrameList[] which points to the LAST
203*54e60f84SAndroid Build Coastguard Worker              *  reference frame. It corresponds to active_ref_idx[0] in VP9 code.
204*54e60f84SAndroid Build Coastguard Worker              */
205*54e60f84SAndroid Build Coastguard Worker             uint32_t    ref_last_idx                   : 3;
206*54e60f84SAndroid Build Coastguard Worker 
207*54e60f84SAndroid Build Coastguard Worker             /** \brief Specifies the Sign Bias of the LAST reference frame.
208*54e60f84SAndroid Build Coastguard Worker              *  It corresponds to ref_frame_sign_bias[LAST_FRAME] in VP9 code.
209*54e60f84SAndroid Build Coastguard Worker              */
210*54e60f84SAndroid Build Coastguard Worker             uint32_t    ref_last_sign_bias             : 1;
211*54e60f84SAndroid Build Coastguard Worker 
212*54e60f84SAndroid Build Coastguard Worker             /** \brief GOLDEN Reference Frame index
213*54e60f84SAndroid Build Coastguard Worker              *  Specifies the index to RefFrameList[] which points to the Golden
214*54e60f84SAndroid Build Coastguard Worker              *  reference frame. It corresponds to active_ref_idx[1] in VP9 code.
215*54e60f84SAndroid Build Coastguard Worker              */
216*54e60f84SAndroid Build Coastguard Worker             uint32_t    ref_gf_idx                     : 3;
217*54e60f84SAndroid Build Coastguard Worker 
218*54e60f84SAndroid Build Coastguard Worker             /** \brief Specifies the Sign Bias of the GOLDEN reference frame.
219*54e60f84SAndroid Build Coastguard Worker              *  It corresponds to ref_frame_sign_bias[GOLDEN_FRAME] in VP9 code.
220*54e60f84SAndroid Build Coastguard Worker              */
221*54e60f84SAndroid Build Coastguard Worker             uint32_t    ref_gf_sign_bias               : 1;
222*54e60f84SAndroid Build Coastguard Worker 
223*54e60f84SAndroid Build Coastguard Worker             /** \brief Alternate Reference Frame index
224*54e60f84SAndroid Build Coastguard Worker              *  Specifies the index to RefFrameList[] which points to the Alternate
225*54e60f84SAndroid Build Coastguard Worker              *  reference frame. It corresponds to active_ref_idx[2] in VP9 code.
226*54e60f84SAndroid Build Coastguard Worker              */
227*54e60f84SAndroid Build Coastguard Worker             uint32_t    ref_arf_idx                    : 3;
228*54e60f84SAndroid Build Coastguard Worker 
229*54e60f84SAndroid Build Coastguard Worker             /** \brief Specifies the Sign Bias of the ALTERNATE reference frame.
230*54e60f84SAndroid Build Coastguard Worker              *  It corresponds to ref_frame_sign_bias[ALTREF_FRAME] in VP9 code.
231*54e60f84SAndroid Build Coastguard Worker              */
232*54e60f84SAndroid Build Coastguard Worker             uint32_t    ref_arf_sign_bias              : 1;
233*54e60f84SAndroid Build Coastguard Worker 
234*54e60f84SAndroid Build Coastguard Worker             /* The temporal id the frame belongs to */
235*54e60f84SAndroid Build Coastguard Worker             uint32_t    temporal_id                    : 8;
236*54e60f84SAndroid Build Coastguard Worker 
237*54e60f84SAndroid Build Coastguard Worker             uint32_t    reserved                       : 5;
238*54e60f84SAndroid Build Coastguard Worker         } bits;
239*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
240*54e60f84SAndroid Build Coastguard Worker     } ref_flags;
241*54e60f84SAndroid Build Coastguard Worker 
242*54e60f84SAndroid Build Coastguard Worker     union {
243*54e60f84SAndroid Build Coastguard Worker         struct {
244*54e60f84SAndroid Build Coastguard Worker             /**
245*54e60f84SAndroid Build Coastguard Worker              * Indicates if the current frame is a key frame or not.
246*54e60f84SAndroid Build Coastguard Worker              * Corresponds to the same VP9 syntax element in frame tag.
247*54e60f84SAndroid Build Coastguard Worker              */
248*54e60f84SAndroid Build Coastguard Worker             uint32_t    frame_type                     : 1;
249*54e60f84SAndroid Build Coastguard Worker 
250*54e60f84SAndroid Build Coastguard Worker             /** \brief show_frame
251*54e60f84SAndroid Build Coastguard Worker              *  0: current frame is not for display
252*54e60f84SAndroid Build Coastguard Worker                *  1: current frame is for display
253*54e60f84SAndroid Build Coastguard Worker              */
254*54e60f84SAndroid Build Coastguard Worker             uint32_t    show_frame                     : 1;
255*54e60f84SAndroid Build Coastguard Worker 
256*54e60f84SAndroid Build Coastguard Worker             /**
257*54e60f84SAndroid Build Coastguard Worker              * The following fields correspond to the same VP9 syntax elements
258*54e60f84SAndroid Build Coastguard Worker              * in the frame header.
259*54e60f84SAndroid Build Coastguard Worker              */
260*54e60f84SAndroid Build Coastguard Worker             uint32_t    error_resilient_mode           : 1;
261*54e60f84SAndroid Build Coastguard Worker 
262*54e60f84SAndroid Build Coastguard Worker             /** \brief Indicate intra-only for inter pictures.
263*54e60f84SAndroid Build Coastguard Worker              *  Must be 0 for key frames.
264*54e60f84SAndroid Build Coastguard Worker              *  0: inter frame use both intra and inter blocks
265*54e60f84SAndroid Build Coastguard Worker              *  1: inter frame use only intra blocks.
266*54e60f84SAndroid Build Coastguard Worker              */
267*54e60f84SAndroid Build Coastguard Worker             uint32_t    intra_only                     : 1;
268*54e60f84SAndroid Build Coastguard Worker 
269*54e60f84SAndroid Build Coastguard Worker             /** \brief Indicate high precision mode for Motion Vector prediction
270*54e60f84SAndroid Build Coastguard Worker              *  0: normal mode
271*54e60f84SAndroid Build Coastguard Worker              *  1: high precision mode
272*54e60f84SAndroid Build Coastguard Worker              */
273*54e60f84SAndroid Build Coastguard Worker             uint32_t    allow_high_precision_mv        : 1;
274*54e60f84SAndroid Build Coastguard Worker 
275*54e60f84SAndroid Build Coastguard Worker             /** \brief Motion Compensation Filter type
276*54e60f84SAndroid Build Coastguard Worker              *  0: eight-tap  (only this mode is supported now.)
277*54e60f84SAndroid Build Coastguard Worker              *  1: eight-tap-smooth
278*54e60f84SAndroid Build Coastguard Worker              *  2: eight-tap-sharp
279*54e60f84SAndroid Build Coastguard Worker              *  3: bilinear
280*54e60f84SAndroid Build Coastguard Worker              *  4: switchable
281*54e60f84SAndroid Build Coastguard Worker              */
282*54e60f84SAndroid Build Coastguard Worker             uint32_t    mcomp_filter_type              : 3;
283*54e60f84SAndroid Build Coastguard Worker             uint32_t    frame_parallel_decoding_mode   : 1;
284*54e60f84SAndroid Build Coastguard Worker             uint32_t    reset_frame_context            : 2;
285*54e60f84SAndroid Build Coastguard Worker             uint32_t    refresh_frame_context          : 1;
286*54e60f84SAndroid Build Coastguard Worker             uint32_t    frame_context_idx              : 2;
287*54e60f84SAndroid Build Coastguard Worker             uint32_t    segmentation_enabled           : 1;
288*54e60f84SAndroid Build Coastguard Worker 
289*54e60f84SAndroid Build Coastguard Worker             /* corresponds to variable temporal_update in VP9 code.
290*54e60f84SAndroid Build Coastguard Worker              * Indicates whether Segment ID is from bitstream or from previous
291*54e60f84SAndroid Build Coastguard Worker              * frame.
292*54e60f84SAndroid Build Coastguard Worker              * 0: Segment ID from bitstream
293*54e60f84SAndroid Build Coastguard Worker              * 1: Segment ID from previous frame
294*54e60f84SAndroid Build Coastguard Worker              */
295*54e60f84SAndroid Build Coastguard Worker             uint32_t    segmentation_temporal_update   : 1;
296*54e60f84SAndroid Build Coastguard Worker 
297*54e60f84SAndroid Build Coastguard Worker             /* corresponds to variable update_mb_segmentation_map in VP9 code.
298*54e60f84SAndroid Build Coastguard Worker              * Indicates how hardware determines segmentation ID
299*54e60f84SAndroid Build Coastguard Worker              * 0: intra block - segment id is 0;
300*54e60f84SAndroid Build Coastguard Worker              *    inter block - segment id from previous frame
301*54e60f84SAndroid Build Coastguard Worker              * 1: intra block - segment id from bitstream (app or GPU decides)
302*54e60f84SAndroid Build Coastguard Worker              *    inter block - depends on segmentation_temporal_update
303*54e60f84SAndroid Build Coastguard Worker              */
304*54e60f84SAndroid Build Coastguard Worker             uint32_t    segmentation_update_map        : 1;
305*54e60f84SAndroid Build Coastguard Worker 
306*54e60f84SAndroid Build Coastguard Worker             /** \brief Specifies if the picture is coded in lossless mode.
307*54e60f84SAndroid Build Coastguard Worker              *
308*54e60f84SAndroid Build Coastguard Worker              *  lossless_mode = base_qindex == 0 && y_dc_delta_q == 0  \
309*54e60f84SAndroid Build Coastguard Worker              *                  && uv_dc_delta_q == 0 && uv_ac_delta_q == 0;
310*54e60f84SAndroid Build Coastguard Worker              *  Where base_qindex, y_dc_delta_q, uv_dc_delta_q and uv_ac_delta_q
311*54e60f84SAndroid Build Coastguard Worker              *  are all variables in VP9 code.
312*54e60f84SAndroid Build Coastguard Worker              *
313*54e60f84SAndroid Build Coastguard Worker              *  When enabled, tx_mode needs to be set to 4x4 only and all
314*54e60f84SAndroid Build Coastguard Worker              *  tu_size in CU record set to 4x4 for entire frame.
315*54e60f84SAndroid Build Coastguard Worker              *  Software also has to program such that final_qindex=0 and
316*54e60f84SAndroid Build Coastguard Worker              *  final_filter_level=0 following the Quant Scale and
317*54e60f84SAndroid Build Coastguard Worker              *  Filter Level Table in Segmentation State section.
318*54e60f84SAndroid Build Coastguard Worker              *  Hardware forces Hadamard Tx when this bit is set.
319*54e60f84SAndroid Build Coastguard Worker              *  When lossless_mode is on, BRC has to be turned off.
320*54e60f84SAndroid Build Coastguard Worker              *  0: normal mode
321*54e60f84SAndroid Build Coastguard Worker              *  1: lossless mode
322*54e60f84SAndroid Build Coastguard Worker              */
323*54e60f84SAndroid Build Coastguard Worker             uint32_t    lossless_mode                  : 1;
324*54e60f84SAndroid Build Coastguard Worker 
325*54e60f84SAndroid Build Coastguard Worker             /** \brief MV prediction mode. Corresponds to VP9 variable with same name.
326*54e60f84SAndroid Build Coastguard Worker              *  comp_prediction_mode = 0:       single prediction ony,
327*54e60f84SAndroid Build Coastguard Worker              *  comp_prediction_mode = 1:       compound prediction,
328*54e60f84SAndroid Build Coastguard Worker              *  comp_prediction_mode = 2:       hybrid prediction
329*54e60f84SAndroid Build Coastguard Worker              *
330*54e60f84SAndroid Build Coastguard Worker              *  Not mandatory. App may suggest the setting based on power or
331*54e60f84SAndroid Build Coastguard Worker              *  performance. Kernal may use it as a guildline and decide the proper
332*54e60f84SAndroid Build Coastguard Worker              *  setting on its own.
333*54e60f84SAndroid Build Coastguard Worker              */
334*54e60f84SAndroid Build Coastguard Worker             uint32_t    comp_prediction_mode           : 2;
335*54e60f84SAndroid Build Coastguard Worker 
336*54e60f84SAndroid Build Coastguard Worker             /** \brief Indicate how segmentation is specified
337*54e60f84SAndroid Build Coastguard Worker              *  0   application specifies segmentation partitioning and
338*54e60f84SAndroid Build Coastguard Worker              *      relevant parameters.
339*54e60f84SAndroid Build Coastguard Worker              *  1   GPU may decide on segmentation. If application already
340*54e60f84SAndroid Build Coastguard Worker              *      provides segmentation information, GPU may choose to
341*54e60f84SAndroid Build Coastguard Worker              *      honor it and further split into more levels if possible.
342*54e60f84SAndroid Build Coastguard Worker              */
343*54e60f84SAndroid Build Coastguard Worker             uint32_t    auto_segmentation              : 1;
344*54e60f84SAndroid Build Coastguard Worker 
345*54e60f84SAndroid Build Coastguard Worker             /** \brief Indicate super frame syntax should be inserted
346*54e60f84SAndroid Build Coastguard Worker              *  0   current frame is not encapsulated in super frame structure
347*54e60f84SAndroid Build Coastguard Worker              *  1   current fame is to be encapsulated in super frame structure.
348*54e60f84SAndroid Build Coastguard Worker              *      super frame index syntax will be inserted by encoder at
349*54e60f84SAndroid Build Coastguard Worker              *      the end of current frame.
350*54e60f84SAndroid Build Coastguard Worker              */
351*54e60f84SAndroid Build Coastguard Worker             uint32_t    super_frame_flag               : 1;
352*54e60f84SAndroid Build Coastguard Worker 
353*54e60f84SAndroid Build Coastguard Worker             uint32_t    reserved                       : 10;
354*54e60f84SAndroid Build Coastguard Worker         } bits;
355*54e60f84SAndroid Build Coastguard Worker         uint32_t    value;
356*54e60f84SAndroid Build Coastguard Worker     } pic_flags;
357*54e60f84SAndroid Build Coastguard Worker 
358*54e60f84SAndroid Build Coastguard Worker     /** \brief indicate which frames in DPB should be refreshed.
359*54e60f84SAndroid Build Coastguard Worker      *  same syntax and semantic as in VP9 code.
360*54e60f84SAndroid Build Coastguard Worker      */
361*54e60f84SAndroid Build Coastguard Worker     uint8_t     refresh_frame_flags;
362*54e60f84SAndroid Build Coastguard Worker 
363*54e60f84SAndroid Build Coastguard Worker     /** \brief Base Q index in the VP9 term.
364*54e60f84SAndroid Build Coastguard Worker      *  Added with per segment delta Q index to get Q index of Luma AC.
365*54e60f84SAndroid Build Coastguard Worker      */
366*54e60f84SAndroid Build Coastguard Worker     uint8_t     luma_ac_qindex;
367*54e60f84SAndroid Build Coastguard Worker 
368*54e60f84SAndroid Build Coastguard Worker     /**
369*54e60f84SAndroid Build Coastguard Worker      *  Q index delta from base Q index in the VP9 term for Luma DC.
370*54e60f84SAndroid Build Coastguard Worker      */
371*54e60f84SAndroid Build Coastguard Worker     int8_t      luma_dc_qindex_delta;
372*54e60f84SAndroid Build Coastguard Worker 
373*54e60f84SAndroid Build Coastguard Worker     /**
374*54e60f84SAndroid Build Coastguard Worker      *  Q index delta from base Q index in the VP9 term for Chroma AC.
375*54e60f84SAndroid Build Coastguard Worker      */
376*54e60f84SAndroid Build Coastguard Worker     int8_t      chroma_ac_qindex_delta;
377*54e60f84SAndroid Build Coastguard Worker 
378*54e60f84SAndroid Build Coastguard Worker     /**
379*54e60f84SAndroid Build Coastguard Worker      *  Q index delta from base Q index in the VP9 term for Chroma DC.
380*54e60f84SAndroid Build Coastguard Worker      */
381*54e60f84SAndroid Build Coastguard Worker     int8_t      chroma_dc_qindex_delta;
382*54e60f84SAndroid Build Coastguard Worker 
383*54e60f84SAndroid Build Coastguard Worker     /** \brief filter level
384*54e60f84SAndroid Build Coastguard Worker      *  Corresponds to the same VP9 syntax element in frame header.
385*54e60f84SAndroid Build Coastguard Worker      */
386*54e60f84SAndroid Build Coastguard Worker     uint8_t     filter_level;
387*54e60f84SAndroid Build Coastguard Worker 
388*54e60f84SAndroid Build Coastguard Worker     /**
389*54e60f84SAndroid Build Coastguard Worker      * Controls the deblocking filter sensitivity.
390*54e60f84SAndroid Build Coastguard Worker      * Corresponds to the same VP9 syntax element in frame header.
391*54e60f84SAndroid Build Coastguard Worker      */
392*54e60f84SAndroid Build Coastguard Worker     uint8_t     sharpness_level;
393*54e60f84SAndroid Build Coastguard Worker 
394*54e60f84SAndroid Build Coastguard Worker     /** \brief Loop filter level reference delta values.
395*54e60f84SAndroid Build Coastguard Worker      *  Contains a list of 4 delta values for reference frame based block-level
396*54e60f84SAndroid Build Coastguard Worker      *  loop filter adjustment.
397*54e60f84SAndroid Build Coastguard Worker      *  If no update, set to 0.
398*54e60f84SAndroid Build Coastguard Worker      *  value range [-63..63]
399*54e60f84SAndroid Build Coastguard Worker      */
400*54e60f84SAndroid Build Coastguard Worker     int8_t      ref_lf_delta[4];
401*54e60f84SAndroid Build Coastguard Worker 
402*54e60f84SAndroid Build Coastguard Worker     /** \brief Loop filter level mode delta values.
403*54e60f84SAndroid Build Coastguard Worker      *  Contains a list of 4 delta values for coding mode based MB-level loop
404*54e60f84SAndroid Build Coastguard Worker      *  filter adjustment.
405*54e60f84SAndroid Build Coastguard Worker      *  If no update, set to 0.
406*54e60f84SAndroid Build Coastguard Worker      *  value range [-63..63]
407*54e60f84SAndroid Build Coastguard Worker      */
408*54e60f84SAndroid Build Coastguard Worker     int8_t      mode_lf_delta[2];
409*54e60f84SAndroid Build Coastguard Worker 
410*54e60f84SAndroid Build Coastguard Worker     /**
411*54e60f84SAndroid Build Coastguard Worker      *  Offset from starting position of output bitstream in bits where
412*54e60f84SAndroid Build Coastguard Worker      *  ref_lf_delta[] should be inserted. This offset should cover any metadata
413*54e60f84SAndroid Build Coastguard Worker      *  ahead of uncompressed header in inserted bit stream buffer (the offset
414*54e60f84SAndroid Build Coastguard Worker      *  should be same as that for final output bitstream buffer).
415*54e60f84SAndroid Build Coastguard Worker      *
416*54e60f84SAndroid Build Coastguard Worker      *  In BRC mode, always insert ref_lf_delta[] (This implies uncompressed
417*54e60f84SAndroid Build Coastguard Worker      *  header should have mode_ref_delta_enabled=1 and mode_ref_delta_update=1).
418*54e60f84SAndroid Build Coastguard Worker      */
419*54e60f84SAndroid Build Coastguard Worker     uint16_t    bit_offset_ref_lf_delta;
420*54e60f84SAndroid Build Coastguard Worker 
421*54e60f84SAndroid Build Coastguard Worker     /**
422*54e60f84SAndroid Build Coastguard Worker      *  Offset from starting position of output bitstream in bits where
423*54e60f84SAndroid Build Coastguard Worker      *  mode_lf_delta[] should be inserted.
424*54e60f84SAndroid Build Coastguard Worker      *
425*54e60f84SAndroid Build Coastguard Worker      *  In BRC mode, always insert mode_lf_delta[] (This implies uncompressed
426*54e60f84SAndroid Build Coastguard Worker      *  header should have mode_ref_delta_enabled=1 and mode_ref_delta_update=1).
427*54e60f84SAndroid Build Coastguard Worker      */
428*54e60f84SAndroid Build Coastguard Worker     uint16_t    bit_offset_mode_lf_delta;
429*54e60f84SAndroid Build Coastguard Worker 
430*54e60f84SAndroid Build Coastguard Worker     /**
431*54e60f84SAndroid Build Coastguard Worker      *  Offset from starting position of output bitstream in bits where (loop)
432*54e60f84SAndroid Build Coastguard Worker      *  filter_level should be inserted.
433*54e60f84SAndroid Build Coastguard Worker      */
434*54e60f84SAndroid Build Coastguard Worker     uint16_t    bit_offset_lf_level;
435*54e60f84SAndroid Build Coastguard Worker 
436*54e60f84SAndroid Build Coastguard Worker     /**
437*54e60f84SAndroid Build Coastguard Worker      *  Offset from starting position of output bitstream in bits where
438*54e60f84SAndroid Build Coastguard Worker      *  Base Qindex should be inserted.
439*54e60f84SAndroid Build Coastguard Worker      */
440*54e60f84SAndroid Build Coastguard Worker     uint16_t    bit_offset_qindex;
441*54e60f84SAndroid Build Coastguard Worker 
442*54e60f84SAndroid Build Coastguard Worker     /**
443*54e60f84SAndroid Build Coastguard Worker      *  Offset from starting position of output bitstream in bits where
444*54e60f84SAndroid Build Coastguard Worker      *  First Partition Size should be inserted.
445*54e60f84SAndroid Build Coastguard Worker      */
446*54e60f84SAndroid Build Coastguard Worker     uint16_t    bit_offset_first_partition_size;
447*54e60f84SAndroid Build Coastguard Worker 
448*54e60f84SAndroid Build Coastguard Worker     /**
449*54e60f84SAndroid Build Coastguard Worker      *  Offset from starting position of output bitstream in bits where
450*54e60f84SAndroid Build Coastguard Worker      *  segmentation_enabled is located in bitstream. When auto_segmentation
451*54e60f84SAndroid Build Coastguard Worker      *  is enabled, GPU uses this offset to locate and update the
452*54e60f84SAndroid Build Coastguard Worker      *  segmentation related information.
453*54e60f84SAndroid Build Coastguard Worker      */
454*54e60f84SAndroid Build Coastguard Worker     uint16_t    bit_offset_segmentation;
455*54e60f84SAndroid Build Coastguard Worker 
456*54e60f84SAndroid Build Coastguard Worker     /** \brief length in bit of segmentation portion from the location
457*54e60f84SAndroid Build Coastguard Worker      *  in bit stream where segmentation_enabled syntax is coded.
458*54e60f84SAndroid Build Coastguard Worker      *  When auto_segmentation is enabled, GPU uses this bit size to locate
459*54e60f84SAndroid Build Coastguard Worker      *  and update the information after segmentation.
460*54e60f84SAndroid Build Coastguard Worker      */
461*54e60f84SAndroid Build Coastguard Worker     uint16_t    bit_size_segmentation;
462*54e60f84SAndroid Build Coastguard Worker 
463*54e60f84SAndroid Build Coastguard Worker 
464*54e60f84SAndroid Build Coastguard Worker     /** \brief log2 of number of tile rows
465*54e60f84SAndroid Build Coastguard Worker      *  Corresponds to the same VP9 syntax element in frame header.
466*54e60f84SAndroid Build Coastguard Worker      *  value range [0..2]
467*54e60f84SAndroid Build Coastguard Worker      */
468*54e60f84SAndroid Build Coastguard Worker     uint8_t     log2_tile_rows;
469*54e60f84SAndroid Build Coastguard Worker 
470*54e60f84SAndroid Build Coastguard Worker     /** \brief log2 of number of tile columns
471*54e60f84SAndroid Build Coastguard Worker      *  Corresponds to the same VP9 syntax element in frame header.
472*54e60f84SAndroid Build Coastguard Worker      *  value range [0..6]
473*54e60f84SAndroid Build Coastguard Worker      */
474*54e60f84SAndroid Build Coastguard Worker     uint8_t     log2_tile_columns;
475*54e60f84SAndroid Build Coastguard Worker 
476*54e60f84SAndroid Build Coastguard Worker     /** \brief indicate frame-skip happens
477*54e60f84SAndroid Build Coastguard Worker      *  Application may choose to drop/skip one or mulitple encoded frames or
478*54e60f84SAndroid Build Coastguard Worker      *  to-be-encoded frame due to various reasons such as insufficient
479*54e60f84SAndroid Build Coastguard Worker      *  bandwidth.
480*54e60f84SAndroid Build Coastguard Worker      *  Application uses the following three flags to inform GPU about frame-skip.
481*54e60f84SAndroid Build Coastguard Worker      *
482*54e60f84SAndroid Build Coastguard Worker      *  value range of skip_frame_flag: [0..2]
483*54e60f84SAndroid Build Coastguard Worker      *      0 - encode as normal, no skip;
484*54e60f84SAndroid Build Coastguard Worker      *      1 - one or more frames were skipped by application prior to the
485*54e60f84SAndroid Build Coastguard Worker      *          current frame. Encode the current frame as normal. The driver
486*54e60f84SAndroid Build Coastguard Worker      *          will pass the number_skip_frames and skip_frames_size
487*54e60f84SAndroid Build Coastguard Worker      *          to bit rate control for adjustment.
488*54e60f84SAndroid Build Coastguard Worker      *      2 - the current frame is to be skipped. Do not encode it but encrypt
489*54e60f84SAndroid Build Coastguard Worker      *          the packed header contents. This is for the secure encoding case
490*54e60f84SAndroid Build Coastguard Worker      *          where application generates a frame of all skipped blocks.
491*54e60f84SAndroid Build Coastguard Worker      *          The packed header will contain the skipped frame.
492*54e60f84SAndroid Build Coastguard Worker      */
493*54e60f84SAndroid Build Coastguard Worker     uint8_t     skip_frame_flag;
494*54e60f84SAndroid Build Coastguard Worker 
495*54e60f84SAndroid Build Coastguard Worker     /** \brief The number of frames skipped prior to the current frame.
496*54e60f84SAndroid Build Coastguard Worker      *  It includes only the skipped frames that were not counted before,
497*54e60f84SAndroid Build Coastguard Worker      *  and does not include the frame with skip_frame_flag == 2.
498*54e60f84SAndroid Build Coastguard Worker      *  Valid when skip_frame_flag = 1.
499*54e60f84SAndroid Build Coastguard Worker      */
500*54e60f84SAndroid Build Coastguard Worker     uint8_t     number_skip_frames;
501*54e60f84SAndroid Build Coastguard Worker 
502*54e60f84SAndroid Build Coastguard Worker     /** \brief When skip_frame_flag = 1, the size of the skipped frames in bits.
503*54e60f84SAndroid Build Coastguard Worker      *  It includes only the skipped frames that were not counted before,
504*54e60f84SAndroid Build Coastguard Worker      *  and does not include the frame size with skip_frame_flag = 2.
505*54e60f84SAndroid Build Coastguard Worker      *  When skip_frame_flag = 2, it is the size of the current skipped frame
506*54e60f84SAndroid Build Coastguard Worker      *  that is to be encrypted.
507*54e60f84SAndroid Build Coastguard Worker      */
508*54e60f84SAndroid Build Coastguard Worker     uint32_t    skip_frames_size;
509*54e60f84SAndroid Build Coastguard Worker 
510*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
511*54e60f84SAndroid Build Coastguard Worker     uint32_t    va_reserved[VA_PADDING_MEDIUM];
512*54e60f84SAndroid Build Coastguard Worker } VAEncPictureParameterBufferVP9;
513*54e60f84SAndroid Build Coastguard Worker 
514*54e60f84SAndroid Build Coastguard Worker 
515*54e60f84SAndroid Build Coastguard Worker /**
516*54e60f84SAndroid Build Coastguard Worker  * \brief Per segment parameters
517*54e60f84SAndroid Build Coastguard Worker  */
518*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncSegParamVP9 {
519*54e60f84SAndroid Build Coastguard Worker     union {
520*54e60f84SAndroid Build Coastguard Worker         struct {
521*54e60f84SAndroid Build Coastguard Worker             /** \brief Indicates if per segment reference frame indicator is enabled.
522*54e60f84SAndroid Build Coastguard Worker              *  Corresponding to variable feature_enabled when
523*54e60f84SAndroid Build Coastguard Worker              *  j == SEG_LVL_REF_FRAME in function setup_segmentation() VP9 code.
524*54e60f84SAndroid Build Coastguard Worker              */
525*54e60f84SAndroid Build Coastguard Worker             uint8_t     segment_reference_enabled       : 1;
526*54e60f84SAndroid Build Coastguard Worker 
527*54e60f84SAndroid Build Coastguard Worker             /** \brief Specifies per segment reference indication.
528*54e60f84SAndroid Build Coastguard Worker              *  0: reserved
529*54e60f84SAndroid Build Coastguard Worker              *  1: Last ref
530*54e60f84SAndroid Build Coastguard Worker              *  2: golden
531*54e60f84SAndroid Build Coastguard Worker              *  3: altref
532*54e60f84SAndroid Build Coastguard Worker              *  Value can be derived from variable data when
533*54e60f84SAndroid Build Coastguard Worker              *  j == SEG_LVL_REF_FRAME in function setup_segmentation() VP9 code.
534*54e60f84SAndroid Build Coastguard Worker              *  value range: [0..3]
535*54e60f84SAndroid Build Coastguard Worker              */
536*54e60f84SAndroid Build Coastguard Worker             uint8_t     segment_reference               : 2;
537*54e60f84SAndroid Build Coastguard Worker 
538*54e60f84SAndroid Build Coastguard Worker             /** \brief Indicates if per segment skip mode is enabled.
539*54e60f84SAndroid Build Coastguard Worker              *  Corresponding to variable feature_enabled when
540*54e60f84SAndroid Build Coastguard Worker              *  j == SEG_LVL_SKIP in function setup_segmentation() VP9 code.
541*54e60f84SAndroid Build Coastguard Worker              */
542*54e60f84SAndroid Build Coastguard Worker             uint8_t     segment_reference_skipped       : 1;
543*54e60f84SAndroid Build Coastguard Worker 
544*54e60f84SAndroid Build Coastguard Worker             uint8_t     reserved                        : 4;
545*54e60f84SAndroid Build Coastguard Worker 
546*54e60f84SAndroid Build Coastguard Worker         } bits;
547*54e60f84SAndroid Build Coastguard Worker         uint8_t value;
548*54e60f84SAndroid Build Coastguard Worker     } seg_flags;
549*54e60f84SAndroid Build Coastguard Worker 
550*54e60f84SAndroid Build Coastguard Worker     /** \brief Specifies per segment Loop Filter Delta.
551*54e60f84SAndroid Build Coastguard Worker      *  Must be 0 when segmentation_enabled == 0.
552*54e60f84SAndroid Build Coastguard Worker      *  value range: [-63..63]
553*54e60f84SAndroid Build Coastguard Worker      */
554*54e60f84SAndroid Build Coastguard Worker     int8_t      segment_lf_level_delta;
555*54e60f84SAndroid Build Coastguard Worker 
556*54e60f84SAndroid Build Coastguard Worker     /** \brief Specifies per segment QIndex Delta.
557*54e60f84SAndroid Build Coastguard Worker      *  Must be 0 when segmentation_enabled == 0.
558*54e60f84SAndroid Build Coastguard Worker      *  value range: [-255..255]
559*54e60f84SAndroid Build Coastguard Worker      */
560*54e60f84SAndroid Build Coastguard Worker     int16_t     segment_qindex_delta;
561*54e60f84SAndroid Build Coastguard Worker 
562*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
563*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
564*54e60f84SAndroid Build Coastguard Worker } VAEncSegParamVP9;
565*54e60f84SAndroid Build Coastguard Worker 
566*54e60f84SAndroid Build Coastguard Worker /**
567*54e60f84SAndroid Build Coastguard Worker  *  Structure to convey all segment related information.
568*54e60f84SAndroid Build Coastguard Worker  *  If segmentation is disabled, this data structure is still required.
569*54e60f84SAndroid Build Coastguard Worker  *  In this case, only seg_data[0] contains valid data.
570*54e60f84SAndroid Build Coastguard Worker  *  This buffer is sent once per frame.
571*54e60f84SAndroid Build Coastguard Worker  *
572*54e60f84SAndroid Build Coastguard Worker  *  The buffer is created with VABufferType VAQMatrixBufferType.
573*54e60f84SAndroid Build Coastguard Worker  *
574*54e60f84SAndroid Build Coastguard Worker  */
575*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncMiscParameterTypeVP9PerSegmantParam {
576*54e60f84SAndroid Build Coastguard Worker     /**
577*54e60f84SAndroid Build Coastguard Worker      *  Parameters for 8 segments.
578*54e60f84SAndroid Build Coastguard Worker      */
579*54e60f84SAndroid Build Coastguard Worker     VAEncSegParamVP9    seg_data[8];
580*54e60f84SAndroid Build Coastguard Worker 
581*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
582*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
583*54e60f84SAndroid Build Coastguard Worker } VAEncMiscParameterTypeVP9PerSegmantParam;
584*54e60f84SAndroid Build Coastguard Worker 
585*54e60f84SAndroid Build Coastguard Worker 
586*54e60f84SAndroid Build Coastguard Worker /**
587*54e60f84SAndroid Build Coastguard Worker  * \brief VP9 Block Segmentation ID Buffer
588*54e60f84SAndroid Build Coastguard Worker  *
589*54e60f84SAndroid Build Coastguard Worker  * The application provides a buffer of VAEncMacroblockMapBufferType containing
590*54e60f84SAndroid Build Coastguard Worker  * the initial segmentation id for each 8x8 block, one byte each, in raster scan order.
591*54e60f84SAndroid Build Coastguard Worker  * Rate control may reassign it.  For example, a 640x480 video, the buffer has 4800 entries.
592*54e60f84SAndroid Build Coastguard Worker  * The value of each entry should be in the range [0..7], inclusive.
593*54e60f84SAndroid Build Coastguard Worker  * If segmentation is not enabled, the application does not need to provide it.
594*54e60f84SAndroid Build Coastguard Worker  */
595*54e60f84SAndroid Build Coastguard Worker 
596*54e60f84SAndroid Build Coastguard Worker 
597*54e60f84SAndroid Build Coastguard Worker /**@}*/
598*54e60f84SAndroid Build Coastguard Worker 
599*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus
600*54e60f84SAndroid Build Coastguard Worker }
601*54e60f84SAndroid Build Coastguard Worker #endif
602*54e60f84SAndroid Build Coastguard Worker 
603*54e60f84SAndroid Build Coastguard Worker #endif /* VA_ENC_VP9_H */
604