xref: /aosp_15_r20/external/libva/va/va_enc_vp8.h (revision 54e60f844a168e9a219354de272cd517ee8cd4b7)
1*54e60f84SAndroid Build Coastguard Worker /*
2*54e60f84SAndroid Build Coastguard Worker  * Copyright (c) 2007-2012 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_vp8.h
27*54e60f84SAndroid Build Coastguard Worker  * \brief VP8 encoding API
28*54e60f84SAndroid Build Coastguard Worker  *
29*54e60f84SAndroid Build Coastguard Worker  * This file contains the \ref api_enc_vp8 "VP8 encoding API".
30*54e60f84SAndroid Build Coastguard Worker  */
31*54e60f84SAndroid Build Coastguard Worker 
32*54e60f84SAndroid Build Coastguard Worker #ifndef VA_ENC_VP8_H
33*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_VP8_H
34*54e60f84SAndroid Build Coastguard Worker 
35*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus
36*54e60f84SAndroid Build Coastguard Worker extern "C" {
37*54e60f84SAndroid Build Coastguard Worker #endif
38*54e60f84SAndroid Build Coastguard Worker 
39*54e60f84SAndroid Build Coastguard Worker /**
40*54e60f84SAndroid Build Coastguard Worker  * \defgroup api_enc_vp8 VP8 encoding API
41*54e60f84SAndroid Build Coastguard Worker  *
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  * \brief VP8 Encoding Sequence Parameter Buffer Structure
47*54e60f84SAndroid Build Coastguard Worker  *
48*54e60f84SAndroid Build Coastguard Worker  * This structure conveys sequence level parameters.
49*54e60f84SAndroid Build Coastguard Worker  *
50*54e60f84SAndroid Build Coastguard Worker  */
51*54e60f84SAndroid Build Coastguard Worker typedef struct  _VAEncSequenceParameterBufferVP8 {
52*54e60f84SAndroid Build Coastguard Worker     /* frame width in pixels */
53*54e60f84SAndroid Build Coastguard Worker     uint32_t frame_width;
54*54e60f84SAndroid Build Coastguard Worker     /* frame height in pixels */
55*54e60f84SAndroid Build Coastguard Worker     uint32_t frame_height;
56*54e60f84SAndroid Build Coastguard Worker     /* horizontal scale */
57*54e60f84SAndroid Build Coastguard Worker     uint32_t frame_width_scale;
58*54e60f84SAndroid Build Coastguard Worker     /* vertical scale */
59*54e60f84SAndroid Build Coastguard Worker     uint32_t frame_height_scale;
60*54e60f84SAndroid Build Coastguard Worker 
61*54e60f84SAndroid Build Coastguard Worker     /* whether to enable error resilience features */
62*54e60f84SAndroid Build Coastguard Worker     uint32_t error_resilient;
63*54e60f84SAndroid Build Coastguard Worker     /* auto keyframe placement, non-zero means enable auto keyframe placement */
64*54e60f84SAndroid Build Coastguard Worker     uint32_t kf_auto;
65*54e60f84SAndroid Build Coastguard Worker     /* keyframe minimum interval */
66*54e60f84SAndroid Build Coastguard Worker     uint32_t kf_min_dist;
67*54e60f84SAndroid Build Coastguard Worker     /* keyframe maximum interval */
68*54e60f84SAndroid Build Coastguard Worker     uint32_t kf_max_dist;
69*54e60f84SAndroid Build Coastguard Worker 
70*54e60f84SAndroid Build Coastguard Worker 
71*54e60f84SAndroid Build Coastguard Worker     /* RC related fields. RC modes are set with VAConfigAttribRateControl */
72*54e60f84SAndroid Build Coastguard Worker     /* For VP8, CBR implies HRD conformance and VBR implies no HRD conformance */
73*54e60f84SAndroid Build Coastguard Worker 
74*54e60f84SAndroid Build Coastguard Worker     /**
75*54e60f84SAndroid Build Coastguard Worker      * Initial bitrate set for this sequence in CBR or VBR modes.
76*54e60f84SAndroid Build Coastguard Worker      *
77*54e60f84SAndroid Build Coastguard Worker      * This field represents the initial bitrate value for this
78*54e60f84SAndroid Build Coastguard Worker      * sequence if CBR or VBR mode is used, i.e. if the encoder
79*54e60f84SAndroid Build Coastguard Worker      * pipeline was created with a #VAConfigAttribRateControl
80*54e60f84SAndroid Build Coastguard Worker      * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR.
81*54e60f84SAndroid Build Coastguard Worker      *
82*54e60f84SAndroid Build Coastguard Worker      * The bitrate can be modified later on through
83*54e60f84SAndroid Build Coastguard Worker      * #VAEncMiscParameterRateControl buffers.
84*54e60f84SAndroid Build Coastguard Worker      */
85*54e60f84SAndroid Build Coastguard Worker     uint32_t bits_per_second;
86*54e60f84SAndroid Build Coastguard Worker     /* Period between I frames. */
87*54e60f84SAndroid Build Coastguard Worker     uint32_t intra_period;
88*54e60f84SAndroid Build Coastguard Worker 
89*54e60f84SAndroid Build Coastguard Worker     /* reference and reconstructed frame buffers
90*54e60f84SAndroid Build Coastguard Worker      * Used for driver auto reference management when configured through
91*54e60f84SAndroid Build Coastguard Worker      * VAConfigAttribEncAutoReference.
92*54e60f84SAndroid Build Coastguard Worker      */
93*54e60f84SAndroid Build Coastguard Worker     VASurfaceID reference_frames[4];
94*54e60f84SAndroid Build Coastguard Worker 
95*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
96*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
97*54e60f84SAndroid Build Coastguard Worker } VAEncSequenceParameterBufferVP8;
98*54e60f84SAndroid Build Coastguard Worker 
99*54e60f84SAndroid Build Coastguard Worker 
100*54e60f84SAndroid Build Coastguard Worker /**
101*54e60f84SAndroid Build Coastguard Worker  * \brief VP8 Encoding Picture Parameter Buffer Structure
102*54e60f84SAndroid Build Coastguard Worker  *
103*54e60f84SAndroid Build Coastguard Worker  * This structure conveys picture level parameters.
104*54e60f84SAndroid Build Coastguard Worker  *
105*54e60f84SAndroid Build Coastguard Worker  */
106*54e60f84SAndroid Build Coastguard Worker typedef struct  _VAEncPictureParameterBufferVP8 {
107*54e60f84SAndroid Build Coastguard Worker     /* surface to store reconstructed frame  */
108*54e60f84SAndroid Build Coastguard Worker     VASurfaceID reconstructed_frame;
109*54e60f84SAndroid Build Coastguard Worker 
110*54e60f84SAndroid Build Coastguard Worker     /*
111*54e60f84SAndroid Build Coastguard Worker      * surfaces to store reference frames in non auto reference mode
112*54e60f84SAndroid Build Coastguard Worker      * VA_INVALID_SURFACE can be used to denote an invalid reference frame.
113*54e60f84SAndroid Build Coastguard Worker      */
114*54e60f84SAndroid Build Coastguard Worker     VASurfaceID ref_last_frame;
115*54e60f84SAndroid Build Coastguard Worker     VASurfaceID ref_gf_frame;
116*54e60f84SAndroid Build Coastguard Worker     VASurfaceID ref_arf_frame;
117*54e60f84SAndroid Build Coastguard Worker 
118*54e60f84SAndroid Build Coastguard Worker     /* buffer to store coded data */
119*54e60f84SAndroid Build Coastguard Worker     VABufferID coded_buf;
120*54e60f84SAndroid Build Coastguard Worker 
121*54e60f84SAndroid Build Coastguard Worker     union {
122*54e60f84SAndroid Build Coastguard Worker         struct {
123*54e60f84SAndroid Build Coastguard Worker             /* force this frame to be a keyframe */
124*54e60f84SAndroid Build Coastguard Worker             uint32_t force_kf                       : 1;
125*54e60f84SAndroid Build Coastguard Worker             /* don't reference the last frame */
126*54e60f84SAndroid Build Coastguard Worker             uint32_t no_ref_last                    : 1;
127*54e60f84SAndroid Build Coastguard Worker             /* don't reference the golden frame */
128*54e60f84SAndroid Build Coastguard Worker             uint32_t no_ref_gf                      : 1;
129*54e60f84SAndroid Build Coastguard Worker             /* don't reference the alternate reference frame */
130*54e60f84SAndroid Build Coastguard Worker             uint32_t no_ref_arf                     : 1;
131*54e60f84SAndroid Build Coastguard Worker             /* The temporal id the frame belongs to. */
132*54e60f84SAndroid Build Coastguard Worker             uint32_t temporal_id                    : 8;
133*54e60f84SAndroid Build Coastguard Worker             /**
134*54e60f84SAndroid Build Coastguard Worker             *  following two flags indicate the reference order
135*54e60f84SAndroid Build Coastguard Worker             *  LastRef is specified by 01b;
136*54e60f84SAndroid Build Coastguard Worker             *  GoldRef is specified by 10b;
137*54e60f84SAndroid Build Coastguard Worker             *  AltRef  is specified by 11b;
138*54e60f84SAndroid Build Coastguard Worker             *  first_ref specifies the reference frame which is searched first.
139*54e60f84SAndroid Build Coastguard Worker             *  second_ref specifies the reference frame which is searched second
140*54e60f84SAndroid Build Coastguard Worker             *  if there is.
141*54e60f84SAndroid Build Coastguard Worker             */
142*54e60f84SAndroid Build Coastguard Worker             uint32_t first_ref                      : 2;
143*54e60f84SAndroid Build Coastguard Worker             uint32_t second_ref                     : 2;
144*54e60f84SAndroid Build Coastguard Worker             /** \brief Reserved for future use, must be zero */
145*54e60f84SAndroid Build Coastguard Worker             uint32_t reserved                       : 16;
146*54e60f84SAndroid Build Coastguard Worker         } bits;
147*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
148*54e60f84SAndroid Build Coastguard Worker     } ref_flags;
149*54e60f84SAndroid Build Coastguard Worker 
150*54e60f84SAndroid Build Coastguard Worker     union {
151*54e60f84SAndroid Build Coastguard Worker         struct {
152*54e60f84SAndroid Build Coastguard Worker             /* version */
153*54e60f84SAndroid Build Coastguard Worker             uint32_t frame_type                     : 1;
154*54e60f84SAndroid Build Coastguard Worker             uint32_t version                        : 3;
155*54e60f84SAndroid Build Coastguard Worker             /* show_frame */
156*54e60f84SAndroid Build Coastguard Worker             uint32_t show_frame                     : 1;
157*54e60f84SAndroid Build Coastguard Worker             /* color_space */
158*54e60f84SAndroid Build Coastguard Worker             uint32_t color_space                    : 1;
159*54e60f84SAndroid Build Coastguard Worker             /*  0: bicubic, 1: bilinear, other: none */
160*54e60f84SAndroid Build Coastguard Worker             uint32_t recon_filter_type              : 2;
161*54e60f84SAndroid Build Coastguard Worker             /*  0: no loop fitler, 1: simple loop filter */
162*54e60f84SAndroid Build Coastguard Worker             uint32_t loop_filter_type               : 2;
163*54e60f84SAndroid Build Coastguard Worker             /* 0: disabled, 1: normal, 2: simple */
164*54e60f84SAndroid Build Coastguard Worker             uint32_t auto_partitions                : 1;
165*54e60f84SAndroid Build Coastguard Worker             /* same as log2_nbr_of_dct_partitions in frame header syntax */
166*54e60f84SAndroid Build Coastguard Worker             uint32_t num_token_partitions           : 2;
167*54e60f84SAndroid Build Coastguard Worker 
168*54e60f84SAndroid Build Coastguard Worker             /**
169*54e60f84SAndroid Build Coastguard Worker              * The following fields correspond to the same VP8 syntax elements
170*54e60f84SAndroid Build Coastguard Worker              * in the frame header.
171*54e60f84SAndroid Build Coastguard Worker              */
172*54e60f84SAndroid Build Coastguard Worker             /**
173*54e60f84SAndroid Build Coastguard Worker                  * 0: clamping of reconstruction pixels is disabled,
174*54e60f84SAndroid Build Coastguard Worker                  * 1: clamping enabled.
175*54e60f84SAndroid Build Coastguard Worker                  */
176*54e60f84SAndroid Build Coastguard Worker             uint32_t clamping_type                  : 1;
177*54e60f84SAndroid Build Coastguard Worker             /* indicate segmentation is enabled for the current frame. */
178*54e60f84SAndroid Build Coastguard Worker             uint32_t segmentation_enabled           : 1;
179*54e60f84SAndroid Build Coastguard Worker             /**
180*54e60f84SAndroid Build Coastguard Worker              * Determines if the MB segmentation map is updated in the current
181*54e60f84SAndroid Build Coastguard Worker              * frame.
182*54e60f84SAndroid Build Coastguard Worker              */
183*54e60f84SAndroid Build Coastguard Worker             uint32_t update_mb_segmentation_map     : 1;
184*54e60f84SAndroid Build Coastguard Worker             /**
185*54e60f84SAndroid Build Coastguard Worker              * Indicates if the segment feature data is updated in the current
186*54e60f84SAndroid Build Coastguard Worker              * frame.
187*54e60f84SAndroid Build Coastguard Worker              */
188*54e60f84SAndroid Build Coastguard Worker             uint32_t update_segment_feature_data    : 1;
189*54e60f84SAndroid Build Coastguard Worker             /**
190*54e60f84SAndroid Build Coastguard Worker              * indicates if the MB level loop filter adjustment is enabled for
191*54e60f84SAndroid Build Coastguard Worker              * the current frame (0 off, 1 on).
192*54e60f84SAndroid Build Coastguard Worker              */
193*54e60f84SAndroid Build Coastguard Worker             uint32_t loop_filter_adj_enable         : 1;
194*54e60f84SAndroid Build Coastguard Worker             /**
195*54e60f84SAndroid Build Coastguard Worker              * Determines whether updated token probabilities are used only for
196*54e60f84SAndroid Build Coastguard Worker              * this frame or until further update.
197*54e60f84SAndroid Build Coastguard Worker              * It may be used by application to enable error resilient mode.
198*54e60f84SAndroid Build Coastguard Worker              * In this mode probability updates are allowed only at Key Frames.
199*54e60f84SAndroid Build Coastguard Worker              */
200*54e60f84SAndroid Build Coastguard Worker             uint32_t refresh_entropy_probs          : 1;
201*54e60f84SAndroid Build Coastguard Worker             /**
202*54e60f84SAndroid Build Coastguard Worker              * Determines if the current decoded frame refreshes the golden frame.
203*54e60f84SAndroid Build Coastguard Worker              */
204*54e60f84SAndroid Build Coastguard Worker             uint32_t refresh_golden_frame           : 1;
205*54e60f84SAndroid Build Coastguard Worker             /**
206*54e60f84SAndroid Build Coastguard Worker              * Determines if the current decoded frame refreshes the alternate
207*54e60f84SAndroid Build Coastguard Worker              * reference frame.
208*54e60f84SAndroid Build Coastguard Worker              */
209*54e60f84SAndroid Build Coastguard Worker             uint32_t refresh_alternate_frame        : 1;
210*54e60f84SAndroid Build Coastguard Worker             /**
211*54e60f84SAndroid Build Coastguard Worker              * Determines if the current decoded frame refreshes the last frame
212*54e60f84SAndroid Build Coastguard Worker              * reference buffer.
213*54e60f84SAndroid Build Coastguard Worker              */
214*54e60f84SAndroid Build Coastguard Worker             uint32_t refresh_last                   : 1;
215*54e60f84SAndroid Build Coastguard Worker             /**
216*54e60f84SAndroid Build Coastguard Worker              * Determines if the golden reference is replaced by another reference.
217*54e60f84SAndroid Build Coastguard Worker              */
218*54e60f84SAndroid Build Coastguard Worker             uint32_t copy_buffer_to_golden          : 2;
219*54e60f84SAndroid Build Coastguard Worker             /**
220*54e60f84SAndroid Build Coastguard Worker              * Determines if the alternate reference is replaced by another reference.
221*54e60f84SAndroid Build Coastguard Worker              */
222*54e60f84SAndroid Build Coastguard Worker             uint32_t copy_buffer_to_alternate       : 2;
223*54e60f84SAndroid Build Coastguard Worker             /**
224*54e60f84SAndroid Build Coastguard Worker              * Controls the sign of motion vectors when the golden frame is referenced.
225*54e60f84SAndroid Build Coastguard Worker              */
226*54e60f84SAndroid Build Coastguard Worker             uint32_t sign_bias_golden               : 1;
227*54e60f84SAndroid Build Coastguard Worker             /**
228*54e60f84SAndroid Build Coastguard Worker              * Controls the sign of motion vectors when the alternate frame is
229*54e60f84SAndroid Build Coastguard Worker              * referenced.
230*54e60f84SAndroid Build Coastguard Worker              */
231*54e60f84SAndroid Build Coastguard Worker             uint32_t sign_bias_alternate            : 1;
232*54e60f84SAndroid Build Coastguard Worker             /**
233*54e60f84SAndroid Build Coastguard Worker              * Enables or disables the skipping of macroblocks containing no
234*54e60f84SAndroid Build Coastguard Worker              * non-zero coefficients.
235*54e60f84SAndroid Build Coastguard Worker              */
236*54e60f84SAndroid Build Coastguard Worker             uint32_t mb_no_coeff_skip               : 1;
237*54e60f84SAndroid Build Coastguard Worker             /**
238*54e60f84SAndroid Build Coastguard Worker              * Enforces unconditional per-MB loop filter delta update setting frame
239*54e60f84SAndroid Build Coastguard Worker              * header flags mode_ref_lf_delta_update, all mb_mode_delta_update_flag[4],
240*54e60f84SAndroid Build Coastguard Worker              * and all ref_frame_delta_update_flag[4] to 1.
241*54e60f84SAndroid Build Coastguard Worker             * Since loop filter deltas are not automatically refreshed to default
242*54e60f84SAndroid Build Coastguard Worker              * values at key frames, dropped frame with delta update may prevent
243*54e60f84SAndroid Build Coastguard Worker              * correct decoding from the next key frame.
244*54e60f84SAndroid Build Coastguard Worker             * Encoder application is advised to set this flag to 1 at key frames.
245*54e60f84SAndroid Build Coastguard Worker             */
246*54e60f84SAndroid Build Coastguard Worker             uint32_t forced_lf_adjustment           : 1;
247*54e60f84SAndroid Build Coastguard Worker             uint32_t reserved                       : 2;
248*54e60f84SAndroid Build Coastguard Worker         } bits;
249*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
250*54e60f84SAndroid Build Coastguard Worker     } pic_flags;
251*54e60f84SAndroid Build Coastguard Worker 
252*54e60f84SAndroid Build Coastguard Worker     /**
253*54e60f84SAndroid Build Coastguard Worker      * Contains a list of 4 loop filter level values (updated value if applicable)
254*54e60f84SAndroid Build Coastguard Worker      * controlling the deblocking filter strength. Each entry represents a segment.
255*54e60f84SAndroid Build Coastguard Worker      * When segmentation is disabled, use entry 0.
256*54e60f84SAndroid Build Coastguard Worker      * When loop_filter_level is 0, loop filter shall be disabled.
257*54e60f84SAndroid Build Coastguard Worker      */
258*54e60f84SAndroid Build Coastguard Worker     int8_t loop_filter_level[4];
259*54e60f84SAndroid Build Coastguard Worker 
260*54e60f84SAndroid Build Coastguard Worker     /**
261*54e60f84SAndroid Build Coastguard Worker      * Contains a list of 4 delta values for reference frame based MB-level
262*54e60f84SAndroid Build Coastguard Worker      * loop filter adjustment.
263*54e60f84SAndroid Build Coastguard Worker      * If no update, then set to 0.
264*54e60f84SAndroid Build Coastguard Worker      */
265*54e60f84SAndroid Build Coastguard Worker     int8_t ref_lf_delta[4];
266*54e60f84SAndroid Build Coastguard Worker 
267*54e60f84SAndroid Build Coastguard Worker     /**
268*54e60f84SAndroid Build Coastguard Worker      * Contains a list of 4 delta values for coding mode based MB-level loop
269*54e60f84SAndroid Build Coastguard Worker      * filter adjustment.
270*54e60f84SAndroid Build Coastguard Worker      * If no update, then set to 0.
271*54e60f84SAndroid Build Coastguard Worker      */
272*54e60f84SAndroid Build Coastguard Worker     int8_t mode_lf_delta[4];
273*54e60f84SAndroid Build Coastguard Worker 
274*54e60f84SAndroid Build Coastguard Worker     /**
275*54e60f84SAndroid Build Coastguard Worker      * Controls the deblocking filter sensitivity.
276*54e60f84SAndroid Build Coastguard Worker      * Corresponds to the same VP8 syntax element in frame header.
277*54e60f84SAndroid Build Coastguard Worker      */
278*54e60f84SAndroid Build Coastguard Worker     uint8_t sharpness_level;
279*54e60f84SAndroid Build Coastguard Worker 
280*54e60f84SAndroid Build Coastguard Worker     /**
281*54e60f84SAndroid Build Coastguard Worker      * Application supplied maximum clamp value for Qindex used in quantization.
282*54e60f84SAndroid Build Coastguard Worker      * Qindex will not be allowed to exceed this value.
283*54e60f84SAndroid Build Coastguard Worker      * It has a valid range [0..127] inclusive.
284*54e60f84SAndroid Build Coastguard Worker      */
285*54e60f84SAndroid Build Coastguard Worker     uint8_t clamp_qindex_high;
286*54e60f84SAndroid Build Coastguard Worker 
287*54e60f84SAndroid Build Coastguard Worker     /**
288*54e60f84SAndroid Build Coastguard Worker      * Application supplied minimum clamp value for Qindex used in quantization.
289*54e60f84SAndroid Build Coastguard Worker      * Qindex will not be allowed to be lower than this value.
290*54e60f84SAndroid Build Coastguard Worker      * It has a valid range [0..127] inclusive.
291*54e60f84SAndroid Build Coastguard Worker      * Condition clamp_qindex_low <= clamp_qindex_high must be guaranteed,
292*54e60f84SAndroid Build Coastguard Worker      * otherwise they are ignored.
293*54e60f84SAndroid Build Coastguard Worker      */
294*54e60f84SAndroid Build Coastguard Worker     uint8_t clamp_qindex_low;
295*54e60f84SAndroid Build Coastguard Worker 
296*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
297*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
298*54e60f84SAndroid Build Coastguard Worker } VAEncPictureParameterBufferVP8;
299*54e60f84SAndroid Build Coastguard Worker 
300*54e60f84SAndroid Build Coastguard Worker 
301*54e60f84SAndroid Build Coastguard Worker /**
302*54e60f84SAndroid Build Coastguard Worker  * \brief VP8 MB Segmentation ID Buffer
303*54e60f84SAndroid Build Coastguard Worker  *
304*54e60f84SAndroid Build Coastguard Worker  * application provides buffer containing the initial segmentation id for each
305*54e60f84SAndroid Build Coastguard Worker  * MB, in raster scan order. Rate control may reassign it.
306*54e60f84SAndroid Build Coastguard Worker  * For an 640x480 video, the buffer has 1200 entries.
307*54e60f84SAndroid Build Coastguard Worker  * the value of each entry should be in the range [0..3], inclusive.
308*54e60f84SAndroid Build Coastguard Worker  * If segmentation is not enabled, application does not need to provide it.
309*54e60f84SAndroid Build Coastguard Worker  */
310*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncMBMapBufferVP8 {
311*54e60f84SAndroid Build Coastguard Worker     /**
312*54e60f84SAndroid Build Coastguard Worker      * number of MBs in the frame.
313*54e60f84SAndroid Build Coastguard Worker      * It is also the number of entries of mb_segment_id[];
314*54e60f84SAndroid Build Coastguard Worker      */
315*54e60f84SAndroid Build Coastguard Worker     uint32_t num_mbs;
316*54e60f84SAndroid Build Coastguard Worker     /**
317*54e60f84SAndroid Build Coastguard Worker      * per MB Segmentation ID Buffer
318*54e60f84SAndroid Build Coastguard Worker      */
319*54e60f84SAndroid Build Coastguard Worker     uint8_t *mb_segment_id;
320*54e60f84SAndroid Build Coastguard Worker 
321*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
322*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
323*54e60f84SAndroid Build Coastguard Worker } VAEncMBMapBufferVP8;
324*54e60f84SAndroid Build Coastguard Worker 
325*54e60f84SAndroid Build Coastguard Worker 
326*54e60f84SAndroid Build Coastguard Worker /**
327*54e60f84SAndroid Build Coastguard Worker  * \brief VP8 Quantization Matrix Buffer Structure
328*54e60f84SAndroid Build Coastguard Worker  *
329*54e60f84SAndroid Build Coastguard Worker  * Contains quantization index for yac(0-3) for each segment and quantization
330*54e60f84SAndroid Build Coastguard Worker  * index deltas, ydc(0), y2dc(1), y2ac(2), uvdc(3), uvac(4) that are applied
331*54e60f84SAndroid Build Coastguard Worker  * to all segments.  When segmentation is disabled, only quantization_index[0]
332*54e60f84SAndroid Build Coastguard Worker  * will be used. This structure is sent once per frame.
333*54e60f84SAndroid Build Coastguard Worker  */
334*54e60f84SAndroid Build Coastguard Worker typedef struct _VAQMatrixBufferVP8 {
335*54e60f84SAndroid Build Coastguard Worker     uint16_t quantization_index[4];
336*54e60f84SAndroid Build Coastguard Worker     int16_t quantization_index_delta[5];
337*54e60f84SAndroid Build Coastguard Worker 
338*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
339*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
340*54e60f84SAndroid Build Coastguard Worker } VAQMatrixBufferVP8;
341*54e60f84SAndroid Build Coastguard Worker 
342*54e60f84SAndroid Build Coastguard Worker 
343*54e60f84SAndroid Build Coastguard Worker 
344*54e60f84SAndroid Build Coastguard Worker /**@}*/
345*54e60f84SAndroid Build Coastguard Worker 
346*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus
347*54e60f84SAndroid Build Coastguard Worker }
348*54e60f84SAndroid Build Coastguard Worker #endif
349*54e60f84SAndroid Build Coastguard Worker 
350*54e60f84SAndroid Build Coastguard Worker #endif /* VA_ENC_VP8_H */
351