xref: /aosp_15_r20/external/libva/va/va.h (revision 54e60f844a168e9a219354de272cd517ee8cd4b7)
1*54e60f84SAndroid Build Coastguard Worker /*
2*54e60f84SAndroid Build Coastguard Worker  * Copyright (c) 2007-2009 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  * Video Acceleration (VA) API Specification
26*54e60f84SAndroid Build Coastguard Worker  *
27*54e60f84SAndroid Build Coastguard Worker  * Rev. 0.30
28*54e60f84SAndroid Build Coastguard Worker  * <[email protected]>
29*54e60f84SAndroid Build Coastguard Worker  *
30*54e60f84SAndroid Build Coastguard Worker  * Revision History:
31*54e60f84SAndroid Build Coastguard Worker  * rev 0.10 (12/10/2006 Jonathan Bian) - Initial draft
32*54e60f84SAndroid Build Coastguard Worker  * rev 0.11 (12/15/2006 Jonathan Bian) - Fixed some errors
33*54e60f84SAndroid Build Coastguard Worker  * rev 0.12 (02/05/2007 Jonathan Bian) - Added VC-1 data structures for slice level decode
34*54e60f84SAndroid Build Coastguard Worker  * rev 0.13 (02/28/2007 Jonathan Bian) - Added GetDisplay()
35*54e60f84SAndroid Build Coastguard Worker  * rev 0.14 (04/13/2007 Jonathan Bian) - Fixed MPEG-2 PictureParameter structure, cleaned up a few funcs.
36*54e60f84SAndroid Build Coastguard Worker  * rev 0.15 (04/20/2007 Jonathan Bian) - Overhauled buffer management
37*54e60f84SAndroid Build Coastguard Worker  * rev 0.16 (05/02/2007 Jonathan Bian) - Added error codes and fixed some issues with configuration
38*54e60f84SAndroid Build Coastguard Worker  * rev 0.17 (05/07/2007 Jonathan Bian) - Added H.264/AVC data structures for slice level decode.
39*54e60f84SAndroid Build Coastguard Worker  * rev 0.18 (05/14/2007 Jonathan Bian) - Added data structures for MPEG-4 slice level decode
40*54e60f84SAndroid Build Coastguard Worker  *                                       and MPEG-2 motion compensation.
41*54e60f84SAndroid Build Coastguard Worker  * rev 0.19 (08/06/2007 Jonathan Bian) - Removed extra type for bitplane data.
42*54e60f84SAndroid Build Coastguard Worker  * rev 0.20 (08/08/2007 Jonathan Bian) - Added missing fields to VC-1 PictureParameter structure.
43*54e60f84SAndroid Build Coastguard Worker  * rev 0.21 (08/20/2007 Jonathan Bian) - Added image and subpicture support.
44*54e60f84SAndroid Build Coastguard Worker  * rev 0.22 (08/27/2007 Jonathan Bian) - Added support for chroma-keying and global alpha.
45*54e60f84SAndroid Build Coastguard Worker  * rev 0.23 (09/11/2007 Jonathan Bian) - Fixed some issues with images and subpictures.
46*54e60f84SAndroid Build Coastguard Worker  * rev 0.24 (09/18/2007 Jonathan Bian) - Added display attributes.
47*54e60f84SAndroid Build Coastguard Worker  * rev 0.25 (10/18/2007 Jonathan Bian) - Changed to use IDs only for some types.
48*54e60f84SAndroid Build Coastguard Worker  * rev 0.26 (11/07/2007 Waldo Bastian) - Change vaCreateBuffer semantics
49*54e60f84SAndroid Build Coastguard Worker  * rev 0.27 (11/19/2007 Matt Sottek)   - Added DeriveImage
50*54e60f84SAndroid Build Coastguard Worker  * rev 0.28 (12/06/2007 Jonathan Bian) - Added new versions of PutImage and AssociateSubpicture
51*54e60f84SAndroid Build Coastguard Worker  *                                       to enable scaling
52*54e60f84SAndroid Build Coastguard Worker  * rev 0.29 (02/07/2008 Jonathan Bian) - VC1 parameter fixes,
53*54e60f84SAndroid Build Coastguard Worker  *                                       added VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED
54*54e60f84SAndroid Build Coastguard Worker  * rev 0.30 (03/01/2009 Jonathan Bian) - Added encoding support for H.264 BP and MPEG-4 SP and fixes
55*54e60f84SAndroid Build Coastguard Worker  *                                       for ISO C conformance.
56*54e60f84SAndroid Build Coastguard Worker  * rev 0.31 (09/02/2009 Gwenole Beauchesne) - VC-1/H264 fields change for VDPAU and XvBA backend
57*54e60f84SAndroid Build Coastguard Worker  *                                       Application needs to relink with the new library.
58*54e60f84SAndroid Build Coastguard Worker  *
59*54e60f84SAndroid Build Coastguard Worker  * rev 0.31.1 (03/29/2009)              - Data structure for JPEG encode
60*54e60f84SAndroid Build Coastguard Worker  * rev 0.31.2 (01/13/2011 Anthony Pabon)- Added a flag to indicate Subpicture coordinates are screen
61*54e60f84SAndroid Build Coastguard Worker  *                                        screen relative rather than source video relative.
62*54e60f84SAndroid Build Coastguard Worker  * rev 0.32.0 (01/13/2011 Xiang Haihao) - Add profile into VAPictureParameterBufferVC1
63*54e60f84SAndroid Build Coastguard Worker  *                                        update VAAPI to 0.32.0
64*54e60f84SAndroid Build Coastguard Worker  *
65*54e60f84SAndroid Build Coastguard Worker  * Acknowledgements:
66*54e60f84SAndroid Build Coastguard Worker  *  Some concepts borrowed from XvMC and XvImage.
67*54e60f84SAndroid Build Coastguard Worker  *  Waldo Bastian (Intel), Matt Sottek (Intel),  Austin Yuan (Intel), and Gwenole Beauchesne (SDS)
68*54e60f84SAndroid Build Coastguard Worker  *  contributed to various aspects of the API.
69*54e60f84SAndroid Build Coastguard Worker  */
70*54e60f84SAndroid Build Coastguard Worker 
71*54e60f84SAndroid Build Coastguard Worker /**
72*54e60f84SAndroid Build Coastguard Worker  * \file va.h
73*54e60f84SAndroid Build Coastguard Worker  * \brief The Core API
74*54e60f84SAndroid Build Coastguard Worker  *
75*54e60f84SAndroid Build Coastguard Worker  * This file contains the \ref api_core "Core API".
76*54e60f84SAndroid Build Coastguard Worker  */
77*54e60f84SAndroid Build Coastguard Worker 
78*54e60f84SAndroid Build Coastguard Worker #ifndef _VA_H_
79*54e60f84SAndroid Build Coastguard Worker #define _VA_H_
80*54e60f84SAndroid Build Coastguard Worker 
81*54e60f84SAndroid Build Coastguard Worker #include <stddef.h>
82*54e60f84SAndroid Build Coastguard Worker #include <stdint.h>
83*54e60f84SAndroid Build Coastguard Worker #include <va/va_version.h>
84*54e60f84SAndroid Build Coastguard Worker 
85*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus
86*54e60f84SAndroid Build Coastguard Worker extern "C" {
87*54e60f84SAndroid Build Coastguard Worker #endif
88*54e60f84SAndroid Build Coastguard Worker 
89*54e60f84SAndroid Build Coastguard Worker #if defined(__GNUC__) && !defined(__COVERITY__)
90*54e60f84SAndroid Build Coastguard Worker #define va_deprecated __attribute__((deprecated))
91*54e60f84SAndroid Build Coastguard Worker #if __GNUC__ >= 6
92*54e60f84SAndroid Build Coastguard Worker #define va_deprecated_enum va_deprecated
93*54e60f84SAndroid Build Coastguard Worker #else
94*54e60f84SAndroid Build Coastguard Worker #define va_deprecated_enum
95*54e60f84SAndroid Build Coastguard Worker #endif
96*54e60f84SAndroid Build Coastguard Worker #else
97*54e60f84SAndroid Build Coastguard Worker #define va_deprecated
98*54e60f84SAndroid Build Coastguard Worker #define va_deprecated_enum
99*54e60f84SAndroid Build Coastguard Worker #endif
100*54e60f84SAndroid Build Coastguard Worker 
101*54e60f84SAndroid Build Coastguard Worker /**
102*54e60f84SAndroid Build Coastguard Worker  * \mainpage Video Acceleration (VA) API
103*54e60f84SAndroid Build Coastguard Worker  *
104*54e60f84SAndroid Build Coastguard Worker  * \section intro Introduction
105*54e60f84SAndroid Build Coastguard Worker  *
106*54e60f84SAndroid Build Coastguard Worker  * The main motivation for VA-API (Video Acceleration API) is to
107*54e60f84SAndroid Build Coastguard Worker  * enable hardware accelerated video decode and encode at various
108*54e60f84SAndroid Build Coastguard Worker  * entry-points (VLD, IDCT, Motion Compensation etc.) for the
109*54e60f84SAndroid Build Coastguard Worker  * prevailing coding standards today (MPEG-2, MPEG-4 ASP/H.263, MPEG-4
110*54e60f84SAndroid Build Coastguard Worker  * AVC/H.264, VC-1/VMW3, and JPEG, HEVC/H265, VP8, VP9) and video pre/post
111*54e60f84SAndroid Build Coastguard Worker  * processing
112*54e60f84SAndroid Build Coastguard Worker  *
113*54e60f84SAndroid Build Coastguard Worker  * VA-API is split into several modules:
114*54e60f84SAndroid Build Coastguard Worker  * - \ref api_core
115*54e60f84SAndroid Build Coastguard Worker  * - Encoder (H264, HEVC, JPEG, MPEG2, VP8, VP9)
116*54e60f84SAndroid Build Coastguard Worker  *  - \ref api_enc_h264
117*54e60f84SAndroid Build Coastguard Worker  *  - \ref api_enc_hevc
118*54e60f84SAndroid Build Coastguard Worker  *  - \ref api_enc_jpeg
119*54e60f84SAndroid Build Coastguard Worker  *  - \ref api_enc_mpeg2
120*54e60f84SAndroid Build Coastguard Worker  *  - \ref api_enc_vp8
121*54e60f84SAndroid Build Coastguard Worker  *  - \ref api_enc_vp9
122*54e60f84SAndroid Build Coastguard Worker  *  - \ref api_enc_av1
123*54e60f84SAndroid Build Coastguard Worker  * - Decoder (HEVC, JPEG, VP8, VP9, AV1, VVC)
124*54e60f84SAndroid Build Coastguard Worker  *      - \ref api_dec_hevc
125*54e60f84SAndroid Build Coastguard Worker  *      - \ref api_dec_jpeg
126*54e60f84SAndroid Build Coastguard Worker  *      - \ref api_dec_vp8
127*54e60f84SAndroid Build Coastguard Worker  *      - \ref api_dec_vp9
128*54e60f84SAndroid Build Coastguard Worker  *      - \ref api_dec_av1
129*54e60f84SAndroid Build Coastguard Worker  *      - \ref api_dec_vvc
130*54e60f84SAndroid Build Coastguard Worker  * - \ref api_vpp
131*54e60f84SAndroid Build Coastguard Worker  * - \ref api_prot
132*54e60f84SAndroid Build Coastguard Worker  * - FEI (H264, HEVC)
133*54e60f84SAndroid Build Coastguard Worker  *  - \ref api_fei
134*54e60f84SAndroid Build Coastguard Worker  *  - \ref api_fei_h264
135*54e60f84SAndroid Build Coastguard Worker  *  - \ref api_fei_hevc
136*54e60f84SAndroid Build Coastguard Worker  *
137*54e60f84SAndroid Build Coastguard Worker  * \section threading Multithreading Guide
138*54e60f84SAndroid Build Coastguard Worker  * All VAAPI functions implemented in libva are thread-safe. For any VAAPI
139*54e60f84SAndroid Build Coastguard Worker  * function that requires the implementation of a backend (e.g. hardware driver),
140*54e60f84SAndroid Build Coastguard Worker  * the backend must ensure that its implementation is also thread-safe. If the
141*54e60f84SAndroid Build Coastguard Worker  * backend implementation of a VAAPI function is not thread-safe then this should
142*54e60f84SAndroid Build Coastguard Worker  * be considered as a bug against the backend implementation.
143*54e60f84SAndroid Build Coastguard Worker  *
144*54e60f84SAndroid Build Coastguard Worker  * It is assumed that none of the VAAPI functions will be called from signal
145*54e60f84SAndroid Build Coastguard Worker  * handlers.
146*54e60f84SAndroid Build Coastguard Worker  *
147*54e60f84SAndroid Build Coastguard Worker  * Thread-safety in this context means that when VAAPI is being called by multiple
148*54e60f84SAndroid Build Coastguard Worker  * concurrent threads, it will not crash or hang the OS, and VAAPI internal
149*54e60f84SAndroid Build Coastguard Worker  * data structures will not be corrupted. When multiple threads are operating on
150*54e60f84SAndroid Build Coastguard Worker  * the same VAAPI objects, it is the application's responsibility to synchronize
151*54e60f84SAndroid Build Coastguard Worker  * these operations in order to generate the expected results. For example, using
152*54e60f84SAndroid Build Coastguard Worker  * a single VAContext from multiple threads may generate unexpected results.
153*54e60f84SAndroid Build Coastguard Worker  *
154*54e60f84SAndroid Build Coastguard Worker  * Following pseudo code illustrates a multithreaded transcoding scenario, where
155*54e60f84SAndroid Build Coastguard Worker  * one thread is handling the decoding operation and another thread is handling
156*54e60f84SAndroid Build Coastguard Worker  * the encoding operation, while synchronizing the use of a common pool of
157*54e60f84SAndroid Build Coastguard Worker  * surfaces.
158*54e60f84SAndroid Build Coastguard Worker  *
159*54e60f84SAndroid Build Coastguard Worker  * \code
160*54e60f84SAndroid Build Coastguard Worker  * // Initialization
161*54e60f84SAndroid Build Coastguard Worker  * dpy = vaGetDisplayDRM(fd);
162*54e60f84SAndroid Build Coastguard Worker  * vaInitialize(dpy, ...);
163*54e60f84SAndroid Build Coastguard Worker  *
164*54e60f84SAndroid Build Coastguard Worker  * // Create surfaces required for decoding and subsequence encoding
165*54e60f84SAndroid Build Coastguard Worker  * vaCreateSurfaces(dpy, VA_RT_FORMAT_YUV420, width, height, &surfaces[0], ...);
166*54e60f84SAndroid Build Coastguard Worker  *
167*54e60f84SAndroid Build Coastguard Worker  * // Set up a queue for the surfaces shared between decode and encode threads
168*54e60f84SAndroid Build Coastguard Worker  * surface_queue = queue_create();
169*54e60f84SAndroid Build Coastguard Worker  *
170*54e60f84SAndroid Build Coastguard Worker  * // Create decode_thread
171*54e60f84SAndroid Build Coastguard Worker  * pthread_create(&decode_thread, NULL, decode, ...);
172*54e60f84SAndroid Build Coastguard Worker  *
173*54e60f84SAndroid Build Coastguard Worker  * // Create encode_thread
174*54e60f84SAndroid Build Coastguard Worker  * pthread_create(&encode_thread, NULL, encode, ...);
175*54e60f84SAndroid Build Coastguard Worker  *
176*54e60f84SAndroid Build Coastguard Worker  * // Decode thread function
177*54e60f84SAndroid Build Coastguard Worker  * decode() {
178*54e60f84SAndroid Build Coastguard Worker  *   // Find the decode entrypoint for H.264
179*54e60f84SAndroid Build Coastguard Worker  *   vaQueryConfigEntrypoints(dpy, h264_profile, entrypoints, ...);
180*54e60f84SAndroid Build Coastguard Worker  *
181*54e60f84SAndroid Build Coastguard Worker  *   // Create a config for H.264 decode
182*54e60f84SAndroid Build Coastguard Worker  *   vaCreateConfig(dpy, h264_profile, VAEntrypointVLD, ...);
183*54e60f84SAndroid Build Coastguard Worker  *
184*54e60f84SAndroid Build Coastguard Worker  *   // Create a context for decode
185*54e60f84SAndroid Build Coastguard Worker  *   vaCreateContext(dpy, config, width, height, VA_PROGRESSIVE, surfaces,
186*54e60f84SAndroid Build Coastguard Worker  *     num_surfaces, &decode_context);
187*54e60f84SAndroid Build Coastguard Worker  *
188*54e60f84SAndroid Build Coastguard Worker  *   // Decode frames in the bitstream
189*54e60f84SAndroid Build Coastguard Worker  *   for (;;) {
190*54e60f84SAndroid Build Coastguard Worker  *     // Parse one frame and decode
191*54e60f84SAndroid Build Coastguard Worker  *     vaBeginPicture(dpy, decode_context, surfaces[surface_index]);
192*54e60f84SAndroid Build Coastguard Worker  *     vaRenderPicture(dpy, decode_context, buf, ...);
193*54e60f84SAndroid Build Coastguard Worker  *     vaEndPicture(dpy, decode_context);
194*54e60f84SAndroid Build Coastguard Worker  *     // Poll the decoding status and enqueue the surface in display order after
195*54e60f84SAndroid Build Coastguard Worker  *     // decoding is complete
196*54e60f84SAndroid Build Coastguard Worker  *     vaQuerySurfaceStatus();
197*54e60f84SAndroid Build Coastguard Worker  *     enqueue(surface_queue, surface_index);
198*54e60f84SAndroid Build Coastguard Worker  *   }
199*54e60f84SAndroid Build Coastguard Worker  * }
200*54e60f84SAndroid Build Coastguard Worker  *
201*54e60f84SAndroid Build Coastguard Worker  * // Encode thread function
202*54e60f84SAndroid Build Coastguard Worker  * encode() {
203*54e60f84SAndroid Build Coastguard Worker  *   // Find the encode entrypoint for HEVC
204*54e60f84SAndroid Build Coastguard Worker  *   vaQueryConfigEntrypoints(dpy, hevc_profile, entrypoints, ...);
205*54e60f84SAndroid Build Coastguard Worker  *
206*54e60f84SAndroid Build Coastguard Worker  *   // Create a config for HEVC encode
207*54e60f84SAndroid Build Coastguard Worker  *   vaCreateConfig(dpy, hevc_profile, VAEntrypointEncSlice, ...);
208*54e60f84SAndroid Build Coastguard Worker  *
209*54e60f84SAndroid Build Coastguard Worker  *   // Create a context for encode
210*54e60f84SAndroid Build Coastguard Worker  *   vaCreateContext(dpy, config, width, height, VA_PROGRESSIVE, surfaces,
211*54e60f84SAndroid Build Coastguard Worker  *     num_surfaces, &encode_context);
212*54e60f84SAndroid Build Coastguard Worker  *
213*54e60f84SAndroid Build Coastguard Worker  *   // Encode frames produced by the decoder
214*54e60f84SAndroid Build Coastguard Worker  *   for (;;) {
215*54e60f84SAndroid Build Coastguard Worker  *     // Dequeue the surface enqueued by the decoder
216*54e60f84SAndroid Build Coastguard Worker  *     surface_index = dequeue(surface_queue);
217*54e60f84SAndroid Build Coastguard Worker  *     // Encode using this surface as the source
218*54e60f84SAndroid Build Coastguard Worker  *     vaBeginPicture(dpy, encode_context, surfaces[surface_index]);
219*54e60f84SAndroid Build Coastguard Worker  *     vaRenderPicture(dpy, encode_context, buf, ...);
220*54e60f84SAndroid Build Coastguard Worker  *     vaEndPicture(dpy, encode_context);
221*54e60f84SAndroid Build Coastguard Worker  *   }
222*54e60f84SAndroid Build Coastguard Worker  * }
223*54e60f84SAndroid Build Coastguard Worker  * \endcode
224*54e60f84SAndroid Build Coastguard Worker  */
225*54e60f84SAndroid Build Coastguard Worker 
226*54e60f84SAndroid Build Coastguard Worker /**
227*54e60f84SAndroid Build Coastguard Worker  * \defgroup api_core Core API
228*54e60f84SAndroid Build Coastguard Worker  *
229*54e60f84SAndroid Build Coastguard Worker  * @{
230*54e60f84SAndroid Build Coastguard Worker  */
231*54e60f84SAndroid Build Coastguard Worker 
232*54e60f84SAndroid Build Coastguard Worker /**
233*54e60f84SAndroid Build Coastguard Worker Overview
234*54e60f84SAndroid Build Coastguard Worker 
235*54e60f84SAndroid Build Coastguard Worker The VA API is intended to provide an interface between a video decode/encode/processing
236*54e60f84SAndroid Build Coastguard Worker application (client) and a hardware accelerator (server), to off-load
237*54e60f84SAndroid Build Coastguard Worker video decode/encode/processing operations from the host to the hardware accelerator at various
238*54e60f84SAndroid Build Coastguard Worker entry-points.
239*54e60f84SAndroid Build Coastguard Worker 
240*54e60f84SAndroid Build Coastguard Worker The basic operation steps are:
241*54e60f84SAndroid Build Coastguard Worker 
242*54e60f84SAndroid Build Coastguard Worker - Negotiate a mutually acceptable configuration with the server to lock
243*54e60f84SAndroid Build Coastguard Worker   down profile, entrypoints, and other attributes that will not change on
244*54e60f84SAndroid Build Coastguard Worker   a frame-by-frame basis.
245*54e60f84SAndroid Build Coastguard Worker - Create a video decode, encode or processing context which represents a
246*54e60f84SAndroid Build Coastguard Worker   "virtualized" hardware device
247*54e60f84SAndroid Build Coastguard Worker - Get and fill the render buffers with the corresponding data (depending on
248*54e60f84SAndroid Build Coastguard Worker   profiles and entrypoints)
249*54e60f84SAndroid Build Coastguard Worker - Pass the render buffers to the server to handle the current frame
250*54e60f84SAndroid Build Coastguard Worker 
251*54e60f84SAndroid Build Coastguard Worker Initialization & Configuration Management
252*54e60f84SAndroid Build Coastguard Worker 
253*54e60f84SAndroid Build Coastguard Worker - Find out supported profiles
254*54e60f84SAndroid Build Coastguard Worker - Find out entrypoints for a given profile
255*54e60f84SAndroid Build Coastguard Worker - Find out configuration attributes for a given profile/entrypoint pair
256*54e60f84SAndroid Build Coastguard Worker - Create a configuration for use by the application
257*54e60f84SAndroid Build Coastguard Worker 
258*54e60f84SAndroid Build Coastguard Worker */
259*54e60f84SAndroid Build Coastguard Worker 
260*54e60f84SAndroid Build Coastguard Worker typedef void* VADisplay;    /* window system dependent */
261*54e60f84SAndroid Build Coastguard Worker 
262*54e60f84SAndroid Build Coastguard Worker typedef int VAStatus;   /** Return status type from functions */
263*54e60f84SAndroid Build Coastguard Worker /** Values for the return status */
264*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_SUCCESS           0x00000000
265*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_OPERATION_FAILED    0x00000001
266*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_ALLOCATION_FAILED   0x00000002
267*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_INVALID_DISPLAY     0x00000003
268*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_INVALID_CONFIG      0x00000004
269*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_INVALID_CONTEXT     0x00000005
270*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_INVALID_SURFACE     0x00000006
271*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_INVALID_BUFFER      0x00000007
272*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_INVALID_IMAGE       0x00000008
273*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_INVALID_SUBPICTURE  0x00000009
274*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_ATTR_NOT_SUPPORTED  0x0000000a
275*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_MAX_NUM_EXCEEDED    0x0000000b
276*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_UNSUPPORTED_PROFILE 0x0000000c
277*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT  0x0000000d
278*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT   0x0000000e
279*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE  0x0000000f
280*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_SURFACE_BUSY        0x00000010
281*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_FLAG_NOT_SUPPORTED      0x00000011
282*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_INVALID_PARAMETER   0x00000012
283*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED 0x00000013
284*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_UNIMPLEMENTED           0x00000014
285*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_SURFACE_IN_DISPLAYING   0x00000015
286*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_INVALID_IMAGE_FORMAT    0x00000016
287*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_DECODING_ERROR          0x00000017
288*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_ENCODING_ERROR          0x00000018
289*54e60f84SAndroid Build Coastguard Worker /**
290*54e60f84SAndroid Build Coastguard Worker  * \brief An invalid/unsupported value was supplied.
291*54e60f84SAndroid Build Coastguard Worker  *
292*54e60f84SAndroid Build Coastguard Worker  * This is a catch-all error code for invalid or unsupported values.
293*54e60f84SAndroid Build Coastguard Worker  * e.g. value exceeding the valid range, invalid type in the context
294*54e60f84SAndroid Build Coastguard Worker  * of generic attribute values.
295*54e60f84SAndroid Build Coastguard Worker  */
296*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_INVALID_VALUE           0x00000019
297*54e60f84SAndroid Build Coastguard Worker /** \brief An unsupported filter was supplied. */
298*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_UNSUPPORTED_FILTER      0x00000020
299*54e60f84SAndroid Build Coastguard Worker /** \brief An invalid filter chain was supplied. */
300*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_INVALID_FILTER_CHAIN    0x00000021
301*54e60f84SAndroid Build Coastguard Worker /** \brief Indicate HW busy (e.g. run multiple encoding simultaneously). */
302*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_HW_BUSY                 0x00000022
303*54e60f84SAndroid Build Coastguard Worker /** \brief An unsupported memory type was supplied. */
304*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE 0x00000024
305*54e60f84SAndroid Build Coastguard Worker /** \brief Indicate allocated buffer size is not enough for input or output. */
306*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_NOT_ENOUGH_BUFFER       0x00000025
307*54e60f84SAndroid Build Coastguard Worker /** \brief Indicate an operation isn't completed because time-out interval elapsed. */
308*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_TIMEDOUT                0x00000026
309*54e60f84SAndroid Build Coastguard Worker #define VA_STATUS_ERROR_UNKNOWN                 0xFFFFFFFF
310*54e60f84SAndroid Build Coastguard Worker 
311*54e60f84SAndroid Build Coastguard Worker /**
312*54e60f84SAndroid Build Coastguard Worker  * 1. De-interlacing flags for vaPutSurface()
313*54e60f84SAndroid Build Coastguard Worker  * 2. Surface sample type for input/output surface flag
314*54e60f84SAndroid Build Coastguard Worker  *    - Progressive: VA_FRAME_PICTURE
315*54e60f84SAndroid Build Coastguard Worker  *    - Interleaved: VA_TOP_FIELD_FIRST, VA_BOTTOM_FIELD_FIRST
316*54e60f84SAndroid Build Coastguard Worker  *    - Field: VA_TOP_FIELD, VA_BOTTOM_FIELD
317*54e60f84SAndroid Build Coastguard Worker */
318*54e60f84SAndroid Build Coastguard Worker #define VA_FRAME_PICTURE        0x00000000
319*54e60f84SAndroid Build Coastguard Worker #define VA_TOP_FIELD            0x00000001
320*54e60f84SAndroid Build Coastguard Worker #define VA_BOTTOM_FIELD         0x00000002
321*54e60f84SAndroid Build Coastguard Worker #define VA_TOP_FIELD_FIRST      0x00000004
322*54e60f84SAndroid Build Coastguard Worker #define VA_BOTTOM_FIELD_FIRST   0x00000008
323*54e60f84SAndroid Build Coastguard Worker 
324*54e60f84SAndroid Build Coastguard Worker /**
325*54e60f84SAndroid Build Coastguard Worker  * Enabled the positioning/cropping/blending feature:
326*54e60f84SAndroid Build Coastguard Worker  * 1, specify the video playback position in the isurface
327*54e60f84SAndroid Build Coastguard Worker  * 2, specify the cropping info for video playback
328*54e60f84SAndroid Build Coastguard Worker  * 3, encoded video will blend with background color
329*54e60f84SAndroid Build Coastguard Worker  */
330*54e60f84SAndroid Build Coastguard Worker #define VA_ENABLE_BLEND         0x00000004 /* video area blend with the constant color */
331*54e60f84SAndroid Build Coastguard Worker 
332*54e60f84SAndroid Build Coastguard Worker /**
333*54e60f84SAndroid Build Coastguard Worker  * Clears the drawable with background color.
334*54e60f84SAndroid Build Coastguard Worker  * for hardware overlay based implementation this flag
335*54e60f84SAndroid Build Coastguard Worker  * can be used to turn off the overlay
336*54e60f84SAndroid Build Coastguard Worker  */
337*54e60f84SAndroid Build Coastguard Worker #define VA_CLEAR_DRAWABLE       0x00000008
338*54e60f84SAndroid Build Coastguard Worker 
339*54e60f84SAndroid Build Coastguard Worker /** Color space conversion flags for vaPutSurface() */
340*54e60f84SAndroid Build Coastguard Worker #define VA_SRC_COLOR_MASK       0x000000f0
341*54e60f84SAndroid Build Coastguard Worker #define VA_SRC_BT601            0x00000010
342*54e60f84SAndroid Build Coastguard Worker #define VA_SRC_BT709            0x00000020
343*54e60f84SAndroid Build Coastguard Worker #define VA_SRC_SMPTE_240        0x00000040
344*54e60f84SAndroid Build Coastguard Worker 
345*54e60f84SAndroid Build Coastguard Worker /** Scaling flags for vaPutSurface() */
346*54e60f84SAndroid Build Coastguard Worker #define VA_FILTER_SCALING_DEFAULT       0x00000000
347*54e60f84SAndroid Build Coastguard Worker #define VA_FILTER_SCALING_FAST          0x00000100
348*54e60f84SAndroid Build Coastguard Worker #define VA_FILTER_SCALING_HQ            0x00000200
349*54e60f84SAndroid Build Coastguard Worker #define VA_FILTER_SCALING_NL_ANAMORPHIC 0x00000300
350*54e60f84SAndroid Build Coastguard Worker #define VA_FILTER_SCALING_MASK          0x00000f00
351*54e60f84SAndroid Build Coastguard Worker 
352*54e60f84SAndroid Build Coastguard Worker /** Interpolation method for scaling */
353*54e60f84SAndroid Build Coastguard Worker #define VA_FILTER_INTERPOLATION_DEFAULT                    0x00000000
354*54e60f84SAndroid Build Coastguard Worker #define VA_FILTER_INTERPOLATION_NEAREST_NEIGHBOR           0x00001000
355*54e60f84SAndroid Build Coastguard Worker #define VA_FILTER_INTERPOLATION_BILINEAR                   0x00002000
356*54e60f84SAndroid Build Coastguard Worker #define VA_FILTER_INTERPOLATION_ADVANCED                   0x00003000
357*54e60f84SAndroid Build Coastguard Worker #define VA_FILTER_INTERPOLATION_MASK                       0x0000f000
358*54e60f84SAndroid Build Coastguard Worker 
359*54e60f84SAndroid Build Coastguard Worker /** Padding size in 4-bytes */
360*54e60f84SAndroid Build Coastguard Worker #define VA_PADDING_LOW          4
361*54e60f84SAndroid Build Coastguard Worker #define VA_PADDING_MEDIUM       8
362*54e60f84SAndroid Build Coastguard Worker #define VA_PADDING_HIGH         16
363*54e60f84SAndroid Build Coastguard Worker #define VA_PADDING_LARGE        32
364*54e60f84SAndroid Build Coastguard Worker 
365*54e60f84SAndroid Build Coastguard Worker /** operation options */
366*54e60f84SAndroid Build Coastguard Worker /** synchronization, block call, output should be ready after execution function return*/
367*54e60f84SAndroid Build Coastguard Worker #define VA_EXEC_SYNC              0x0
368*54e60f84SAndroid Build Coastguard Worker /** asynchronization,application should call additonal sync operation to access output */
369*54e60f84SAndroid Build Coastguard Worker #define VA_EXEC_ASYNC             0x1
370*54e60f84SAndroid Build Coastguard Worker 
371*54e60f84SAndroid Build Coastguard Worker /** operation mode */
372*54e60f84SAndroid Build Coastguard Worker #define VA_EXEC_MODE_DEFAULT      0x0
373*54e60f84SAndroid Build Coastguard Worker #define VA_EXEC_MODE_POWER_SAVING 0x1
374*54e60f84SAndroid Build Coastguard Worker #define VA_EXEC_MODE_PERFORMANCE  0x2
375*54e60f84SAndroid Build Coastguard Worker 
376*54e60f84SAndroid Build Coastguard Worker /* Values used to describe device features. */
377*54e60f84SAndroid Build Coastguard Worker /** The feature is not supported by the device.
378*54e60f84SAndroid Build Coastguard Worker  *
379*54e60f84SAndroid Build Coastguard Worker  * Any corresponding feature flag must not be set.
380*54e60f84SAndroid Build Coastguard Worker  */
381*54e60f84SAndroid Build Coastguard Worker #define VA_FEATURE_NOT_SUPPORTED  0
382*54e60f84SAndroid Build Coastguard Worker /** The feature is supported by the device.
383*54e60f84SAndroid Build Coastguard Worker  *
384*54e60f84SAndroid Build Coastguard Worker  * The user may decide whether or not to use this feature.
385*54e60f84SAndroid Build Coastguard Worker  *
386*54e60f84SAndroid Build Coastguard Worker  * Note that support for a feature only indicates that the hardware
387*54e60f84SAndroid Build Coastguard Worker  * is able to use it; whether it is actually a positive change to
388*54e60f84SAndroid Build Coastguard Worker  * enable it in a given situation will depend on other factors
389*54e60f84SAndroid Build Coastguard Worker  * including the input provided by the user.
390*54e60f84SAndroid Build Coastguard Worker  */
391*54e60f84SAndroid Build Coastguard Worker #define VA_FEATURE_SUPPORTED      1
392*54e60f84SAndroid Build Coastguard Worker /** The feature is required by the device.
393*54e60f84SAndroid Build Coastguard Worker  *
394*54e60f84SAndroid Build Coastguard Worker  * The device does not support not enabling this feature, so any
395*54e60f84SAndroid Build Coastguard Worker  * corresponding feature flag must be set and any additional
396*54e60f84SAndroid Build Coastguard Worker  * configuration needed by the feature must be supplied.
397*54e60f84SAndroid Build Coastguard Worker  */
398*54e60f84SAndroid Build Coastguard Worker #define VA_FEATURE_REQUIRED       2
399*54e60f84SAndroid Build Coastguard Worker 
400*54e60f84SAndroid Build Coastguard Worker /**
401*54e60f84SAndroid Build Coastguard Worker  * Returns a short english description of error_status
402*54e60f84SAndroid Build Coastguard Worker  */
403*54e60f84SAndroid Build Coastguard Worker const char *vaErrorStr(VAStatus error_status);
404*54e60f84SAndroid Build Coastguard Worker 
405*54e60f84SAndroid Build Coastguard Worker /** \brief Structure to describe rectangle. */
406*54e60f84SAndroid Build Coastguard Worker typedef struct _VARectangle {
407*54e60f84SAndroid Build Coastguard Worker     int16_t x;
408*54e60f84SAndroid Build Coastguard Worker     int16_t y;
409*54e60f84SAndroid Build Coastguard Worker     uint16_t width;
410*54e60f84SAndroid Build Coastguard Worker     uint16_t height;
411*54e60f84SAndroid Build Coastguard Worker } VARectangle;
412*54e60f84SAndroid Build Coastguard Worker 
413*54e60f84SAndroid Build Coastguard Worker /** \brief Generic motion vector data structure. */
414*54e60f84SAndroid Build Coastguard Worker typedef struct _VAMotionVector {
415*54e60f84SAndroid Build Coastguard Worker     /** \brief Past reference
416*54e60f84SAndroid Build Coastguard Worker      *
417*54e60f84SAndroid Build Coastguard Worker      * - \c [0]: horizontal motion vector for past reference
418*54e60f84SAndroid Build Coastguard Worker      * - \c [1]: vertical motion vector for past reference
419*54e60f84SAndroid Build Coastguard Worker      */
420*54e60f84SAndroid Build Coastguard Worker     int16_t  mv0[2];
421*54e60f84SAndroid Build Coastguard Worker     /** \brief Future reference
422*54e60f84SAndroid Build Coastguard Worker      *
423*54e60f84SAndroid Build Coastguard Worker      * - \c [0]: horizontal motion vector for future reference
424*54e60f84SAndroid Build Coastguard Worker      * - \c [1]: vertical motion vector for future reference
425*54e60f84SAndroid Build Coastguard Worker      */
426*54e60f84SAndroid Build Coastguard Worker     int16_t  mv1[2];
427*54e60f84SAndroid Build Coastguard Worker } VAMotionVector;
428*54e60f84SAndroid Build Coastguard Worker 
429*54e60f84SAndroid Build Coastguard Worker /** Type of a message callback, used for both error and info log. */
430*54e60f84SAndroid Build Coastguard Worker typedef void (*VAMessageCallback)(void *user_context, const char *message);
431*54e60f84SAndroid Build Coastguard Worker 
432*54e60f84SAndroid Build Coastguard Worker /**
433*54e60f84SAndroid Build Coastguard Worker  * Set the callback for error messages, or NULL for no logging.
434*54e60f84SAndroid Build Coastguard Worker  * Returns the previous one, or NULL if it was disabled.
435*54e60f84SAndroid Build Coastguard Worker  */
436*54e60f84SAndroid Build Coastguard Worker VAMessageCallback vaSetErrorCallback(VADisplay dpy, VAMessageCallback callback, void *user_context);
437*54e60f84SAndroid Build Coastguard Worker 
438*54e60f84SAndroid Build Coastguard Worker /**
439*54e60f84SAndroid Build Coastguard Worker  * Set the callback for info messages, or NULL for no logging.
440*54e60f84SAndroid Build Coastguard Worker  * Returns the previous one, or NULL if it was disabled.
441*54e60f84SAndroid Build Coastguard Worker  */
442*54e60f84SAndroid Build Coastguard Worker VAMessageCallback vaSetInfoCallback(VADisplay dpy, VAMessageCallback callback, void *user_context);
443*54e60f84SAndroid Build Coastguard Worker 
444*54e60f84SAndroid Build Coastguard Worker /**
445*54e60f84SAndroid Build Coastguard Worker  * Initialization:
446*54e60f84SAndroid Build Coastguard Worker  * A display must be obtained by calling vaGetDisplay() before calling
447*54e60f84SAndroid Build Coastguard Worker  * vaInitialize() and other functions. This connects the API to the
448*54e60f84SAndroid Build Coastguard Worker  * native window system.
449*54e60f84SAndroid Build Coastguard Worker  * For X Windows, native_dpy would be from XOpenDisplay()
450*54e60f84SAndroid Build Coastguard Worker  */
451*54e60f84SAndroid Build Coastguard Worker typedef void* VANativeDisplay;  /* window system dependent */
452*54e60f84SAndroid Build Coastguard Worker 
453*54e60f84SAndroid Build Coastguard Worker int vaDisplayIsValid(VADisplay dpy);
454*54e60f84SAndroid Build Coastguard Worker 
455*54e60f84SAndroid Build Coastguard Worker /**
456*54e60f84SAndroid Build Coastguard Worker  *  Set the override driver name instead of queried driver driver.
457*54e60f84SAndroid Build Coastguard Worker  */
458*54e60f84SAndroid Build Coastguard Worker VAStatus vaSetDriverName(VADisplay dpy,
459*54e60f84SAndroid Build Coastguard Worker                          char *driver_name
460*54e60f84SAndroid Build Coastguard Worker                         );
461*54e60f84SAndroid Build Coastguard Worker 
462*54e60f84SAndroid Build Coastguard Worker /**
463*54e60f84SAndroid Build Coastguard Worker  * Initialize the library
464*54e60f84SAndroid Build Coastguard Worker  */
465*54e60f84SAndroid Build Coastguard Worker VAStatus vaInitialize(
466*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
467*54e60f84SAndroid Build Coastguard Worker     int *major_version,  /* out */
468*54e60f84SAndroid Build Coastguard Worker     int *minor_version   /* out */
469*54e60f84SAndroid Build Coastguard Worker );
470*54e60f84SAndroid Build Coastguard Worker 
471*54e60f84SAndroid Build Coastguard Worker /**
472*54e60f84SAndroid Build Coastguard Worker  * After this call, all library internal resources will be cleaned up
473*54e60f84SAndroid Build Coastguard Worker  */
474*54e60f84SAndroid Build Coastguard Worker VAStatus vaTerminate(
475*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy
476*54e60f84SAndroid Build Coastguard Worker );
477*54e60f84SAndroid Build Coastguard Worker 
478*54e60f84SAndroid Build Coastguard Worker /**
479*54e60f84SAndroid Build Coastguard Worker  * vaQueryVendorString returns a pointer to a zero-terminated string
480*54e60f84SAndroid Build Coastguard Worker  * describing some aspects of the VA implemenation on a specific
481*54e60f84SAndroid Build Coastguard Worker  * hardware accelerator. The format of the returned string is vendor
482*54e60f84SAndroid Build Coastguard Worker  * specific and at the discretion of the implementer.
483*54e60f84SAndroid Build Coastguard Worker  * e.g. for the Intel GMA500 implementation, an example would be:
484*54e60f84SAndroid Build Coastguard Worker  * "Intel GMA500 - 2.0.0.32L.0005"
485*54e60f84SAndroid Build Coastguard Worker  */
486*54e60f84SAndroid Build Coastguard Worker const char *vaQueryVendorString(
487*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy
488*54e60f84SAndroid Build Coastguard Worker );
489*54e60f84SAndroid Build Coastguard Worker 
490*54e60f84SAndroid Build Coastguard Worker typedef int (*VAPrivFunc)(void);
491*54e60f84SAndroid Build Coastguard Worker 
492*54e60f84SAndroid Build Coastguard Worker /**
493*54e60f84SAndroid Build Coastguard Worker  * Return a function pointer given a function name in the library.
494*54e60f84SAndroid Build Coastguard Worker  * This allows private interfaces into the library
495*54e60f84SAndroid Build Coastguard Worker  */
496*54e60f84SAndroid Build Coastguard Worker VAPrivFunc vaGetLibFunc(
497*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
498*54e60f84SAndroid Build Coastguard Worker     const char *func
499*54e60f84SAndroid Build Coastguard Worker );
500*54e60f84SAndroid Build Coastguard Worker 
501*54e60f84SAndroid Build Coastguard Worker /** Currently defined profiles */
502*54e60f84SAndroid Build Coastguard Worker typedef enum {
503*54e60f84SAndroid Build Coastguard Worker     /** \brief Profile ID used for video processing. */
504*54e60f84SAndroid Build Coastguard Worker     VAProfileNone                       = -1,
505*54e60f84SAndroid Build Coastguard Worker     VAProfileMPEG2Simple        = 0,
506*54e60f84SAndroid Build Coastguard Worker     VAProfileMPEG2Main          = 1,
507*54e60f84SAndroid Build Coastguard Worker     VAProfileMPEG4Simple        = 2,
508*54e60f84SAndroid Build Coastguard Worker     VAProfileMPEG4AdvancedSimple    = 3,
509*54e60f84SAndroid Build Coastguard Worker     VAProfileMPEG4Main          = 4,
510*54e60f84SAndroid Build Coastguard Worker     VAProfileH264Baseline va_deprecated_enum = 5,
511*54e60f84SAndroid Build Coastguard Worker     VAProfileH264Main           = 6,
512*54e60f84SAndroid Build Coastguard Worker     VAProfileH264High           = 7,
513*54e60f84SAndroid Build Coastguard Worker     VAProfileVC1Simple          = 8,
514*54e60f84SAndroid Build Coastguard Worker     VAProfileVC1Main            = 9,
515*54e60f84SAndroid Build Coastguard Worker     VAProfileVC1Advanced        = 10,
516*54e60f84SAndroid Build Coastguard Worker     VAProfileH263Baseline       = 11,
517*54e60f84SAndroid Build Coastguard Worker     VAProfileJPEGBaseline               = 12,
518*54e60f84SAndroid Build Coastguard Worker     VAProfileH264ConstrainedBaseline    = 13,
519*54e60f84SAndroid Build Coastguard Worker     VAProfileVP8Version0_3              = 14,
520*54e60f84SAndroid Build Coastguard Worker     VAProfileH264MultiviewHigh          = 15,
521*54e60f84SAndroid Build Coastguard Worker     VAProfileH264StereoHigh             = 16,
522*54e60f84SAndroid Build Coastguard Worker     VAProfileHEVCMain                   = 17,
523*54e60f84SAndroid Build Coastguard Worker     VAProfileHEVCMain10                 = 18,
524*54e60f84SAndroid Build Coastguard Worker     VAProfileVP9Profile0                = 19,
525*54e60f84SAndroid Build Coastguard Worker     VAProfileVP9Profile1                = 20,
526*54e60f84SAndroid Build Coastguard Worker     VAProfileVP9Profile2                = 21,
527*54e60f84SAndroid Build Coastguard Worker     VAProfileVP9Profile3                = 22,
528*54e60f84SAndroid Build Coastguard Worker     VAProfileHEVCMain12                 = 23,
529*54e60f84SAndroid Build Coastguard Worker     VAProfileHEVCMain422_10             = 24,
530*54e60f84SAndroid Build Coastguard Worker     VAProfileHEVCMain422_12             = 25,
531*54e60f84SAndroid Build Coastguard Worker     VAProfileHEVCMain444                = 26,
532*54e60f84SAndroid Build Coastguard Worker     VAProfileHEVCMain444_10             = 27,
533*54e60f84SAndroid Build Coastguard Worker     VAProfileHEVCMain444_12             = 28,
534*54e60f84SAndroid Build Coastguard Worker     VAProfileHEVCSccMain                = 29,
535*54e60f84SAndroid Build Coastguard Worker     VAProfileHEVCSccMain10              = 30,
536*54e60f84SAndroid Build Coastguard Worker     VAProfileHEVCSccMain444             = 31,
537*54e60f84SAndroid Build Coastguard Worker     VAProfileAV1Profile0                = 32,
538*54e60f84SAndroid Build Coastguard Worker     VAProfileAV1Profile1                = 33,
539*54e60f84SAndroid Build Coastguard Worker     VAProfileHEVCSccMain444_10          = 34,
540*54e60f84SAndroid Build Coastguard Worker     /** \brief Profile ID used for protected video playback. */
541*54e60f84SAndroid Build Coastguard Worker     VAProfileProtected                  = 35,
542*54e60f84SAndroid Build Coastguard Worker     VAProfileH264High10                 = 36,
543*54e60f84SAndroid Build Coastguard Worker     VAProfileVVCMain10                  = 37,
544*54e60f84SAndroid Build Coastguard Worker     VAProfileVVCMultilayerMain10        = 38
545*54e60f84SAndroid Build Coastguard Worker } VAProfile;
546*54e60f84SAndroid Build Coastguard Worker 
547*54e60f84SAndroid Build Coastguard Worker /**
548*54e60f84SAndroid Build Coastguard Worker  *  Currently defined entrypoints
549*54e60f84SAndroid Build Coastguard Worker  */
550*54e60f84SAndroid Build Coastguard Worker typedef enum {
551*54e60f84SAndroid Build Coastguard Worker     VAEntrypointVLD     = 1,
552*54e60f84SAndroid Build Coastguard Worker     VAEntrypointIZZ     = 2,
553*54e60f84SAndroid Build Coastguard Worker     VAEntrypointIDCT        = 3,
554*54e60f84SAndroid Build Coastguard Worker     VAEntrypointMoComp      = 4,
555*54e60f84SAndroid Build Coastguard Worker     VAEntrypointDeblocking  = 5,
556*54e60f84SAndroid Build Coastguard Worker     VAEntrypointEncSlice    = 6,    /* slice level encode */
557*54e60f84SAndroid Build Coastguard Worker     VAEntrypointEncPicture  = 7,    /* pictuer encode, JPEG, etc */
558*54e60f84SAndroid Build Coastguard Worker     /*
559*54e60f84SAndroid Build Coastguard Worker      * For an implementation that supports a low power/high performance variant
560*54e60f84SAndroid Build Coastguard Worker      * for slice level encode, it can choose to expose the
561*54e60f84SAndroid Build Coastguard Worker      * VAEntrypointEncSliceLP entrypoint. Certain encoding tools may not be
562*54e60f84SAndroid Build Coastguard Worker      * available with this entrypoint (e.g. interlace, MBAFF) and the
563*54e60f84SAndroid Build Coastguard Worker      * application can query the encoding configuration attributes to find
564*54e60f84SAndroid Build Coastguard Worker      * out more details if this entrypoint is supported.
565*54e60f84SAndroid Build Coastguard Worker      */
566*54e60f84SAndroid Build Coastguard Worker     VAEntrypointEncSliceLP  = 8,
567*54e60f84SAndroid Build Coastguard Worker     VAEntrypointVideoProc       = 10,   /**< Video pre/post-processing. */
568*54e60f84SAndroid Build Coastguard Worker     /**
569*54e60f84SAndroid Build Coastguard Worker      * \brief VAEntrypointFEI
570*54e60f84SAndroid Build Coastguard Worker      *
571*54e60f84SAndroid Build Coastguard Worker      * The purpose of FEI (Flexible Encoding Infrastructure) is to allow applications to
572*54e60f84SAndroid Build Coastguard Worker      * have more controls and trade off quality for speed with their own IPs.
573*54e60f84SAndroid Build Coastguard Worker      * The application can optionally provide input to ENC for extra encode control
574*54e60f84SAndroid Build Coastguard Worker      * and get the output from ENC. Application can chose to modify the ENC
575*54e60f84SAndroid Build Coastguard Worker      * output/PAK input during encoding, but the performance impact is significant.
576*54e60f84SAndroid Build Coastguard Worker      *
577*54e60f84SAndroid Build Coastguard Worker      * On top of the existing buffers for normal encode, there will be
578*54e60f84SAndroid Build Coastguard Worker      * one extra input buffer (VAEncMiscParameterFEIFrameControl) and
579*54e60f84SAndroid Build Coastguard Worker      * three extra output buffers (VAEncFEIMVBufferType, VAEncFEIMBModeBufferType
580*54e60f84SAndroid Build Coastguard Worker      * and VAEncFEIDistortionBufferType) for VAEntrypointFEI entry function.
581*54e60f84SAndroid Build Coastguard Worker      * If separate PAK is set, two extra input buffers
582*54e60f84SAndroid Build Coastguard Worker      * (VAEncFEIMVBufferType, VAEncFEIMBModeBufferType) are needed for PAK input.
583*54e60f84SAndroid Build Coastguard Worker      **/
584*54e60f84SAndroid Build Coastguard Worker     VAEntrypointFEI         = 11,
585*54e60f84SAndroid Build Coastguard Worker     /**
586*54e60f84SAndroid Build Coastguard Worker      * \brief VAEntrypointStats
587*54e60f84SAndroid Build Coastguard Worker      *
588*54e60f84SAndroid Build Coastguard Worker      * A pre-processing function for getting some statistics and motion vectors is added,
589*54e60f84SAndroid Build Coastguard Worker      * and some extra controls for Encode pipeline are provided. The application can
590*54e60f84SAndroid Build Coastguard Worker      * optionally call the statistics function to get motion vectors and statistics like
591*54e60f84SAndroid Build Coastguard Worker      * variances, distortions before calling Encode function via this entry point.
592*54e60f84SAndroid Build Coastguard Worker      *
593*54e60f84SAndroid Build Coastguard Worker      * Checking whether Statistics is supported can be performed with vaQueryConfigEntrypoints().
594*54e60f84SAndroid Build Coastguard Worker      * If Statistics entry point is supported, then the list of returned entry-points will
595*54e60f84SAndroid Build Coastguard Worker      * include #VAEntrypointStats. Supported pixel format, maximum resolution and statistics
596*54e60f84SAndroid Build Coastguard Worker      * specific attributes can be obtained via normal attribute query. One input buffer
597*54e60f84SAndroid Build Coastguard Worker      * (VAStatsStatisticsParameterBufferType) and one or two output buffers
598*54e60f84SAndroid Build Coastguard Worker      * (VAStatsStatisticsBufferType, VAStatsStatisticsBottomFieldBufferType (for interlace only)
599*54e60f84SAndroid Build Coastguard Worker      * and VAStatsMVBufferType) are needed for this entry point.
600*54e60f84SAndroid Build Coastguard Worker      **/
601*54e60f84SAndroid Build Coastguard Worker     VAEntrypointStats       = 12,
602*54e60f84SAndroid Build Coastguard Worker     /**
603*54e60f84SAndroid Build Coastguard Worker      * \brief VAEntrypointProtectedTEEComm
604*54e60f84SAndroid Build Coastguard Worker      *
605*54e60f84SAndroid Build Coastguard Worker      * A function for communicating with TEE (Trusted Execution Environment).
606*54e60f84SAndroid Build Coastguard Worker      **/
607*54e60f84SAndroid Build Coastguard Worker     VAEntrypointProtectedTEEComm       = 13,
608*54e60f84SAndroid Build Coastguard Worker     /**
609*54e60f84SAndroid Build Coastguard Worker      * \brief VAEntrypointProtectedContent
610*54e60f84SAndroid Build Coastguard Worker      *
611*54e60f84SAndroid Build Coastguard Worker      * A function for protected content to decrypt encrypted content.
612*54e60f84SAndroid Build Coastguard Worker      **/
613*54e60f84SAndroid Build Coastguard Worker     VAEntrypointProtectedContent       = 14,
614*54e60f84SAndroid Build Coastguard Worker } VAEntrypoint;
615*54e60f84SAndroid Build Coastguard Worker 
616*54e60f84SAndroid Build Coastguard Worker /** Currently defined configuration attribute types */
617*54e60f84SAndroid Build Coastguard Worker typedef enum {
618*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribRTFormat      = 0,
619*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribSpatialResidual   = 1,
620*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribSpatialClipping   = 2,
621*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribIntraResidual     = 3,
622*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncryption        = 4,
623*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribRateControl       = 5,
624*54e60f84SAndroid Build Coastguard Worker 
625*54e60f84SAndroid Build Coastguard Worker     /** @name Attributes for decoding */
626*54e60f84SAndroid Build Coastguard Worker     /**@{*/
627*54e60f84SAndroid Build Coastguard Worker     /**
628*54e60f84SAndroid Build Coastguard Worker      * \brief Slice Decoding mode. Read/write.
629*54e60f84SAndroid Build Coastguard Worker      *
630*54e60f84SAndroid Build Coastguard Worker      * This attribute determines what mode the driver supports for slice
631*54e60f84SAndroid Build Coastguard Worker      * decoding, through vaGetConfigAttributes(); and what mode the user
632*54e60f84SAndroid Build Coastguard Worker      * will be providing to the driver, through vaCreateConfig(), if the
633*54e60f84SAndroid Build Coastguard Worker      * driver supports those. If this attribute is not set by the user then
634*54e60f84SAndroid Build Coastguard Worker      * it is assumed that VA_DEC_SLICE_MODE_NORMAL mode is used.
635*54e60f84SAndroid Build Coastguard Worker      *
636*54e60f84SAndroid Build Coastguard Worker      * See \c VA_DEC_SLICE_MODE_xxx for the list of slice decoding modes.
637*54e60f84SAndroid Build Coastguard Worker      */
638*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribDecSliceMode      = 6,
639*54e60f84SAndroid Build Coastguard Worker     /**
640*54e60f84SAndroid Build Coastguard Worker       * \brief JPEG decoding attribute. Read-only.
641*54e60f84SAndroid Build Coastguard Worker       *
642*54e60f84SAndroid Build Coastguard Worker       * This attribute exposes a number of capabilities of the underlying
643*54e60f84SAndroid Build Coastguard Worker       * JPEG implementation. The attribute value is partitioned into fields as defined in the
644*54e60f84SAndroid Build Coastguard Worker       * VAConfigAttribValDecJPEG union.
645*54e60f84SAndroid Build Coastguard Worker       */
646*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribDecJPEG             = 7,
647*54e60f84SAndroid Build Coastguard Worker     /**
648*54e60f84SAndroid Build Coastguard Worker      * \brief Decode processing support. Read/write.
649*54e60f84SAndroid Build Coastguard Worker      *
650*54e60f84SAndroid Build Coastguard Worker      * This attribute determines if the driver supports video processing
651*54e60f84SAndroid Build Coastguard Worker      * with decoding using the decoding context in a single call, through
652*54e60f84SAndroid Build Coastguard Worker      * vaGetConfigAttributes(); and if the user may use this feature,
653*54e60f84SAndroid Build Coastguard Worker      * through vaCreateConfig(), if the driver supports the user scenario.
654*54e60f84SAndroid Build Coastguard Worker      * The user will essentially create a regular decode VAContext.  Therefore,
655*54e60f84SAndroid Build Coastguard Worker      * the parameters of vaCreateContext() such as picture_width, picture_height
656*54e60f84SAndroid Build Coastguard Worker      * and render_targets are in relation to the decode output parameters
657*54e60f84SAndroid Build Coastguard Worker      * (not processing output parameters) as normal.
658*54e60f84SAndroid Build Coastguard Worker      * If this attribute is not set by the user then it is assumed that no
659*54e60f84SAndroid Build Coastguard Worker      * extra processing is done after decoding for this decode context.
660*54e60f84SAndroid Build Coastguard Worker      *
661*54e60f84SAndroid Build Coastguard Worker      * Since essentially the application is creating a decoder config and context,
662*54e60f84SAndroid Build Coastguard Worker      * all function calls that take in the config (e.g. vaQuerySurfaceAttributes())
663*54e60f84SAndroid Build Coastguard Worker      * or context are in relation to the decoder, except those video processing
664*54e60f84SAndroid Build Coastguard Worker      * function specified in the next paragraph.
665*54e60f84SAndroid Build Coastguard Worker      *
666*54e60f84SAndroid Build Coastguard Worker      * Once the decode config and context are created, the user must further
667*54e60f84SAndroid Build Coastguard Worker      * query the supported processing filters using vaQueryVideoProcFilters(),
668*54e60f84SAndroid Build Coastguard Worker      * vaQueryVideoProcFilterCaps(), vaQueryVideoProcPipelineCaps() by specifying
669*54e60f84SAndroid Build Coastguard Worker      * the created decode context.  The user must provide processing information
670*54e60f84SAndroid Build Coastguard Worker      * and extra processing output surfaces as "additional_outputs" to the driver
671*54e60f84SAndroid Build Coastguard Worker      * through VAProcPipelineParameterBufferType.  The render_target specified
672*54e60f84SAndroid Build Coastguard Worker      * at vaBeginPicture() time refers to the decode output surface.  The
673*54e60f84SAndroid Build Coastguard Worker      * target surface for the output of processing needs to be a different
674*54e60f84SAndroid Build Coastguard Worker      * surface since the decode process requires the original reconstructed buffer.
675*54e60f84SAndroid Build Coastguard Worker      * The "surface" member of VAProcPipelineParameterBuffer should be set to the
676*54e60f84SAndroid Build Coastguard Worker      * same as "render_target" set in vaBeginPicture(), but the driver may choose
677*54e60f84SAndroid Build Coastguard Worker      * to ignore this parameter.
678*54e60f84SAndroid Build Coastguard Worker      */
679*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribDecProcessing     = 8,
680*54e60f84SAndroid Build Coastguard Worker     /** @name Attributes for encoding */
681*54e60f84SAndroid Build Coastguard Worker     /**@{*/
682*54e60f84SAndroid Build Coastguard Worker     /**
683*54e60f84SAndroid Build Coastguard Worker      * \brief Packed headers mode. Read/write.
684*54e60f84SAndroid Build Coastguard Worker      *
685*54e60f84SAndroid Build Coastguard Worker      * This attribute determines what packed headers the driver supports,
686*54e60f84SAndroid Build Coastguard Worker      * through vaGetConfigAttributes(); and what packed headers the user
687*54e60f84SAndroid Build Coastguard Worker      * will be providing to the driver, through vaCreateConfig(), if the
688*54e60f84SAndroid Build Coastguard Worker      * driver supports those.
689*54e60f84SAndroid Build Coastguard Worker      *
690*54e60f84SAndroid Build Coastguard Worker      * See \c VA_ENC_PACKED_HEADER_xxx for the list of packed headers.
691*54e60f84SAndroid Build Coastguard Worker      */
692*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncPackedHeaders      = 10,
693*54e60f84SAndroid Build Coastguard Worker     /**
694*54e60f84SAndroid Build Coastguard Worker      * \brief Interlaced mode. Read/write.
695*54e60f84SAndroid Build Coastguard Worker      *
696*54e60f84SAndroid Build Coastguard Worker      * This attribute determines what kind of interlaced encoding mode
697*54e60f84SAndroid Build Coastguard Worker      * the driver supports.
698*54e60f84SAndroid Build Coastguard Worker      *
699*54e60f84SAndroid Build Coastguard Worker      * See \c VA_ENC_INTERLACED_xxx for the list of interlaced modes.
700*54e60f84SAndroid Build Coastguard Worker      */
701*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncInterlaced         = 11,
702*54e60f84SAndroid Build Coastguard Worker     /**
703*54e60f84SAndroid Build Coastguard Worker      * \brief Maximum number of reference frames. Read-only.
704*54e60f84SAndroid Build Coastguard Worker      *
705*54e60f84SAndroid Build Coastguard Worker      * This attribute determines the maximum number of reference
706*54e60f84SAndroid Build Coastguard Worker      * frames supported for encoding.
707*54e60f84SAndroid Build Coastguard Worker      *
708*54e60f84SAndroid Build Coastguard Worker      * Note: for H.264 encoding, the value represents the maximum number
709*54e60f84SAndroid Build Coastguard Worker      * of reference frames for both the reference picture list 0 (bottom
710*54e60f84SAndroid Build Coastguard Worker      * 16 bits) and the reference picture list 1 (top 16 bits).
711*54e60f84SAndroid Build Coastguard Worker      */
712*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncMaxRefFrames       = 13,
713*54e60f84SAndroid Build Coastguard Worker     /**
714*54e60f84SAndroid Build Coastguard Worker      * \brief Maximum number of slices per frame. Read-only.
715*54e60f84SAndroid Build Coastguard Worker      *
716*54e60f84SAndroid Build Coastguard Worker      * This attribute determines the maximum number of slices the
717*54e60f84SAndroid Build Coastguard Worker      * driver can support to encode a single frame.
718*54e60f84SAndroid Build Coastguard Worker      */
719*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncMaxSlices          = 14,
720*54e60f84SAndroid Build Coastguard Worker     /**
721*54e60f84SAndroid Build Coastguard Worker      * \brief Slice structure. Read-only.
722*54e60f84SAndroid Build Coastguard Worker      *
723*54e60f84SAndroid Build Coastguard Worker      * This attribute determines slice structures supported by the
724*54e60f84SAndroid Build Coastguard Worker      * driver for encoding. This attribute is a hint to the user so
725*54e60f84SAndroid Build Coastguard Worker      * that he can choose a suitable surface size and how to arrange
726*54e60f84SAndroid Build Coastguard Worker      * the encoding process of multiple slices per frame.
727*54e60f84SAndroid Build Coastguard Worker      *
728*54e60f84SAndroid Build Coastguard Worker      * More specifically, for H.264 encoding, this attribute
729*54e60f84SAndroid Build Coastguard Worker      * determines the range of accepted values to
730*54e60f84SAndroid Build Coastguard Worker      * VAEncSliceParameterBufferH264::macroblock_address and
731*54e60f84SAndroid Build Coastguard Worker      * VAEncSliceParameterBufferH264::num_macroblocks.
732*54e60f84SAndroid Build Coastguard Worker      *
733*54e60f84SAndroid Build Coastguard Worker      * See \c VA_ENC_SLICE_STRUCTURE_xxx for the supported slice
734*54e60f84SAndroid Build Coastguard Worker      * structure types.
735*54e60f84SAndroid Build Coastguard Worker      */
736*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncSliceStructure     = 15,
737*54e60f84SAndroid Build Coastguard Worker     /**
738*54e60f84SAndroid Build Coastguard Worker      * \brief Macroblock information. Read-only.
739*54e60f84SAndroid Build Coastguard Worker      *
740*54e60f84SAndroid Build Coastguard Worker      * This attribute determines whether the driver supports extra
741*54e60f84SAndroid Build Coastguard Worker      * encoding information per-macroblock. e.g. QP.
742*54e60f84SAndroid Build Coastguard Worker      *
743*54e60f84SAndroid Build Coastguard Worker      * More specifically, for H.264 encoding, if the driver returns a non-zero
744*54e60f84SAndroid Build Coastguard Worker      * value for this attribute, this means the application can create
745*54e60f84SAndroid Build Coastguard Worker      * additional #VAEncMacroblockParameterBufferH264 buffers referenced
746*54e60f84SAndroid Build Coastguard Worker      * through VAEncSliceParameterBufferH264::macroblock_info.
747*54e60f84SAndroid Build Coastguard Worker      */
748*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncMacroblockInfo     = 16,
749*54e60f84SAndroid Build Coastguard Worker     /**
750*54e60f84SAndroid Build Coastguard Worker      * \brief Maximum picture width. Read-only.
751*54e60f84SAndroid Build Coastguard Worker      *
752*54e60f84SAndroid Build Coastguard Worker      * This attribute determines the maximum picture width the driver supports
753*54e60f84SAndroid Build Coastguard Worker      * for a given configuration.
754*54e60f84SAndroid Build Coastguard Worker      */
755*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribMaxPictureWidth     = 18,
756*54e60f84SAndroid Build Coastguard Worker     /**
757*54e60f84SAndroid Build Coastguard Worker      * \brief Maximum picture height. Read-only.
758*54e60f84SAndroid Build Coastguard Worker      *
759*54e60f84SAndroid Build Coastguard Worker      * This attribute determines the maximum picture height the driver supports
760*54e60f84SAndroid Build Coastguard Worker      * for a given configuration.
761*54e60f84SAndroid Build Coastguard Worker      */
762*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribMaxPictureHeight    = 19,
763*54e60f84SAndroid Build Coastguard Worker     /**
764*54e60f84SAndroid Build Coastguard Worker      * \brief JPEG encoding attribute. Read-only.
765*54e60f84SAndroid Build Coastguard Worker      *
766*54e60f84SAndroid Build Coastguard Worker      * This attribute exposes a number of capabilities of the underlying
767*54e60f84SAndroid Build Coastguard Worker      * JPEG implementation. The attribute value is partitioned into fields as defined in the
768*54e60f84SAndroid Build Coastguard Worker      * VAConfigAttribValEncJPEG union.
769*54e60f84SAndroid Build Coastguard Worker      */
770*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncJPEG             = 20,
771*54e60f84SAndroid Build Coastguard Worker     /**
772*54e60f84SAndroid Build Coastguard Worker      * \brief Encoding quality range attribute. Read-only.
773*54e60f84SAndroid Build Coastguard Worker      *
774*54e60f84SAndroid Build Coastguard Worker      * This attribute conveys whether the driver supports different quality level settings
775*54e60f84SAndroid Build Coastguard Worker      * for encoding. A value less than or equal to 1 means that the encoder only has a single
776*54e60f84SAndroid Build Coastguard Worker      * quality setting, and a value greater than 1 represents the number of quality levels
777*54e60f84SAndroid Build Coastguard Worker      * that can be configured. e.g. a value of 2 means there are two distinct quality levels.
778*54e60f84SAndroid Build Coastguard Worker      */
779*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncQualityRange     = 21,
780*54e60f84SAndroid Build Coastguard Worker     /**
781*54e60f84SAndroid Build Coastguard Worker      * \brief Encoding quantization attribute. Read-only.
782*54e60f84SAndroid Build Coastguard Worker      *
783*54e60f84SAndroid Build Coastguard Worker      * This attribute conveys whether the driver supports certain types of quantization methods
784*54e60f84SAndroid Build Coastguard Worker      * for encoding (e.g. trellis). See \c VA_ENC_QUANTIZATION_xxx for the list of quantization methods
785*54e60f84SAndroid Build Coastguard Worker      */
786*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncQuantization     = 22,
787*54e60f84SAndroid Build Coastguard Worker     /**
788*54e60f84SAndroid Build Coastguard Worker      * \brief Encoding intra refresh attribute. Read-only.
789*54e60f84SAndroid Build Coastguard Worker      *
790*54e60f84SAndroid Build Coastguard Worker      * This attribute conveys whether the driver supports certain types of intra refresh methods
791*54e60f84SAndroid Build Coastguard Worker      * for encoding (e.g. adaptive intra refresh or rolling intra refresh).
792*54e60f84SAndroid Build Coastguard Worker      * See \c VA_ENC_INTRA_REFRESH_xxx for intra refresh methods
793*54e60f84SAndroid Build Coastguard Worker      */
794*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncIntraRefresh     = 23,
795*54e60f84SAndroid Build Coastguard Worker     /**
796*54e60f84SAndroid Build Coastguard Worker      * \brief Encoding skip frame attribute. Read-only.
797*54e60f84SAndroid Build Coastguard Worker      *
798*54e60f84SAndroid Build Coastguard Worker      * This attribute conveys whether the driver supports sending skip frame parameters
799*54e60f84SAndroid Build Coastguard Worker      * (VAEncMiscParameterTypeSkipFrame) to the encoder's rate control, when the user has
800*54e60f84SAndroid Build Coastguard Worker      * externally skipped frames.
801*54e60f84SAndroid Build Coastguard Worker      */
802*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncSkipFrame        = 24,
803*54e60f84SAndroid Build Coastguard Worker     /**
804*54e60f84SAndroid Build Coastguard Worker      * \brief Encoding region-of-interest (ROI) attribute. Read-only.
805*54e60f84SAndroid Build Coastguard Worker      *
806*54e60f84SAndroid Build Coastguard Worker      * This attribute conveys whether the driver supports region-of-interest (ROI) encoding,
807*54e60f84SAndroid Build Coastguard Worker      * based on user provided ROI rectangles.  The attribute value is partitioned into fields
808*54e60f84SAndroid Build Coastguard Worker      * as defined in the VAConfigAttribValEncROI union.
809*54e60f84SAndroid Build Coastguard Worker      *
810*54e60f84SAndroid Build Coastguard Worker      * If ROI encoding is supported, the ROI information is passed to the driver using
811*54e60f84SAndroid Build Coastguard Worker      * VAEncMiscParameterTypeROI.
812*54e60f84SAndroid Build Coastguard Worker      */
813*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncROI              = 25,
814*54e60f84SAndroid Build Coastguard Worker     /**
815*54e60f84SAndroid Build Coastguard Worker      * \brief Encoding extended rate control attribute. Read-only.
816*54e60f84SAndroid Build Coastguard Worker      *
817*54e60f84SAndroid Build Coastguard Worker      * This attribute conveys whether the driver supports any extended rate control features
818*54e60f84SAndroid Build Coastguard Worker      * The attribute value is partitioned into fields as defined in the
819*54e60f84SAndroid Build Coastguard Worker      * VAConfigAttribValEncRateControlExt union.
820*54e60f84SAndroid Build Coastguard Worker      */
821*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncRateControlExt   = 26,
822*54e60f84SAndroid Build Coastguard Worker     /**
823*54e60f84SAndroid Build Coastguard Worker      * \brief Processing rate reporting attribute. Read-only.
824*54e60f84SAndroid Build Coastguard Worker      *
825*54e60f84SAndroid Build Coastguard Worker      * This attribute conveys whether the driver supports reporting of
826*54e60f84SAndroid Build Coastguard Worker      * encode/decode processing rate based on certain set of parameters
827*54e60f84SAndroid Build Coastguard Worker      * (i.e. levels, I frame internvals) for a given configuration.
828*54e60f84SAndroid Build Coastguard Worker      * If this is supported, vaQueryProcessingRate() can be used to get
829*54e60f84SAndroid Build Coastguard Worker      * encode or decode processing rate.
830*54e60f84SAndroid Build Coastguard Worker      * See \c VA_PROCESSING_RATE_xxx for encode/decode processing rate
831*54e60f84SAndroid Build Coastguard Worker      */
832*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribProcessingRate    = 27,
833*54e60f84SAndroid Build Coastguard Worker     /**
834*54e60f84SAndroid Build Coastguard Worker      * \brief Encoding dirty rectangle. Read-only.
835*54e60f84SAndroid Build Coastguard Worker      *
836*54e60f84SAndroid Build Coastguard Worker      * This attribute conveys whether the driver supports dirty rectangle.
837*54e60f84SAndroid Build Coastguard Worker      * encoding, based on user provided ROI rectangles which indicate the rectangular areas
838*54e60f84SAndroid Build Coastguard Worker      * where the content has changed as compared to the previous picture.  The regions of the
839*54e60f84SAndroid Build Coastguard Worker      * picture that are not covered by dirty rect rectangles are assumed to have not changed
840*54e60f84SAndroid Build Coastguard Worker      * compared to the previous picture.  The encoder may do some optimizations based on
841*54e60f84SAndroid Build Coastguard Worker      * this information.  The attribute value returned indicates the number of regions that
842*54e60f84SAndroid Build Coastguard Worker      * are supported.  e.g. A value of 0 means dirty rect encoding is not supported.  If dirty
843*54e60f84SAndroid Build Coastguard Worker      * rect encoding is supported, the ROI information is passed to the driver using
844*54e60f84SAndroid Build Coastguard Worker      * VAEncMiscParameterTypeDirtyRect.
845*54e60f84SAndroid Build Coastguard Worker      */
846*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncDirtyRect       = 28,
847*54e60f84SAndroid Build Coastguard Worker     /**
848*54e60f84SAndroid Build Coastguard Worker      * \brief Parallel Rate Control (hierachical B) attribute. Read-only.
849*54e60f84SAndroid Build Coastguard Worker      *
850*54e60f84SAndroid Build Coastguard Worker      * This attribute conveys whether the encoder supports parallel rate control.
851*54e60f84SAndroid Build Coastguard Worker      * It is a integer value 0 - unsupported, > 0 - maximum layer supported.
852*54e60f84SAndroid Build Coastguard Worker      * This is the way when hireachical B frames are encoded, multiple independent B frames
853*54e60f84SAndroid Build Coastguard Worker      * on the same layer may be processed at same time. If supported, app may enable it by
854*54e60f84SAndroid Build Coastguard Worker      * setting enable_parallel_brc in VAEncMiscParameterRateControl,and the number of B frames
855*54e60f84SAndroid Build Coastguard Worker      * per layer per GOP will be passed to driver through VAEncMiscParameterParallelRateControl
856*54e60f84SAndroid Build Coastguard Worker      * structure.Currently three layers are defined.
857*54e60f84SAndroid Build Coastguard Worker      */
858*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncParallelRateControl   = 29,
859*54e60f84SAndroid Build Coastguard Worker     /**
860*54e60f84SAndroid Build Coastguard Worker     * \brief Dynamic Scaling Attribute. Read-only.
861*54e60f84SAndroid Build Coastguard Worker     *
862*54e60f84SAndroid Build Coastguard Worker     * This attribute conveys whether encoder is capable to determine dynamic frame
863*54e60f84SAndroid Build Coastguard Worker     * resolutions adaptive to bandwidth utilization and processing power, etc.
864*54e60f84SAndroid Build Coastguard Worker     * It is a boolean value 0 - unsupported, 1 - supported.
865*54e60f84SAndroid Build Coastguard Worker     * If it is supported,for VP9, suggested frame resolution can be retrieved from VACodedBufferVP9Status.
866*54e60f84SAndroid Build Coastguard Worker     */
867*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncDynamicScaling        = 30,
868*54e60f84SAndroid Build Coastguard Worker     /**
869*54e60f84SAndroid Build Coastguard Worker     * \brief frame size tolerance support
870*54e60f84SAndroid Build Coastguard Worker     * it indicates the tolerance of frame size
871*54e60f84SAndroid Build Coastguard Worker     */
872*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribFrameSizeToleranceSupport = 31,
873*54e60f84SAndroid Build Coastguard Worker     /**
874*54e60f84SAndroid Build Coastguard Worker     * \brief Encode function type for FEI.
875*54e60f84SAndroid Build Coastguard Worker     *
876*54e60f84SAndroid Build Coastguard Worker     * This attribute conveys whether the driver supports different function types for encode.
877*54e60f84SAndroid Build Coastguard Worker     * It can be VA_FEI_FUNCTION_ENC, VA_FEI_FUNCTION_PAK, or VA_FEI_FUNCTION_ENC_PAK. Currently
878*54e60f84SAndroid Build Coastguard Worker     * it is for FEI entry point only.
879*54e60f84SAndroid Build Coastguard Worker     * Default is VA_FEI_FUNCTION_ENC_PAK.
880*54e60f84SAndroid Build Coastguard Worker     */
881*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribFEIFunctionType     = 32,
882*54e60f84SAndroid Build Coastguard Worker     /**
883*54e60f84SAndroid Build Coastguard Worker      * \brief Maximum number of FEI MV predictors. Read-only.
884*54e60f84SAndroid Build Coastguard Worker      *
885*54e60f84SAndroid Build Coastguard Worker      * This attribute determines the maximum number of MV predictors the driver
886*54e60f84SAndroid Build Coastguard Worker      * can support to encode a single frame. 0 means no MV predictor is supported.
887*54e60f84SAndroid Build Coastguard Worker      * Currently it is for FEI entry point only.
888*54e60f84SAndroid Build Coastguard Worker      */
889*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribFEIMVPredictors     = 33,
890*54e60f84SAndroid Build Coastguard Worker     /**
891*54e60f84SAndroid Build Coastguard Worker      * \brief Statistics attribute. Read-only.
892*54e60f84SAndroid Build Coastguard Worker      *
893*54e60f84SAndroid Build Coastguard Worker      * This attribute exposes a number of capabilities of the VAEntrypointStats entry
894*54e60f84SAndroid Build Coastguard Worker      * point. The attribute value is partitioned into fields as defined in the
895*54e60f84SAndroid Build Coastguard Worker      * VAConfigAttribValStats union. Currently it is for VAEntrypointStats only.
896*54e60f84SAndroid Build Coastguard Worker      */
897*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribStats               = 34,
898*54e60f84SAndroid Build Coastguard Worker     /**
899*54e60f84SAndroid Build Coastguard Worker     * \brief Tile Support Attribute. Read-only.
900*54e60f84SAndroid Build Coastguard Worker     *
901*54e60f84SAndroid Build Coastguard Worker     * This attribute conveys whether encoder is capable to support tiles.
902*54e60f84SAndroid Build Coastguard Worker     * If not supported, the tile related parameters sent to encoder, such as
903*54e60f84SAndroid Build Coastguard Worker     * tiling structure, should be ignored. 0 - unsupported, 1 - supported.
904*54e60f84SAndroid Build Coastguard Worker     */
905*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncTileSupport        = 35,
906*54e60f84SAndroid Build Coastguard Worker     /**
907*54e60f84SAndroid Build Coastguard Worker      * \brief whether accept rouding setting from application. Read-only.
908*54e60f84SAndroid Build Coastguard Worker      * This attribute is for encode quality, if it is report,
909*54e60f84SAndroid Build Coastguard Worker      * application can change the rounding setting by VAEncMiscParameterTypeCustomRoundingControl
910*54e60f84SAndroid Build Coastguard Worker      */
911*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribCustomRoundingControl = 36,
912*54e60f84SAndroid Build Coastguard Worker     /**
913*54e60f84SAndroid Build Coastguard Worker      * \brief Encoding QP info block size attribute. Read-only.
914*54e60f84SAndroid Build Coastguard Worker      * This attribute conveys the block sizes that underlying driver
915*54e60f84SAndroid Build Coastguard Worker      * support for QP info for buffer #VAEncQpBuffer.
916*54e60f84SAndroid Build Coastguard Worker      */
917*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribQPBlockSize            = 37,
918*54e60f84SAndroid Build Coastguard Worker     /**
919*54e60f84SAndroid Build Coastguard Worker      * \brief encode max frame size attribute. Read-only
920*54e60f84SAndroid Build Coastguard Worker      * attribute value \c VAConfigAttribValMaxFrameSize represent max frame size support
921*54e60f84SAndroid Build Coastguard Worker      */
922*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribMaxFrameSize           = 38,
923*54e60f84SAndroid Build Coastguard Worker     /** \brief inter frame prediction directrion attribute. Read-only.
924*54e60f84SAndroid Build Coastguard Worker      * this attribute conveys the prediction direction (backward or forword) for specific config
925*54e60f84SAndroid Build Coastguard Worker      * the value could be  VA_PREDICTION_DIRECTION_XXXX. it can be combined with VAConfigAttribEncMaxRefFrames
926*54e60f84SAndroid Build Coastguard Worker      * to describe reference list , and the prediction direction. if this attrib is not present,both direction
927*54e60f84SAndroid Build Coastguard Worker      * should be supported, no restriction.
928*54e60f84SAndroid Build Coastguard Worker      * for example: normal HEVC encoding , maximum reference frame number in reflist 0 and reflist 1 is deduced
929*54e60f84SAndroid Build Coastguard Worker      * by  VAConfigAttribEncMaxRefFrames. so there are typical P frame, B frame,
930*54e60f84SAndroid Build Coastguard Worker      * if VAConfigAttribPredictionDirection is also present. it will stipulate prediction direction in both
931*54e60f84SAndroid Build Coastguard Worker      * reference list. if only one prediction direction present(such as PREVIOUS),all reference frame should be
932*54e60f84SAndroid Build Coastguard Worker      *  previous frame (PoC < current).
933*54e60f84SAndroid Build Coastguard Worker      */
934*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribPredictionDirection   = 39,
935*54e60f84SAndroid Build Coastguard Worker     /** \brief combined submission of multiple frames from different streams, it is optimization for different HW
936*54e60f84SAndroid Build Coastguard Worker      * implementation, multiple frames encode/decode can improve HW concurrency
937*54e60f84SAndroid Build Coastguard Worker      */
938*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribMultipleFrame         = 40,
939*54e60f84SAndroid Build Coastguard Worker     /** \brief priority setting for the context. Read-Write
940*54e60f84SAndroid Build Coastguard Worker      *  attribute value is \c VAConfigAttribValContextPriority
941*54e60f84SAndroid Build Coastguard Worker      *  this setting also could be update by \c VAContextParameterUpdateBuffer
942*54e60f84SAndroid Build Coastguard Worker      */
943*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribContextPriority       = 41,
944*54e60f84SAndroid Build Coastguard Worker     /** \brief AV1 decoding features.  Read-only.
945*54e60f84SAndroid Build Coastguard Worker      *
946*54e60f84SAndroid Build Coastguard Worker      * This attribute describes the supported features of an
947*54e60f84SAndroid Build Coastguard Worker      * AV1 decoder configuration.  The value returned uses the
948*54e60f84SAndroid Build Coastguard Worker      * VAConfigAttribValDecAV1Features type.
949*54e60f84SAndroid Build Coastguard Worker      */
950*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribDecAV1Features    = 42,
951*54e60f84SAndroid Build Coastguard Worker     /** \brief TEE could be any HW secure device. Read-only */
952*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribTEEType               = 43,
953*54e60f84SAndroid Build Coastguard Worker     /** \brief TEE type client is a specific module supporting specific functions in TEE. Read-only*/
954*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribTEETypeClient         = 44,
955*54e60f84SAndroid Build Coastguard Worker     /**
956*54e60f84SAndroid Build Coastguard Worker      * \brief Cipher algorithm of the protected content session.
957*54e60f84SAndroid Build Coastguard Worker      *
958*54e60f84SAndroid Build Coastguard Worker      * This attribute specifies the cipher algorithm of the protected content session. It
959*54e60f84SAndroid Build Coastguard Worker      * could be \c VA_PC_CIPHER_AES, etc....
960*54e60f84SAndroid Build Coastguard Worker      */
961*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribProtectedContentCipherAlgorithm = 45,
962*54e60f84SAndroid Build Coastguard Worker     /**
963*54e60f84SAndroid Build Coastguard Worker      * \brief Cipher block size of the protected content session.
964*54e60f84SAndroid Build Coastguard Worker      *
965*54e60f84SAndroid Build Coastguard Worker      * This attribute specifies the block size of the protected content session. It could be
966*54e60f84SAndroid Build Coastguard Worker      * \c VA_PC_BLOCK_SIZE_128, \c VA_PC_BLOCK_SIZE_192, or \c VA_PC_BLOCK_SIZE_256, etc....
967*54e60f84SAndroid Build Coastguard Worker      */
968*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribProtectedContentCipherBlockSize = 46,
969*54e60f84SAndroid Build Coastguard Worker     /**
970*54e60f84SAndroid Build Coastguard Worker      * \brief Cipher mode of the protected content session.
971*54e60f84SAndroid Build Coastguard Worker      *
972*54e60f84SAndroid Build Coastguard Worker      * This attribute specifies the cipher mode of the protected content session. It could
973*54e60f84SAndroid Build Coastguard Worker      * be \c VA_PC_CIPHER_MODE_ECB, \c VA_PC_CIPHER_MODE_CBC, \c VA_PC_CIPHER_MODE_CTR, etc...
974*54e60f84SAndroid Build Coastguard Worker      */
975*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribProtectedContentCipherMode = 47,
976*54e60f84SAndroid Build Coastguard Worker     /**
977*54e60f84SAndroid Build Coastguard Worker      * \brief Decryption sample type of the protected content session.
978*54e60f84SAndroid Build Coastguard Worker      *
979*54e60f84SAndroid Build Coastguard Worker      * This attribute specifies the decryption sample type of the protected content session.
980*54e60f84SAndroid Build Coastguard Worker      * It could be \c VA_PC_SAMPLE_TYPE_FULLSAMPLE or \c VA_PC_SAMPLE_TYPE_SUBSAMPLE.
981*54e60f84SAndroid Build Coastguard Worker      */
982*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribProtectedContentCipherSampleType = 48,
983*54e60f84SAndroid Build Coastguard Worker     /**
984*54e60f84SAndroid Build Coastguard Worker      * \brief Special usage attribute of the protected session.
985*54e60f84SAndroid Build Coastguard Worker      *
986*54e60f84SAndroid Build Coastguard Worker      * The attribute specifies the flow for the protected session could be used. For
987*54e60f84SAndroid Build Coastguard Worker      * example, it could be \c VA_PC_USAGE_DEFAULT, \c VA_PC_USAGE_WIDEVINE, etc....
988*54e60f84SAndroid Build Coastguard Worker      */
989*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribProtectedContentUsage = 49,
990*54e60f84SAndroid Build Coastguard Worker 
991*54e60f84SAndroid Build Coastguard Worker     /** \brief HEVC/H.265 encoding features.  Read-only.
992*54e60f84SAndroid Build Coastguard Worker      *
993*54e60f84SAndroid Build Coastguard Worker      * This attribute describes the supported features of an
994*54e60f84SAndroid Build Coastguard Worker      * HEVC/H.265 encoder configuration.  The value returned uses the
995*54e60f84SAndroid Build Coastguard Worker      * VAConfigAttribValEncHEVCFeatures type.
996*54e60f84SAndroid Build Coastguard Worker      *
997*54e60f84SAndroid Build Coastguard Worker      * If this attribute is supported by a driver then it must also
998*54e60f84SAndroid Build Coastguard Worker      * support the VAConfigAttribEncHEVCBlockSizes attribute.
999*54e60f84SAndroid Build Coastguard Worker      */
1000*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncHEVCFeatures       = 50,
1001*54e60f84SAndroid Build Coastguard Worker     /** \brief HEVC/H.265 encoding block sizes.  Read-only.
1002*54e60f84SAndroid Build Coastguard Worker      *
1003*54e60f84SAndroid Build Coastguard Worker      * This attribute describes the supported coding tree and transform
1004*54e60f84SAndroid Build Coastguard Worker      * block sizes of an HEVC/H.265 encoder configuration.  The value
1005*54e60f84SAndroid Build Coastguard Worker      * returned uses the VAConfigAttribValEncHEVCBlockSizes type.
1006*54e60f84SAndroid Build Coastguard Worker      *
1007*54e60f84SAndroid Build Coastguard Worker      * If this attribute is supported by a driver then it must also
1008*54e60f84SAndroid Build Coastguard Worker      * support the VAConfigAttribEncHEVCFeatures attribute.
1009*54e60f84SAndroid Build Coastguard Worker      */
1010*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncHEVCBlockSizes     = 51,
1011*54e60f84SAndroid Build Coastguard Worker     /**
1012*54e60f84SAndroid Build Coastguard Worker      * \brief AV1 encoding attribute. Read-only.
1013*54e60f84SAndroid Build Coastguard Worker      *
1014*54e60f84SAndroid Build Coastguard Worker      * This attribute exposes a number of capabilities of the underlying
1015*54e60f84SAndroid Build Coastguard Worker      * AV1 implementation. The attribute value is partitioned into fields as defined in the
1016*54e60f84SAndroid Build Coastguard Worker      * VAConfigAttribValEncAV1 union.
1017*54e60f84SAndroid Build Coastguard Worker      */
1018*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncAV1                = 52,
1019*54e60f84SAndroid Build Coastguard Worker     /**
1020*54e60f84SAndroid Build Coastguard Worker      * \brief AV1 encoding attribute extend1. Read-only.
1021*54e60f84SAndroid Build Coastguard Worker      *
1022*54e60f84SAndroid Build Coastguard Worker      * This attribute exposes a number of capabilities of the underlying
1023*54e60f84SAndroid Build Coastguard Worker      * AV1 implementation. The attribute value is partitioned into fields as defined in the
1024*54e60f84SAndroid Build Coastguard Worker      * VAConfigAttribValEncAV1Ext1 union.
1025*54e60f84SAndroid Build Coastguard Worker      */
1026*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncAV1Ext1            = 53,
1027*54e60f84SAndroid Build Coastguard Worker     /**
1028*54e60f84SAndroid Build Coastguard Worker      * \brief AV1 encoding attribute extend2. Read-only.
1029*54e60f84SAndroid Build Coastguard Worker      *
1030*54e60f84SAndroid Build Coastguard Worker      * This attribute exposes a number of capabilities of the underlying
1031*54e60f84SAndroid Build Coastguard Worker      * AV1 implementation. The attribute value is partitioned into fields as defined in the
1032*54e60f84SAndroid Build Coastguard Worker      * VAConfigAttribValEncAV1Ext2 union.
1033*54e60f84SAndroid Build Coastguard Worker      */
1034*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncAV1Ext2            = 54,
1035*54e60f84SAndroid Build Coastguard Worker     /** \brief Settings per block attribute for Encoding.  Read-only.
1036*54e60f84SAndroid Build Coastguard Worker      *
1037*54e60f84SAndroid Build Coastguard Worker      * This attribute describes whether to support delta qp per block,
1038*54e60f84SAndroid Build Coastguard Worker      * the supported size of delta qp block and the size of delta QP in bytes.
1039*54e60f84SAndroid Build Coastguard Worker      * The value returned uses the VAConfigAttribValEncPerBlockControl type.
1040*54e60f84SAndroid Build Coastguard Worker      */
1041*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncPerBlockControl    = 55,
1042*54e60f84SAndroid Build Coastguard Worker     /**
1043*54e60f84SAndroid Build Coastguard Worker      * \brief Maximum number of tile rows. Read-only.
1044*54e60f84SAndroid Build Coastguard Worker      *
1045*54e60f84SAndroid Build Coastguard Worker      * This attribute determines the maximum number of tile
1046*54e60f84SAndroid Build Coastguard Worker      * rows supported for encoding with tile support.
1047*54e60f84SAndroid Build Coastguard Worker      */
1048*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncMaxTileRows        = 56,
1049*54e60f84SAndroid Build Coastguard Worker     /**
1050*54e60f84SAndroid Build Coastguard Worker      * \brief Maximum number of tile cols. Read-only.
1051*54e60f84SAndroid Build Coastguard Worker      *
1052*54e60f84SAndroid Build Coastguard Worker      * This attribute determines the maximum number of tile
1053*54e60f84SAndroid Build Coastguard Worker      * columns supported for encoding with tile support.
1054*54e60f84SAndroid Build Coastguard Worker      */
1055*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribEncMaxTileCols        = 57,
1056*54e60f84SAndroid Build Coastguard Worker     /**@}*/
1057*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribTypeMax
1058*54e60f84SAndroid Build Coastguard Worker } VAConfigAttribType;
1059*54e60f84SAndroid Build Coastguard Worker 
1060*54e60f84SAndroid Build Coastguard Worker /**
1061*54e60f84SAndroid Build Coastguard Worker  * Configuration attributes
1062*54e60f84SAndroid Build Coastguard Worker  * If there is more than one value for an attribute, a default
1063*54e60f84SAndroid Build Coastguard Worker  * value will be assigned to the attribute if the client does not
1064*54e60f84SAndroid Build Coastguard Worker  * specify the attribute when creating a configuration
1065*54e60f84SAndroid Build Coastguard Worker  */
1066*54e60f84SAndroid Build Coastguard Worker typedef struct _VAConfigAttrib {
1067*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribType type;
1068*54e60f84SAndroid Build Coastguard Worker     uint32_t value; /* OR'd flags (bits) for this attribute */
1069*54e60f84SAndroid Build Coastguard Worker } VAConfigAttrib;
1070*54e60f84SAndroid Build Coastguard Worker 
1071*54e60f84SAndroid Build Coastguard Worker /* Attribute values for VAConfigAttribRTFormat. */
1072*54e60f84SAndroid Build Coastguard Worker 
1073*54e60f84SAndroid Build Coastguard Worker #define VA_RT_FORMAT_YUV420 0x00000001  ///< YUV 4:2:0 8-bit.
1074*54e60f84SAndroid Build Coastguard Worker #define VA_RT_FORMAT_YUV422 0x00000002  ///< YUV 4:2:2 8-bit.
1075*54e60f84SAndroid Build Coastguard Worker #define VA_RT_FORMAT_YUV444 0x00000004  ///< YUV 4:4:4 8-bit.
1076*54e60f84SAndroid Build Coastguard Worker #define VA_RT_FORMAT_YUV411 0x00000008  ///< YUV 4:1:1 8-bit.
1077*54e60f84SAndroid Build Coastguard Worker #define VA_RT_FORMAT_YUV400 0x00000010  ///< Greyscale 8-bit.
1078*54e60f84SAndroid Build Coastguard Worker #define VA_RT_FORMAT_YUV420_10  0x00000100  ///< YUV 4:2:0 10-bit.
1079*54e60f84SAndroid Build Coastguard Worker #define VA_RT_FORMAT_YUV422_10  0x00000200  ///< YUV 4:2:2 10-bit.
1080*54e60f84SAndroid Build Coastguard Worker #define VA_RT_FORMAT_YUV444_10  0x00000400  ///< YUV 4:4:4 10-bit.
1081*54e60f84SAndroid Build Coastguard Worker #define VA_RT_FORMAT_YUV420_12  0x00001000  ///< YUV 4:2:0 12-bit.
1082*54e60f84SAndroid Build Coastguard Worker #define VA_RT_FORMAT_YUV422_12  0x00002000  ///< YUV 4:2:2 12-bit.
1083*54e60f84SAndroid Build Coastguard Worker #define VA_RT_FORMAT_YUV444_12  0x00004000  ///< YUV 4:4:4 12-bit.
1084*54e60f84SAndroid Build Coastguard Worker 
1085*54e60f84SAndroid Build Coastguard Worker #define VA_RT_FORMAT_RGB16  0x00010000  ///< Packed RGB, 16 bits per pixel.
1086*54e60f84SAndroid Build Coastguard Worker #define VA_RT_FORMAT_RGB32  0x00020000  ///< Packed RGB, 32 bits per pixel, 8 bits per colour sample.
1087*54e60f84SAndroid Build Coastguard Worker #define VA_RT_FORMAT_RGBP   0x00100000  ///< Planar RGB, 8 bits per sample.
1088*54e60f84SAndroid Build Coastguard Worker #define VA_RT_FORMAT_RGB32_10   0x00200000  ///< Packed RGB, 32 bits per pixel, 10 bits per colour sample.
1089*54e60f84SAndroid Build Coastguard Worker 
1090*54e60f84SAndroid Build Coastguard Worker #define VA_RT_FORMAT_PROTECTED  0x80000000
1091*54e60f84SAndroid Build Coastguard Worker 
1092*54e60f84SAndroid Build Coastguard Worker #define VA_RT_FORMAT_RGB32_10BPP    VA_RT_FORMAT_RGB32_10   ///< @deprecated use VA_RT_FORMAT_RGB32_10 instead.
1093*54e60f84SAndroid Build Coastguard Worker #define VA_RT_FORMAT_YUV420_10BPP   VA_RT_FORMAT_YUV420_10  ///< @deprecated use VA_RT_FORMAT_YUV420_10 instead.
1094*54e60f84SAndroid Build Coastguard Worker 
1095*54e60f84SAndroid Build Coastguard Worker /** @name Attribute values for VAConfigAttribRateControl */
1096*54e60f84SAndroid Build Coastguard Worker /**@{*/
1097*54e60f84SAndroid Build Coastguard Worker /** \brief Driver does not support any form of rate control. */
1098*54e60f84SAndroid Build Coastguard Worker #define VA_RC_NONE                      0x00000001
1099*54e60f84SAndroid Build Coastguard Worker /** \brief Constant bitrate. */
1100*54e60f84SAndroid Build Coastguard Worker #define VA_RC_CBR                       0x00000002
1101*54e60f84SAndroid Build Coastguard Worker /** \brief Variable bitrate. */
1102*54e60f84SAndroid Build Coastguard Worker #define VA_RC_VBR                       0x00000004
1103*54e60f84SAndroid Build Coastguard Worker /** \brief Video conference mode. */
1104*54e60f84SAndroid Build Coastguard Worker #define VA_RC_VCM                       0x00000008
1105*54e60f84SAndroid Build Coastguard Worker /** \brief Constant QP. */
1106*54e60f84SAndroid Build Coastguard Worker #define VA_RC_CQP                       0x00000010
1107*54e60f84SAndroid Build Coastguard Worker /** \brief Variable bitrate with peak rate higher than average bitrate. */
1108*54e60f84SAndroid Build Coastguard Worker #define VA_RC_VBR_CONSTRAINED           0x00000020
1109*54e60f84SAndroid Build Coastguard Worker /** \brief Intelligent Constant Quality. Provided an initial ICQ_quality_factor,
1110*54e60f84SAndroid Build Coastguard Worker  *  adjusts QP at a frame and MB level based on motion to improve subjective quality. */
1111*54e60f84SAndroid Build Coastguard Worker #define VA_RC_ICQ           0x00000040
1112*54e60f84SAndroid Build Coastguard Worker /** \brief Macroblock based rate control.  Per MB control is decided
1113*54e60f84SAndroid Build Coastguard Worker  *  internally in the encoder. It may be combined with other RC modes, except CQP. */
1114*54e60f84SAndroid Build Coastguard Worker #define VA_RC_MB                        0x00000080
1115*54e60f84SAndroid Build Coastguard Worker /** \brief Constant Frame Size, it is used for small tolerent  */
1116*54e60f84SAndroid Build Coastguard Worker #define VA_RC_CFS                       0x00000100
1117*54e60f84SAndroid Build Coastguard Worker /** \brief Parallel BRC, for hierachical B.
1118*54e60f84SAndroid Build Coastguard Worker  *
1119*54e60f84SAndroid Build Coastguard Worker  *  For hierachical B, B frames can be refered by other B frames.
1120*54e60f84SAndroid Build Coastguard Worker  *  Currently three layers of hierachy are defined:
1121*54e60f84SAndroid Build Coastguard Worker  *  B0 - regular B, no reference to other B frames.
1122*54e60f84SAndroid Build Coastguard Worker  *  B1 - reference to only I, P and regular B0 frames.
1123*54e60f84SAndroid Build Coastguard Worker  *  B2 - reference to any other frames, including B1.
1124*54e60f84SAndroid Build Coastguard Worker  *  In Hierachical B structure, B frames on the same layer can be processed
1125*54e60f84SAndroid Build Coastguard Worker  *  simultaneously. And BRC would adjust accordingly. This is so called
1126*54e60f84SAndroid Build Coastguard Worker  *  Parallel BRC. */
1127*54e60f84SAndroid Build Coastguard Worker #define VA_RC_PARALLEL                  0x00000200
1128*54e60f84SAndroid Build Coastguard Worker /** \brief Quality defined VBR
1129*54e60f84SAndroid Build Coastguard Worker  * Use Quality factor to determine the good enough QP for each MB such that
1130*54e60f84SAndroid Build Coastguard Worker  * good enough quality can be obtained without waste of bits
1131*54e60f84SAndroid Build Coastguard Worker  * for this BRC mode, you must set all legacy VBR parameters
1132*54e60f84SAndroid Build Coastguard Worker  * and reuse quality_factor in \c VAEncMiscParameterRateControl
1133*54e60f84SAndroid Build Coastguard Worker  * */
1134*54e60f84SAndroid Build Coastguard Worker #define VA_RC_QVBR                      0x00000400
1135*54e60f84SAndroid Build Coastguard Worker /** \brief Average VBR
1136*54e60f84SAndroid Build Coastguard Worker  *  Average variable bitrate control algorithm focuses on overall encoding
1137*54e60f84SAndroid Build Coastguard Worker  *  quality while meeting the specified target bitrate, within the accuracy
1138*54e60f84SAndroid Build Coastguard Worker  *  range, after a convergence period.
1139*54e60f84SAndroid Build Coastguard Worker  *  bits_per_second in VAEncMiscParameterRateControl is target bitrate for AVBR.
1140*54e60f84SAndroid Build Coastguard Worker  *  Convergence is specified in the unit of frame.
1141*54e60f84SAndroid Build Coastguard Worker  *  window_size in VAEncMiscParameterRateControl is equal to convergence for AVBR.
1142*54e60f84SAndroid Build Coastguard Worker  *  Accuracy is in the range of [1,100], 1 means one percent, and so on.
1143*54e60f84SAndroid Build Coastguard Worker  *  target_percentage in VAEncMiscParameterRateControl is equal to accuracy for AVBR.
1144*54e60f84SAndroid Build Coastguard Worker  * */
1145*54e60f84SAndroid Build Coastguard Worker #define VA_RC_AVBR                      0x00000800
1146*54e60f84SAndroid Build Coastguard Worker /** \brief Transport Controlled BRC
1147*54e60f84SAndroid Build Coastguard Worker  *  Specific bitrate control for real time streaming.
1148*54e60f84SAndroid Build Coastguard Worker  *  TCBRC can instantly react to channel change to remove or significantly reduce the delay.
1149*54e60f84SAndroid Build Coastguard Worker  *  Application (transport) provides channel feedback to driver through TargetFrameSize.
1150*54e60f84SAndroid Build Coastguard Worker  *  When channel condition is very good (almost no constraint on instant frame size),
1151*54e60f84SAndroid Build Coastguard Worker  *  the app should set target frame size as zero. Otherwise, channel capacity divided by fps
1152*54e60f84SAndroid Build Coastguard Worker  *  should be used.
1153*54e60f84SAndroid Build Coastguard Worker  * */
1154*54e60f84SAndroid Build Coastguard Worker #define VA_RC_TCBRC                     0x00001000
1155*54e60f84SAndroid Build Coastguard Worker 
1156*54e60f84SAndroid Build Coastguard Worker /**@}*/
1157*54e60f84SAndroid Build Coastguard Worker 
1158*54e60f84SAndroid Build Coastguard Worker /** @name Attribute values for VAConfigAttribDecSliceMode */
1159*54e60f84SAndroid Build Coastguard Worker /**@{*/
1160*54e60f84SAndroid Build Coastguard Worker /** \brief Driver supports normal mode for slice decoding */
1161*54e60f84SAndroid Build Coastguard Worker #define VA_DEC_SLICE_MODE_NORMAL       0x00000001
1162*54e60f84SAndroid Build Coastguard Worker /** \brief Driver supports base mode for slice decoding */
1163*54e60f84SAndroid Build Coastguard Worker #define VA_DEC_SLICE_MODE_BASE         0x00000002
1164*54e60f84SAndroid Build Coastguard Worker 
1165*54e60f84SAndroid Build Coastguard Worker /** @name Attribute values for VAConfigAttribDecJPEG */
1166*54e60f84SAndroid Build Coastguard Worker /**@{*/
1167*54e60f84SAndroid Build Coastguard Worker typedef union _VAConfigAttribValDecJPEG {
1168*54e60f84SAndroid Build Coastguard Worker     struct {
1169*54e60f84SAndroid Build Coastguard Worker         /** \brief Set to (1 << VA_ROTATION_xxx) for supported rotation angles. */
1170*54e60f84SAndroid Build Coastguard Worker         uint32_t rotation : 4;
1171*54e60f84SAndroid Build Coastguard Worker         /** \brief set to 1 for crop and partial decode support, 0 if not supported */
1172*54e60f84SAndroid Build Coastguard Worker         uint32_t crop : 1;
1173*54e60f84SAndroid Build Coastguard Worker         /** \brief Reserved for future use. */
1174*54e60f84SAndroid Build Coastguard Worker         uint32_t reserved : 27;
1175*54e60f84SAndroid Build Coastguard Worker     } bits;
1176*54e60f84SAndroid Build Coastguard Worker     uint32_t value;
1177*54e60f84SAndroid Build Coastguard Worker } VAConfigAttribValDecJPEG;
1178*54e60f84SAndroid Build Coastguard Worker /** @name Attribute values for VAConfigAttribDecProcessing */
1179*54e60f84SAndroid Build Coastguard Worker /**@{*/
1180*54e60f84SAndroid Build Coastguard Worker /** \brief No decoding + processing in a single decoding call. */
1181*54e60f84SAndroid Build Coastguard Worker #define VA_DEC_PROCESSING_NONE     0x00000000
1182*54e60f84SAndroid Build Coastguard Worker /** \brief Decode + processing in a single decoding call. */
1183*54e60f84SAndroid Build Coastguard Worker #define VA_DEC_PROCESSING          0x00000001
1184*54e60f84SAndroid Build Coastguard Worker /**@}*/
1185*54e60f84SAndroid Build Coastguard Worker 
1186*54e60f84SAndroid Build Coastguard Worker /** @name Attribute values for VAConfigAttribEncPackedHeaders */
1187*54e60f84SAndroid Build Coastguard Worker /**@{*/
1188*54e60f84SAndroid Build Coastguard Worker /** \brief Driver does not support any packed headers mode. */
1189*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_PACKED_HEADER_NONE       0x00000000
1190*54e60f84SAndroid Build Coastguard Worker /**
1191*54e60f84SAndroid Build Coastguard Worker  * \brief Driver supports packed sequence headers. e.g. SPS for H.264.
1192*54e60f84SAndroid Build Coastguard Worker  *
1193*54e60f84SAndroid Build Coastguard Worker  * Application must provide it to driver once this flag is returned through
1194*54e60f84SAndroid Build Coastguard Worker  * vaGetConfigAttributes()
1195*54e60f84SAndroid Build Coastguard Worker  */
1196*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_PACKED_HEADER_SEQUENCE   0x00000001
1197*54e60f84SAndroid Build Coastguard Worker /**
1198*54e60f84SAndroid Build Coastguard Worker  * \brief Driver supports packed picture headers. e.g. PPS for H.264.
1199*54e60f84SAndroid Build Coastguard Worker  *
1200*54e60f84SAndroid Build Coastguard Worker  * Application must provide it to driver once this falg is returned through
1201*54e60f84SAndroid Build Coastguard Worker  * vaGetConfigAttributes()
1202*54e60f84SAndroid Build Coastguard Worker  */
1203*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_PACKED_HEADER_PICTURE    0x00000002
1204*54e60f84SAndroid Build Coastguard Worker /**
1205*54e60f84SAndroid Build Coastguard Worker  * \brief Driver supports packed slice headers. e.g. slice_header() for H.264.
1206*54e60f84SAndroid Build Coastguard Worker  *
1207*54e60f84SAndroid Build Coastguard Worker  * Application must provide it to driver once this flag is returned through
1208*54e60f84SAndroid Build Coastguard Worker  * vaGetConfigAttributes()
1209*54e60f84SAndroid Build Coastguard Worker  */
1210*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_PACKED_HEADER_SLICE      0x00000004
1211*54e60f84SAndroid Build Coastguard Worker /**
1212*54e60f84SAndroid Build Coastguard Worker  * \brief Driver supports misc packed headers. e.g. SEI for H.264.
1213*54e60f84SAndroid Build Coastguard Worker  *
1214*54e60f84SAndroid Build Coastguard Worker  * @deprecated
1215*54e60f84SAndroid Build Coastguard Worker  * This is a deprecated packed header flag, All applications can use
1216*54e60f84SAndroid Build Coastguard Worker  * \c VA_ENC_PACKED_HEADER_RAW_DATA to pass the corresponding packed
1217*54e60f84SAndroid Build Coastguard Worker  * header data buffer to the driver
1218*54e60f84SAndroid Build Coastguard Worker  */
1219*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_PACKED_HEADER_MISC       0x00000008
1220*54e60f84SAndroid Build Coastguard Worker /** \brief Driver supports raw packed header, see VAEncPackedHeaderRawData */
1221*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_PACKED_HEADER_RAW_DATA   0x00000010
1222*54e60f84SAndroid Build Coastguard Worker /**@}*/
1223*54e60f84SAndroid Build Coastguard Worker 
1224*54e60f84SAndroid Build Coastguard Worker /** @name Attribute values for VAConfigAttribEncInterlaced */
1225*54e60f84SAndroid Build Coastguard Worker /**@{*/
1226*54e60f84SAndroid Build Coastguard Worker /** \brief Driver does not support interlaced coding. */
1227*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_INTERLACED_NONE          0x00000000
1228*54e60f84SAndroid Build Coastguard Worker /** \brief Driver supports interlaced frame coding. */
1229*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_INTERLACED_FRAME         0x00000001
1230*54e60f84SAndroid Build Coastguard Worker /** \brief Driver supports interlaced field coding. */
1231*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_INTERLACED_FIELD         0x00000002
1232*54e60f84SAndroid Build Coastguard Worker /** \brief Driver supports macroblock adaptive frame field coding. */
1233*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_INTERLACED_MBAFF         0x00000004
1234*54e60f84SAndroid Build Coastguard Worker /** \brief Driver supports picture adaptive frame field coding. */
1235*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_INTERLACED_PAFF          0x00000008
1236*54e60f84SAndroid Build Coastguard Worker /**@}*/
1237*54e60f84SAndroid Build Coastguard Worker 
1238*54e60f84SAndroid Build Coastguard Worker /** @name Attribute values for VAConfigAttribEncSliceStructure */
1239*54e60f84SAndroid Build Coastguard Worker /**@{*/
1240*54e60f84SAndroid Build Coastguard Worker /** \brief Driver supports a power-of-two number of rows per slice. */
1241*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_SLICE_STRUCTURE_POWER_OF_TWO_ROWS        0x00000001
1242*54e60f84SAndroid Build Coastguard Worker /** \brief Driver supports an arbitrary number of macroblocks per slice. */
1243*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_SLICE_STRUCTURE_ARBITRARY_MACROBLOCKS    0x00000002
1244*54e60f84SAndroid Build Coastguard Worker /** \brief Driver support 1 row per slice */
1245*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_SLICE_STRUCTURE_EQUAL_ROWS               0x00000004
1246*54e60f84SAndroid Build Coastguard Worker /** \brief Driver support max encoded slice size per slice */
1247*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_SLICE_STRUCTURE_MAX_SLICE_SIZE           0x00000008
1248*54e60f84SAndroid Build Coastguard Worker /** \brief Driver supports an arbitrary number of rows per slice. */
1249*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_SLICE_STRUCTURE_ARBITRARY_ROWS           0x00000010
1250*54e60f84SAndroid Build Coastguard Worker /** \brief Driver supports any number of rows per slice but they must be the same
1251*54e60f84SAndroid Build Coastguard Worker *       for all slices except for the last one, which must be equal or smaller
1252*54e60f84SAndroid Build Coastguard Worker *       to the previous slices. */
1253*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_SLICE_STRUCTURE_EQUAL_MULTI_ROWS         0x00000020
1254*54e60f84SAndroid Build Coastguard Worker /**@}*/
1255*54e60f84SAndroid Build Coastguard Worker 
1256*54e60f84SAndroid Build Coastguard Worker /** \brief Attribute value for VAConfigAttribMaxFrameSize */
1257*54e60f84SAndroid Build Coastguard Worker typedef union _VAConfigAttribValMaxFrameSize {
1258*54e60f84SAndroid Build Coastguard Worker     struct {
1259*54e60f84SAndroid Build Coastguard Worker         /** \brief support max frame size
1260*54e60f84SAndroid Build Coastguard Worker           * if max_frame_size == 1, VAEncMiscParameterTypeMaxFrameSize/VAEncMiscParameterBufferMaxFrameSize
1261*54e60f84SAndroid Build Coastguard Worker           * could be used to set the frame size, if multiple_pass also equal 1, VAEncMiscParameterTypeMultiPassFrameSize
1262*54e60f84SAndroid Build Coastguard Worker           * VAEncMiscParameterBufferMultiPassFrameSize could be used to set frame size and pass information
1263*54e60f84SAndroid Build Coastguard Worker           */
1264*54e60f84SAndroid Build Coastguard Worker         uint32_t max_frame_size : 1;
1265*54e60f84SAndroid Build Coastguard Worker         /** \brief multiple_pass support */
1266*54e60f84SAndroid Build Coastguard Worker         uint32_t multiple_pass  : 1;
1267*54e60f84SAndroid Build Coastguard Worker         /** \brief reserved bits for future, must be zero*/
1268*54e60f84SAndroid Build Coastguard Worker         uint32_t reserved       : 30;
1269*54e60f84SAndroid Build Coastguard Worker     } bits;
1270*54e60f84SAndroid Build Coastguard Worker     uint32_t value;
1271*54e60f84SAndroid Build Coastguard Worker } VAConfigAttribValMaxFrameSize;
1272*54e60f84SAndroid Build Coastguard Worker 
1273*54e60f84SAndroid Build Coastguard Worker /** \brief Attribute value for VAConfigAttribEncJPEG */
1274*54e60f84SAndroid Build Coastguard Worker typedef union _VAConfigAttribValEncJPEG {
1275*54e60f84SAndroid Build Coastguard Worker     struct {
1276*54e60f84SAndroid Build Coastguard Worker         /** \brief set to 1 for arithmatic coding. */
1277*54e60f84SAndroid Build Coastguard Worker         uint32_t arithmatic_coding_mode : 1;
1278*54e60f84SAndroid Build Coastguard Worker         /** \brief set to 1 for progressive dct. */
1279*54e60f84SAndroid Build Coastguard Worker         uint32_t progressive_dct_mode : 1;
1280*54e60f84SAndroid Build Coastguard Worker         /** \brief set to 1 for non-interleaved. */
1281*54e60f84SAndroid Build Coastguard Worker         uint32_t non_interleaved_mode : 1;
1282*54e60f84SAndroid Build Coastguard Worker         /** \brief set to 1 for differential. */
1283*54e60f84SAndroid Build Coastguard Worker         uint32_t differential_mode : 1;
1284*54e60f84SAndroid Build Coastguard Worker         uint32_t max_num_components : 3;
1285*54e60f84SAndroid Build Coastguard Worker         uint32_t max_num_scans : 4;
1286*54e60f84SAndroid Build Coastguard Worker         uint32_t max_num_huffman_tables : 3;
1287*54e60f84SAndroid Build Coastguard Worker         uint32_t max_num_quantization_tables : 3;
1288*54e60f84SAndroid Build Coastguard Worker     } bits;
1289*54e60f84SAndroid Build Coastguard Worker     uint32_t value;
1290*54e60f84SAndroid Build Coastguard Worker } VAConfigAttribValEncJPEG;
1291*54e60f84SAndroid Build Coastguard Worker 
1292*54e60f84SAndroid Build Coastguard Worker /** @name Attribute values for VAConfigAttribEncQuantization */
1293*54e60f84SAndroid Build Coastguard Worker /**@{*/
1294*54e60f84SAndroid Build Coastguard Worker /** \brief Driver does not support special types of quantization */
1295*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_QUANTIZATION_NONE                        0x00000000
1296*54e60f84SAndroid Build Coastguard Worker /** \brief Driver supports trellis quantization */
1297*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_QUANTIZATION_TRELLIS_SUPPORTED           0x00000001
1298*54e60f84SAndroid Build Coastguard Worker /**@}*/
1299*54e60f84SAndroid Build Coastguard Worker 
1300*54e60f84SAndroid Build Coastguard Worker /** @name Attribute values for VAConfigAttribPredictionDirection */
1301*54e60f84SAndroid Build Coastguard Worker /**@{*/
1302*54e60f84SAndroid Build Coastguard Worker /** \brief Driver support forward reference frame (inter frame for vpx, P frame for H26x MPEG)
1303*54e60f84SAndroid Build Coastguard Worker  * can work with the VAConfigAttribEncMaxRefFrames. for example: low delay B frame of HEVC.
1304*54e60f84SAndroid Build Coastguard Worker  * these value can be OR'd together. typical value should be VA_PREDICTION_DIRECTION_PREVIOUS
1305*54e60f84SAndroid Build Coastguard Worker  * or VA_PREDICTION_DIRECTION_PREVIOUS | VA_PREDICTION_DIRECTION_FUTURE, theoretically, there
1306*54e60f84SAndroid Build Coastguard Worker  * are no stream only include future reference frame.
1307*54e60f84SAndroid Build Coastguard Worker  */
1308*54e60f84SAndroid Build Coastguard Worker #define VA_PREDICTION_DIRECTION_PREVIOUS                0x00000001
1309*54e60f84SAndroid Build Coastguard Worker /** \brief Driver support backward prediction frame/slice */
1310*54e60f84SAndroid Build Coastguard Worker #define VA_PREDICTION_DIRECTION_FUTURE                  0x00000002
1311*54e60f84SAndroid Build Coastguard Worker /** \brief Dirver require both reference list must be not empty for inter frame */
1312*54e60f84SAndroid Build Coastguard Worker #define VA_PREDICTION_DIRECTION_BI_NOT_EMPTY            0x00000004
1313*54e60f84SAndroid Build Coastguard Worker /**@}*/
1314*54e60f84SAndroid Build Coastguard Worker 
1315*54e60f84SAndroid Build Coastguard Worker /** @name Attribute values for VAConfigAttribEncIntraRefresh */
1316*54e60f84SAndroid Build Coastguard Worker /**@{*/
1317*54e60f84SAndroid Build Coastguard Worker /** \brief Driver does not support intra refresh */
1318*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_INTRA_REFRESH_NONE                       0x00000000
1319*54e60f84SAndroid Build Coastguard Worker /** \brief Driver supports column based rolling intra refresh */
1320*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_INTRA_REFRESH_ROLLING_COLUMN             0x00000001
1321*54e60f84SAndroid Build Coastguard Worker /** \brief Driver supports row based rolling intra refresh */
1322*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_INTRA_REFRESH_ROLLING_ROW                0x00000002
1323*54e60f84SAndroid Build Coastguard Worker /** \brief Driver supports adaptive intra refresh */
1324*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_INTRA_REFRESH_ADAPTIVE                   0x00000010
1325*54e60f84SAndroid Build Coastguard Worker /** \brief Driver supports cyclic intra refresh */
1326*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_INTRA_REFRESH_CYCLIC                     0x00000020
1327*54e60f84SAndroid Build Coastguard Worker /** \brief Driver supports intra refresh of P frame*/
1328*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_INTRA_REFRESH_P_FRAME                    0x00010000
1329*54e60f84SAndroid Build Coastguard Worker /** \brief Driver supports intra refresh of B frame */
1330*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_INTRA_REFRESH_B_FRAME                    0x00020000
1331*54e60f84SAndroid Build Coastguard Worker /** \brief Driver supports intra refresh of multiple reference encoder */
1332*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_INTRA_REFRESH_MULTI_REF                  0x00040000
1333*54e60f84SAndroid Build Coastguard Worker 
1334*54e60f84SAndroid Build Coastguard Worker /**@}*/
1335*54e60f84SAndroid Build Coastguard Worker 
1336*54e60f84SAndroid Build Coastguard Worker /** \brief Attribute value for VAConfigAttribEncROI */
1337*54e60f84SAndroid Build Coastguard Worker typedef union _VAConfigAttribValEncROI {
1338*54e60f84SAndroid Build Coastguard Worker     struct {
1339*54e60f84SAndroid Build Coastguard Worker         /** \brief The number of ROI regions supported, 0 if ROI is not supported. */
1340*54e60f84SAndroid Build Coastguard Worker         uint32_t num_roi_regions        : 8;
1341*54e60f84SAndroid Build Coastguard Worker         /**
1342*54e60f84SAndroid Build Coastguard Worker          * \brief A flag indicates whether ROI priority is supported
1343*54e60f84SAndroid Build Coastguard Worker          *
1344*54e60f84SAndroid Build Coastguard Worker          * \ref roi_rc_priority_support equal to 1 specifies the underlying driver supports
1345*54e60f84SAndroid Build Coastguard Worker          * ROI priority when VAConfigAttribRateControl != VA_RC_CQP, user can use \c roi_value
1346*54e60f84SAndroid Build Coastguard Worker          * in #VAEncROI to set ROI priority. \ref roi_rc_priority_support equal to 0 specifies
1347*54e60f84SAndroid Build Coastguard Worker          * the underlying driver doesn't support ROI priority.
1348*54e60f84SAndroid Build Coastguard Worker          *
1349*54e60f84SAndroid Build Coastguard Worker          * User should ignore \ref roi_rc_priority_support when VAConfigAttribRateControl == VA_RC_CQP
1350*54e60f84SAndroid Build Coastguard Worker          * because ROI delta QP is always required when VAConfigAttribRateControl == VA_RC_CQP.
1351*54e60f84SAndroid Build Coastguard Worker          */
1352*54e60f84SAndroid Build Coastguard Worker         uint32_t roi_rc_priority_support    : 1;
1353*54e60f84SAndroid Build Coastguard Worker         /**
1354*54e60f84SAndroid Build Coastguard Worker          * \brief A flag indicates whether ROI delta QP is supported
1355*54e60f84SAndroid Build Coastguard Worker          *
1356*54e60f84SAndroid Build Coastguard Worker          * \ref roi_rc_qp_delta_support equal to 1 specifies the underlying driver supports
1357*54e60f84SAndroid Build Coastguard Worker          * ROI delta QP when VAConfigAttribRateControl != VA_RC_CQP, user can use \c roi_value
1358*54e60f84SAndroid Build Coastguard Worker          * in #VAEncROI to set ROI delta QP. \ref roi_rc_qp_delta_support equal to 0 specifies
1359*54e60f84SAndroid Build Coastguard Worker          * the underlying driver doesn't support ROI delta QP.
1360*54e60f84SAndroid Build Coastguard Worker          *
1361*54e60f84SAndroid Build Coastguard Worker          * User should ignore \ref roi_rc_qp_delta_support when VAConfigAttribRateControl == VA_RC_CQP
1362*54e60f84SAndroid Build Coastguard Worker          * because ROI delta QP is always required when VAConfigAttribRateControl == VA_RC_CQP.
1363*54e60f84SAndroid Build Coastguard Worker          */
1364*54e60f84SAndroid Build Coastguard Worker         uint32_t roi_rc_qp_delta_support    : 1;
1365*54e60f84SAndroid Build Coastguard Worker         uint32_t reserved                   : 22;
1366*54e60f84SAndroid Build Coastguard Worker     } bits;
1367*54e60f84SAndroid Build Coastguard Worker     uint32_t value;
1368*54e60f84SAndroid Build Coastguard Worker } VAConfigAttribValEncROI;
1369*54e60f84SAndroid Build Coastguard Worker 
1370*54e60f84SAndroid Build Coastguard Worker /** \brief Attribute value for VAConfigAttribEncRateControlExt */
1371*54e60f84SAndroid Build Coastguard Worker typedef union _VAConfigAttribValEncRateControlExt {
1372*54e60f84SAndroid Build Coastguard Worker     struct {
1373*54e60f84SAndroid Build Coastguard Worker         /**
1374*54e60f84SAndroid Build Coastguard Worker          * \brief The maximum number of temporal layers minus 1
1375*54e60f84SAndroid Build Coastguard Worker          *
1376*54e60f84SAndroid Build Coastguard Worker          * \ref max_num_temporal_layers_minus1 plus 1 specifies the maximum number of temporal
1377*54e60f84SAndroid Build Coastguard Worker          * layers that supported by the underlying driver. \ref max_num_temporal_layers_minus1
1378*54e60f84SAndroid Build Coastguard Worker          * equal to 0 implies the underlying driver doesn't support encoding with temporal layer.
1379*54e60f84SAndroid Build Coastguard Worker          */
1380*54e60f84SAndroid Build Coastguard Worker         uint32_t max_num_temporal_layers_minus1      : 8;
1381*54e60f84SAndroid Build Coastguard Worker 
1382*54e60f84SAndroid Build Coastguard Worker         /**
1383*54e60f84SAndroid Build Coastguard Worker          * /brief support temporal layer bit-rate control flag
1384*54e60f84SAndroid Build Coastguard Worker          *
1385*54e60f84SAndroid Build Coastguard Worker          * \ref temporal_layer_bitrate_control_flag equal to 1 specifies the underlying driver
1386*54e60f84SAndroid Build Coastguard Worker          * can support bit-rate control per temporal layer when (#VAConfigAttribRateControl == #VA_RC_CBR ||
1387*54e60f84SAndroid Build Coastguard Worker          * #VAConfigAttribRateControl == #VA_RC_VBR).
1388*54e60f84SAndroid Build Coastguard Worker          *
1389*54e60f84SAndroid Build Coastguard Worker          * The underlying driver must set \ref temporal_layer_bitrate_control_flag to 0 when
1390*54e60f84SAndroid Build Coastguard Worker          * \c max_num_temporal_layers_minus1 is equal to 0
1391*54e60f84SAndroid Build Coastguard Worker          *
1392*54e60f84SAndroid Build Coastguard Worker          * To use bit-rate control per temporal layer, an application must send the right layer
1393*54e60f84SAndroid Build Coastguard Worker          * structure via #VAEncMiscParameterTemporalLayerStructure at the beginning of a coded sequence
1394*54e60f84SAndroid Build Coastguard Worker          * and then followed by #VAEncMiscParameterRateControl and #VAEncMiscParameterFrameRate structures
1395*54e60f84SAndroid Build Coastguard Worker          * for each layer, using the \c temporal_id field as the layer identifier. Otherwise
1396*54e60f84SAndroid Build Coastguard Worker          * the driver doesn't use bitrate control per temporal layer if an application doesn't send the
1397*54e60f84SAndroid Build Coastguard Worker          * layer structure via #VAEncMiscParameterTemporalLayerStructure to the driver. The driver returns
1398*54e60f84SAndroid Build Coastguard Worker          * VA_STATUS_ERROR_INVALID_PARAMETER if an application sends a wrong layer structure or doesn't send
1399*54e60f84SAndroid Build Coastguard Worker          * #VAEncMiscParameterRateControl and #VAEncMiscParameterFrameRate for each layer.
1400*54e60f84SAndroid Build Coastguard Worker          *
1401*54e60f84SAndroid Build Coastguard Worker          * The driver will ignore #VAEncMiscParameterTemporalLayerStructure and the \c temporal_id field
1402*54e60f84SAndroid Build Coastguard Worker          * in #VAEncMiscParameterRateControl and #VAEncMiscParameterFrameRate if
1403*54e60f84SAndroid Build Coastguard Worker          * \ref temporal_layer_bitrate_control_flag is equal to 0 or #VAConfigAttribRateControl == #VA_RC_CQP
1404*54e60f84SAndroid Build Coastguard Worker          */
1405*54e60f84SAndroid Build Coastguard Worker         uint32_t temporal_layer_bitrate_control_flag : 1;
1406*54e60f84SAndroid Build Coastguard Worker         uint32_t reserved                            : 23;
1407*54e60f84SAndroid Build Coastguard Worker     } bits;
1408*54e60f84SAndroid Build Coastguard Worker     uint32_t value;
1409*54e60f84SAndroid Build Coastguard Worker } VAConfigAttribValEncRateControlExt;
1410*54e60f84SAndroid Build Coastguard Worker 
1411*54e60f84SAndroid Build Coastguard Worker /** \brief Attribute value for VAConfigAttribMultipleFrame*/
1412*54e60f84SAndroid Build Coastguard Worker typedef union _VAConfigAttribValMultipleFrame {
1413*54e60f84SAndroid Build Coastguard Worker     struct {
1414*54e60f84SAndroid Build Coastguard Worker         /** \brief max num of concurrent frames from different stream */
1415*54e60f84SAndroid Build Coastguard Worker         uint32_t max_num_concurrent_frames      : 8;
1416*54e60f84SAndroid Build Coastguard Worker         /** \brief indicate whether all stream must support same quality level
1417*54e60f84SAndroid Build Coastguard Worker          *  if mixed_quality_level == 0, same quality level setting for multple streams is required
1418*54e60f84SAndroid Build Coastguard Worker          *  if mixed_quality_level == 1, different stream can have different quality level*/
1419*54e60f84SAndroid Build Coastguard Worker         uint32_t mixed_quality_level            : 1;
1420*54e60f84SAndroid Build Coastguard Worker         /** \brief reserved bit for future, must be zero */
1421*54e60f84SAndroid Build Coastguard Worker         uint32_t reserved                       : 23;
1422*54e60f84SAndroid Build Coastguard Worker     } bits;
1423*54e60f84SAndroid Build Coastguard Worker     uint32_t value;
1424*54e60f84SAndroid Build Coastguard Worker } VAConfigAttribValMultipleFrame;
1425*54e60f84SAndroid Build Coastguard Worker 
1426*54e60f84SAndroid Build Coastguard Worker /** brief Attribute value VAConfigAttribValContextPriority */
1427*54e60f84SAndroid Build Coastguard Worker typedef union _VAConfigAttribValContextPriority {
1428*54e60f84SAndroid Build Coastguard Worker     struct {
1429*54e60f84SAndroid Build Coastguard Worker         /** \brief the priority , for the Query operation (read) it represents highest priority
1430*54e60f84SAndroid Build Coastguard Worker          * for the set operation (write), value should be [0~highest priority] , 0 is lowest priority*/
1431*54e60f84SAndroid Build Coastguard Worker         uint32_t priority     : 16;
1432*54e60f84SAndroid Build Coastguard Worker         /** \brief reserved bits for future, must be zero*/
1433*54e60f84SAndroid Build Coastguard Worker         uint32_t reserved     : 16;
1434*54e60f84SAndroid Build Coastguard Worker     } bits;
1435*54e60f84SAndroid Build Coastguard Worker     uint32_t value;
1436*54e60f84SAndroid Build Coastguard Worker } VAConfigAttribValContextPriority;
1437*54e60f84SAndroid Build Coastguard Worker 
1438*54e60f84SAndroid Build Coastguard Worker /** brief Attribute value VAConfigAttribEncPerBlockControl */
1439*54e60f84SAndroid Build Coastguard Worker typedef union _VAConfigAttribValEncPerBlockControl {
1440*54e60f84SAndroid Build Coastguard Worker     struct {
1441*54e60f84SAndroid Build Coastguard Worker         /** \brief whether to support dela qp per block */
1442*54e60f84SAndroid Build Coastguard Worker         uint32_t delta_qp_support         : 1;
1443*54e60f84SAndroid Build Coastguard Worker         /** \brief supported size of delta qp block */
1444*54e60f84SAndroid Build Coastguard Worker         uint32_t log2_delta_qp_block_size : 4;
1445*54e60f84SAndroid Build Coastguard Worker         /** \brief size of delta qp per block in bytes*/
1446*54e60f84SAndroid Build Coastguard Worker         uint32_t delta_qp_size_in_bytes   : 3;
1447*54e60f84SAndroid Build Coastguard Worker         /** \brief reserved bit for future, must be zero */
1448*54e60f84SAndroid Build Coastguard Worker         uint32_t reserved                 : 24;
1449*54e60f84SAndroid Build Coastguard Worker     } bits;
1450*54e60f84SAndroid Build Coastguard Worker     uint32_t value;
1451*54e60f84SAndroid Build Coastguard Worker } VAConfigAttribValEncPerBlockControl;
1452*54e60f84SAndroid Build Coastguard Worker 
1453*54e60f84SAndroid Build Coastguard Worker /** @name Attribute values for VAConfigAttribProtectedContentCipherAlgorithm */
1454*54e60f84SAndroid Build Coastguard Worker /** \brief AES cipher */
1455*54e60f84SAndroid Build Coastguard Worker #define VA_PC_CIPHER_AES                    0x00000001
1456*54e60f84SAndroid Build Coastguard Worker 
1457*54e60f84SAndroid Build Coastguard Worker /** @name Attribute values for VAConfigAttribProtectedContentCipherBlockSize */
1458*54e60f84SAndroid Build Coastguard Worker /** \brief 128 bits block size */
1459*54e60f84SAndroid Build Coastguard Worker #define VA_PC_BLOCK_SIZE_128                0x00000001
1460*54e60f84SAndroid Build Coastguard Worker /** \brief 192 bits block size */
1461*54e60f84SAndroid Build Coastguard Worker #define VA_PC_BLOCK_SIZE_192                0x00000002
1462*54e60f84SAndroid Build Coastguard Worker /** \brief 256 bits block size */
1463*54e60f84SAndroid Build Coastguard Worker #define VA_PC_BLOCK_SIZE_256                0x00000004
1464*54e60f84SAndroid Build Coastguard Worker 
1465*54e60f84SAndroid Build Coastguard Worker /** @name Attribute values for VAConfigAttribProtectedContentCipherMode */
1466*54e60f84SAndroid Build Coastguard Worker /** \brief AES ECB */
1467*54e60f84SAndroid Build Coastguard Worker #define VA_PC_CIPHER_MODE_ECB               0x00000001
1468*54e60f84SAndroid Build Coastguard Worker /** \brief AES CBC */
1469*54e60f84SAndroid Build Coastguard Worker #define VA_PC_CIPHER_MODE_CBC               0x00000002
1470*54e60f84SAndroid Build Coastguard Worker /** \brief AES CTR */
1471*54e60f84SAndroid Build Coastguard Worker #define VA_PC_CIPHER_MODE_CTR               0x00000004
1472*54e60f84SAndroid Build Coastguard Worker 
1473*54e60f84SAndroid Build Coastguard Worker /** @name Attribute values for VAConfigAttribProtectedContentCipherSampleType */
1474*54e60f84SAndroid Build Coastguard Worker /** \brief Full sample */
1475*54e60f84SAndroid Build Coastguard Worker #define VA_PC_SAMPLE_TYPE_FULLSAMPLE        0x00000001
1476*54e60f84SAndroid Build Coastguard Worker /** \brief Sub sample */
1477*54e60f84SAndroid Build Coastguard Worker #define VA_PC_SAMPLE_TYPE_SUBSAMPLE         0x00000002
1478*54e60f84SAndroid Build Coastguard Worker 
1479*54e60f84SAndroid Build Coastguard Worker /** @name Attribute values for VAConfigAttribProtectedContentUsage */
1480*54e60f84SAndroid Build Coastguard Worker /** \brief Default usage */
1481*54e60f84SAndroid Build Coastguard Worker #define VA_PC_USAGE_DEFAULT                 0x00000000
1482*54e60f84SAndroid Build Coastguard Worker /** \brief Widevine */
1483*54e60f84SAndroid Build Coastguard Worker #define VA_PC_USAGE_WIDEVINE                0x00000001
1484*54e60f84SAndroid Build Coastguard Worker 
1485*54e60f84SAndroid Build Coastguard Worker /** @name Attribute values for VAConfigAttribProcessingRate. */
1486*54e60f84SAndroid Build Coastguard Worker /**@{*/
1487*54e60f84SAndroid Build Coastguard Worker /** \brief Driver does not support processing rate report */
1488*54e60f84SAndroid Build Coastguard Worker #define VA_PROCESSING_RATE_NONE                       0x00000000
1489*54e60f84SAndroid Build Coastguard Worker /** \brief Driver supports encode processing rate report  */
1490*54e60f84SAndroid Build Coastguard Worker #define VA_PROCESSING_RATE_ENCODE                     0x00000001
1491*54e60f84SAndroid Build Coastguard Worker /** \brief Driver supports decode processing rate report  */
1492*54e60f84SAndroid Build Coastguard Worker #define VA_PROCESSING_RATE_DECODE                     0x00000002
1493*54e60f84SAndroid Build Coastguard Worker /**@}*/
1494*54e60f84SAndroid Build Coastguard Worker /**
1495*54e60f84SAndroid Build Coastguard Worker  * if an attribute is not applicable for a given
1496*54e60f84SAndroid Build Coastguard Worker  * profile/entrypoint pair, then set the value to the following
1497*54e60f84SAndroid Build Coastguard Worker  */
1498*54e60f84SAndroid Build Coastguard Worker #define VA_ATTRIB_NOT_SUPPORTED 0x80000000
1499*54e60f84SAndroid Build Coastguard Worker 
1500*54e60f84SAndroid Build Coastguard Worker /** Get maximum number of profiles supported by the implementation */
1501*54e60f84SAndroid Build Coastguard Worker int vaMaxNumProfiles(
1502*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy
1503*54e60f84SAndroid Build Coastguard Worker );
1504*54e60f84SAndroid Build Coastguard Worker 
1505*54e60f84SAndroid Build Coastguard Worker /** Get maximum number of entrypoints supported by the implementation */
1506*54e60f84SAndroid Build Coastguard Worker int vaMaxNumEntrypoints(
1507*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy
1508*54e60f84SAndroid Build Coastguard Worker );
1509*54e60f84SAndroid Build Coastguard Worker 
1510*54e60f84SAndroid Build Coastguard Worker /** Get maximum number of attributs supported by the implementation */
1511*54e60f84SAndroid Build Coastguard Worker int vaMaxNumConfigAttributes(
1512*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy
1513*54e60f84SAndroid Build Coastguard Worker );
1514*54e60f84SAndroid Build Coastguard Worker 
1515*54e60f84SAndroid Build Coastguard Worker /**
1516*54e60f84SAndroid Build Coastguard Worker  * Query supported profiles
1517*54e60f84SAndroid Build Coastguard Worker  * The caller must provide a "profile_list" array that can hold at
1518*54e60f84SAndroid Build Coastguard Worker  * least vaMaxNumProfile() entries. The actual number of profiles
1519*54e60f84SAndroid Build Coastguard Worker  * returned in "profile_list" is returned in "num_profile".
1520*54e60f84SAndroid Build Coastguard Worker  */
1521*54e60f84SAndroid Build Coastguard Worker VAStatus vaQueryConfigProfiles(
1522*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
1523*54e60f84SAndroid Build Coastguard Worker     VAProfile *profile_list,    /* out */
1524*54e60f84SAndroid Build Coastguard Worker     int *num_profiles       /* out */
1525*54e60f84SAndroid Build Coastguard Worker );
1526*54e60f84SAndroid Build Coastguard Worker 
1527*54e60f84SAndroid Build Coastguard Worker /**
1528*54e60f84SAndroid Build Coastguard Worker  * Query supported entrypoints for a given profile
1529*54e60f84SAndroid Build Coastguard Worker  * The caller must provide an "entrypoint_list" array that can hold at
1530*54e60f84SAndroid Build Coastguard Worker  * least vaMaxNumEntrypoints() entries. The actual number of entrypoints
1531*54e60f84SAndroid Build Coastguard Worker  * returned in "entrypoint_list" is returned in "num_entrypoints".
1532*54e60f84SAndroid Build Coastguard Worker  */
1533*54e60f84SAndroid Build Coastguard Worker VAStatus vaQueryConfigEntrypoints(
1534*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
1535*54e60f84SAndroid Build Coastguard Worker     VAProfile profile,
1536*54e60f84SAndroid Build Coastguard Worker     VAEntrypoint *entrypoint_list,  /* out */
1537*54e60f84SAndroid Build Coastguard Worker     int *num_entrypoints        /* out */
1538*54e60f84SAndroid Build Coastguard Worker );
1539*54e60f84SAndroid Build Coastguard Worker 
1540*54e60f84SAndroid Build Coastguard Worker /**
1541*54e60f84SAndroid Build Coastguard Worker  * Get attributes for a given profile/entrypoint pair
1542*54e60f84SAndroid Build Coastguard Worker  * The caller must provide an "attrib_list" with all attributes to be
1543*54e60f84SAndroid Build Coastguard Worker  * retrieved.  Upon return, the attributes in "attrib_list" have been
1544*54e60f84SAndroid Build Coastguard Worker  * updated with their value.  Unknown attributes or attributes that are
1545*54e60f84SAndroid Build Coastguard Worker  * not supported for the given profile/entrypoint pair will have their
1546*54e60f84SAndroid Build Coastguard Worker  * value set to VA_ATTRIB_NOT_SUPPORTED
1547*54e60f84SAndroid Build Coastguard Worker  */
1548*54e60f84SAndroid Build Coastguard Worker VAStatus vaGetConfigAttributes(
1549*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
1550*54e60f84SAndroid Build Coastguard Worker     VAProfile profile,
1551*54e60f84SAndroid Build Coastguard Worker     VAEntrypoint entrypoint,
1552*54e60f84SAndroid Build Coastguard Worker     VAConfigAttrib *attrib_list, /* in/out */
1553*54e60f84SAndroid Build Coastguard Worker     int num_attribs
1554*54e60f84SAndroid Build Coastguard Worker );
1555*54e60f84SAndroid Build Coastguard Worker 
1556*54e60f84SAndroid Build Coastguard Worker /** Generic ID type, can be re-typed for specific implementation */
1557*54e60f84SAndroid Build Coastguard Worker typedef unsigned int VAGenericID;
1558*54e60f84SAndroid Build Coastguard Worker 
1559*54e60f84SAndroid Build Coastguard Worker typedef VAGenericID VAConfigID;
1560*54e60f84SAndroid Build Coastguard Worker 
1561*54e60f84SAndroid Build Coastguard Worker /**
1562*54e60f84SAndroid Build Coastguard Worker  * Create a configuration for the video decode/encode/processing pipeline
1563*54e60f84SAndroid Build Coastguard Worker  * it passes in the attribute list that specifies the attributes it cares
1564*54e60f84SAndroid Build Coastguard Worker  * about, with the rest taking default values.
1565*54e60f84SAndroid Build Coastguard Worker  */
1566*54e60f84SAndroid Build Coastguard Worker VAStatus vaCreateConfig(
1567*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
1568*54e60f84SAndroid Build Coastguard Worker     VAProfile profile,
1569*54e60f84SAndroid Build Coastguard Worker     VAEntrypoint entrypoint,
1570*54e60f84SAndroid Build Coastguard Worker     VAConfigAttrib *attrib_list,
1571*54e60f84SAndroid Build Coastguard Worker     int num_attribs,
1572*54e60f84SAndroid Build Coastguard Worker     VAConfigID *config_id /* out */
1573*54e60f84SAndroid Build Coastguard Worker );
1574*54e60f84SAndroid Build Coastguard Worker 
1575*54e60f84SAndroid Build Coastguard Worker /**
1576*54e60f84SAndroid Build Coastguard Worker  * Free resources associdated with a given config
1577*54e60f84SAndroid Build Coastguard Worker  */
1578*54e60f84SAndroid Build Coastguard Worker VAStatus vaDestroyConfig(
1579*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
1580*54e60f84SAndroid Build Coastguard Worker     VAConfigID config_id
1581*54e60f84SAndroid Build Coastguard Worker );
1582*54e60f84SAndroid Build Coastguard Worker 
1583*54e60f84SAndroid Build Coastguard Worker /**
1584*54e60f84SAndroid Build Coastguard Worker  * Query all attributes for a given configuration
1585*54e60f84SAndroid Build Coastguard Worker  * The profile of the configuration is returned in "profile"
1586*54e60f84SAndroid Build Coastguard Worker  * The entrypoint of the configuration is returned in "entrypoint"
1587*54e60f84SAndroid Build Coastguard Worker  * The caller must provide an "attrib_list" array that can hold at least
1588*54e60f84SAndroid Build Coastguard Worker  * vaMaxNumConfigAttributes() entries. The actual number of attributes
1589*54e60f84SAndroid Build Coastguard Worker  * returned in "attrib_list" is returned in "num_attribs"
1590*54e60f84SAndroid Build Coastguard Worker  */
1591*54e60f84SAndroid Build Coastguard Worker VAStatus vaQueryConfigAttributes(
1592*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
1593*54e60f84SAndroid Build Coastguard Worker     VAConfigID config_id,
1594*54e60f84SAndroid Build Coastguard Worker     VAProfile *profile,     /* out */
1595*54e60f84SAndroid Build Coastguard Worker     VAEntrypoint *entrypoint,   /* out */
1596*54e60f84SAndroid Build Coastguard Worker     VAConfigAttrib *attrib_list,/* out */
1597*54e60f84SAndroid Build Coastguard Worker     int *num_attribs        /* out */
1598*54e60f84SAndroid Build Coastguard Worker );
1599*54e60f84SAndroid Build Coastguard Worker 
1600*54e60f84SAndroid Build Coastguard Worker 
1601*54e60f84SAndroid Build Coastguard Worker /**
1602*54e60f84SAndroid Build Coastguard Worker  * Contexts and Surfaces
1603*54e60f84SAndroid Build Coastguard Worker  *
1604*54e60f84SAndroid Build Coastguard Worker  * Context represents a "virtual" video decode, encode or video processing
1605*54e60f84SAndroid Build Coastguard Worker  * pipeline. Surfaces are render targets for a given context. The data in the
1606*54e60f84SAndroid Build Coastguard Worker  * surfaces are not accessible to the client except if derived image is supported
1607*54e60f84SAndroid Build Coastguard Worker  * and the internal data format of the surface is implementation specific.
1608*54e60f84SAndroid Build Coastguard Worker  *
1609*54e60f84SAndroid Build Coastguard Worker  * Surfaces are provided as a hint of what surfaces will be used when the context
1610*54e60f84SAndroid Build Coastguard Worker  * is created through vaCreateContext(). A surface may be used by different contexts
1611*54e60f84SAndroid Build Coastguard Worker  * at the same time as soon as application can make sure the operations are synchronized
1612*54e60f84SAndroid Build Coastguard Worker  * between different contexts, e.g. a surface is used as the output of a decode context
1613*54e60f84SAndroid Build Coastguard Worker  * and the input of a video process context. Surfaces can only be destroyed after all
1614*54e60f84SAndroid Build Coastguard Worker  * contexts using these surfaces have been destroyed.
1615*54e60f84SAndroid Build Coastguard Worker  *
1616*54e60f84SAndroid Build Coastguard Worker  * Both contexts and surfaces are identified by unique IDs and its
1617*54e60f84SAndroid Build Coastguard Worker  * implementation specific internals are kept opaque to the clients
1618*54e60f84SAndroid Build Coastguard Worker  */
1619*54e60f84SAndroid Build Coastguard Worker 
1620*54e60f84SAndroid Build Coastguard Worker typedef VAGenericID VAContextID;
1621*54e60f84SAndroid Build Coastguard Worker 
1622*54e60f84SAndroid Build Coastguard Worker typedef VAGenericID VASurfaceID;
1623*54e60f84SAndroid Build Coastguard Worker 
1624*54e60f84SAndroid Build Coastguard Worker #define VA_INVALID_ID       0xffffffff
1625*54e60f84SAndroid Build Coastguard Worker #define VA_INVALID_SURFACE  VA_INVALID_ID
1626*54e60f84SAndroid Build Coastguard Worker 
1627*54e60f84SAndroid Build Coastguard Worker /** \brief Generic value types. */
1628*54e60f84SAndroid Build Coastguard Worker typedef enum  {
1629*54e60f84SAndroid Build Coastguard Worker     VAGenericValueTypeInteger = 1,      /**< 32-bit signed integer. */
1630*54e60f84SAndroid Build Coastguard Worker     VAGenericValueTypeFloat,            /**< 32-bit floating-point value. */
1631*54e60f84SAndroid Build Coastguard Worker     VAGenericValueTypePointer,          /**< Generic pointer type */
1632*54e60f84SAndroid Build Coastguard Worker     VAGenericValueTypeFunc              /**< Pointer to function */
1633*54e60f84SAndroid Build Coastguard Worker } VAGenericValueType;
1634*54e60f84SAndroid Build Coastguard Worker 
1635*54e60f84SAndroid Build Coastguard Worker /** \brief Generic function type. */
1636*54e60f84SAndroid Build Coastguard Worker typedef void (*VAGenericFunc)(void);
1637*54e60f84SAndroid Build Coastguard Worker 
1638*54e60f84SAndroid Build Coastguard Worker /** \brief Generic value. */
1639*54e60f84SAndroid Build Coastguard Worker typedef struct _VAGenericValue {
1640*54e60f84SAndroid Build Coastguard Worker     /** \brief Value type. See #VAGenericValueType. */
1641*54e60f84SAndroid Build Coastguard Worker     VAGenericValueType  type;
1642*54e60f84SAndroid Build Coastguard Worker     /** \brief Value holder. */
1643*54e60f84SAndroid Build Coastguard Worker     union {
1644*54e60f84SAndroid Build Coastguard Worker         /** \brief 32-bit signed integer. */
1645*54e60f84SAndroid Build Coastguard Worker         int32_t             i;
1646*54e60f84SAndroid Build Coastguard Worker         /** \brief 32-bit float. */
1647*54e60f84SAndroid Build Coastguard Worker         float           f;
1648*54e60f84SAndroid Build Coastguard Worker         /** \brief Generic pointer. */
1649*54e60f84SAndroid Build Coastguard Worker         void           *p;
1650*54e60f84SAndroid Build Coastguard Worker         /** \brief Pointer to function. */
1651*54e60f84SAndroid Build Coastguard Worker         VAGenericFunc   fn;
1652*54e60f84SAndroid Build Coastguard Worker     }                   value;
1653*54e60f84SAndroid Build Coastguard Worker } VAGenericValue;
1654*54e60f84SAndroid Build Coastguard Worker 
1655*54e60f84SAndroid Build Coastguard Worker /** @name Surface attribute flags */
1656*54e60f84SAndroid Build Coastguard Worker /**@{*/
1657*54e60f84SAndroid Build Coastguard Worker /** \brief Surface attribute is not supported. */
1658*54e60f84SAndroid Build Coastguard Worker #define VA_SURFACE_ATTRIB_NOT_SUPPORTED 0x00000000
1659*54e60f84SAndroid Build Coastguard Worker /** \brief Surface attribute can be got through vaQuerySurfaceAttributes(). */
1660*54e60f84SAndroid Build Coastguard Worker #define VA_SURFACE_ATTRIB_GETTABLE      0x00000001
1661*54e60f84SAndroid Build Coastguard Worker /** \brief Surface attribute can be set through vaCreateSurfaces(). */
1662*54e60f84SAndroid Build Coastguard Worker #define VA_SURFACE_ATTRIB_SETTABLE      0x00000002
1663*54e60f84SAndroid Build Coastguard Worker /**@}*/
1664*54e60f84SAndroid Build Coastguard Worker 
1665*54e60f84SAndroid Build Coastguard Worker /** \brief Surface attribute types. */
1666*54e60f84SAndroid Build Coastguard Worker typedef enum {
1667*54e60f84SAndroid Build Coastguard Worker     VASurfaceAttribNone = 0,
1668*54e60f84SAndroid Build Coastguard Worker     /**
1669*54e60f84SAndroid Build Coastguard Worker      * \brief Pixel format as a FOURCC (int, read/write).
1670*54e60f84SAndroid Build Coastguard Worker      *
1671*54e60f84SAndroid Build Coastguard Worker      * When vaQuerySurfaceAttributes() is called, the driver will return one
1672*54e60f84SAndroid Build Coastguard Worker      * PixelFormat attribute per supported pixel format.
1673*54e60f84SAndroid Build Coastguard Worker      *
1674*54e60f84SAndroid Build Coastguard Worker      * When provided as an input to vaCreateSurfaces(), the driver will
1675*54e60f84SAndroid Build Coastguard Worker      * allocate a surface with the provided pixel format.
1676*54e60f84SAndroid Build Coastguard Worker      */
1677*54e60f84SAndroid Build Coastguard Worker     VASurfaceAttribPixelFormat,
1678*54e60f84SAndroid Build Coastguard Worker     /** \brief Minimal width in pixels (int, read-only). */
1679*54e60f84SAndroid Build Coastguard Worker     VASurfaceAttribMinWidth,
1680*54e60f84SAndroid Build Coastguard Worker     /** \brief Maximal width in pixels (int, read-only). */
1681*54e60f84SAndroid Build Coastguard Worker     VASurfaceAttribMaxWidth,
1682*54e60f84SAndroid Build Coastguard Worker     /** \brief Minimal height in pixels (int, read-only). */
1683*54e60f84SAndroid Build Coastguard Worker     VASurfaceAttribMinHeight,
1684*54e60f84SAndroid Build Coastguard Worker     /** \brief Maximal height in pixels (int, read-only). */
1685*54e60f84SAndroid Build Coastguard Worker     VASurfaceAttribMaxHeight,
1686*54e60f84SAndroid Build Coastguard Worker     /** \brief Surface memory type expressed in bit fields (int, read/write). */
1687*54e60f84SAndroid Build Coastguard Worker     VASurfaceAttribMemoryType,
1688*54e60f84SAndroid Build Coastguard Worker     /** \brief External buffer descriptor (pointer, write).
1689*54e60f84SAndroid Build Coastguard Worker      *
1690*54e60f84SAndroid Build Coastguard Worker      * Refer to the documentation for the memory type being created to
1691*54e60f84SAndroid Build Coastguard Worker      * determine what descriptor structure to pass here.  If not otherwise
1692*54e60f84SAndroid Build Coastguard Worker      * stated, the common VASurfaceAttribExternalBuffers should be used.
1693*54e60f84SAndroid Build Coastguard Worker      */
1694*54e60f84SAndroid Build Coastguard Worker     VASurfaceAttribExternalBufferDescriptor,
1695*54e60f84SAndroid Build Coastguard Worker     /** \brief Surface usage hint, gives the driver a hint of intended usage
1696*54e60f84SAndroid Build Coastguard Worker      *  to optimize allocation (e.g. tiling) (int, read/write). */
1697*54e60f84SAndroid Build Coastguard Worker     VASurfaceAttribUsageHint,
1698*54e60f84SAndroid Build Coastguard Worker     /** \brief List of possible DRM format modifiers (pointer, write).
1699*54e60f84SAndroid Build Coastguard Worker      *
1700*54e60f84SAndroid Build Coastguard Worker      * The value must be a pointer to a VADRMFormatModifierList. This can only
1701*54e60f84SAndroid Build Coastguard Worker      * be used when allocating a new buffer, it's invalid to use this attribute
1702*54e60f84SAndroid Build Coastguard Worker      * when importing an existing buffer.
1703*54e60f84SAndroid Build Coastguard Worker      */
1704*54e60f84SAndroid Build Coastguard Worker     VASurfaceAttribDRMFormatModifiers,
1705*54e60f84SAndroid Build Coastguard Worker     /** \brief width and height log2 aligment in pixels (int, read-only)
1706*54e60f84SAndroid Build Coastguard Worker      *
1707*54e60f84SAndroid Build Coastguard Worker      * For special HW requirement used in some codecs, if
1708*54e60f84SAndroid Build Coastguard Worker      * VASurfaceAttribAlignmentSize is not implemented in the driver, then
1709*54e60f84SAndroid Build Coastguard Worker      * the surface_width and surface_height should keep the original logic
1710*54e60f84SAndroid Build Coastguard Worker      * without any modification, this is an add-on requirement to
1711*54e60f84SAndroid Build Coastguard Worker      * surface_width and surface_height.
1712*54e60f84SAndroid Build Coastguard Worker      */
1713*54e60f84SAndroid Build Coastguard Worker     VASurfaceAttribAlignmentSize,
1714*54e60f84SAndroid Build Coastguard Worker     /** \brief Number of surface attributes. */
1715*54e60f84SAndroid Build Coastguard Worker     VASurfaceAttribCount
1716*54e60f84SAndroid Build Coastguard Worker } VASurfaceAttribType;
1717*54e60f84SAndroid Build Coastguard Worker 
1718*54e60f84SAndroid Build Coastguard Worker /** \brief Surface attribute. */
1719*54e60f84SAndroid Build Coastguard Worker typedef struct _VASurfaceAttrib {
1720*54e60f84SAndroid Build Coastguard Worker     /** \brief Type. */
1721*54e60f84SAndroid Build Coastguard Worker     VASurfaceAttribType type;
1722*54e60f84SAndroid Build Coastguard Worker     /** \brief Flags. See "Surface attribute flags". */
1723*54e60f84SAndroid Build Coastguard Worker     uint32_t        flags;
1724*54e60f84SAndroid Build Coastguard Worker     /** \brief Value. See "Surface attribute types" for the expected types. */
1725*54e60f84SAndroid Build Coastguard Worker     VAGenericValue      value;
1726*54e60f84SAndroid Build Coastguard Worker } VASurfaceAttrib;
1727*54e60f84SAndroid Build Coastguard Worker 
1728*54e60f84SAndroid Build Coastguard Worker /**
1729*54e60f84SAndroid Build Coastguard Worker  * @name VASurfaceAttribMemoryType values in bit fields.
1730*54e60f84SAndroid Build Coastguard Worker  * Bits 0:7 are reserved for generic types. Bits 31:28 are reserved for
1731*54e60f84SAndroid Build Coastguard Worker  * Linux DRM. Bits 23:20 are reserved for Android. Bits 19:16 are reserved for Win32.
1732*54e60f84SAndroid Build Coastguard Worker  * DRM, Android and Win32 specific types are defined in respective va_*.h header files.
1733*54e60f84SAndroid Build Coastguard Worker  */
1734*54e60f84SAndroid Build Coastguard Worker /**@{*/
1735*54e60f84SAndroid Build Coastguard Worker /** \brief VA memory type (default) is supported. */
1736*54e60f84SAndroid Build Coastguard Worker #define VA_SURFACE_ATTRIB_MEM_TYPE_VA           0x00000001
1737*54e60f84SAndroid Build Coastguard Worker /** \brief V4L2 buffer memory type is supported. */
1738*54e60f84SAndroid Build Coastguard Worker #define VA_SURFACE_ATTRIB_MEM_TYPE_V4L2         0x00000002
1739*54e60f84SAndroid Build Coastguard Worker /** \brief User pointer memory type is supported. */
1740*54e60f84SAndroid Build Coastguard Worker #define VA_SURFACE_ATTRIB_MEM_TYPE_USER_PTR     0x00000004
1741*54e60f84SAndroid Build Coastguard Worker /**@}*/
1742*54e60f84SAndroid Build Coastguard Worker /**
1743*54e60f84SAndroid Build Coastguard Worker  * \brief VASurfaceAttribAlignmentStruct structure for
1744*54e60f84SAndroid Build Coastguard Worker  * the VASurfaceAttribAlignmentSize attribute.
1745*54e60f84SAndroid Build Coastguard Worker  */
1746*54e60f84SAndroid Build Coastguard Worker typedef union _VASurfaceAttribAlignmentStruct {
1747*54e60f84SAndroid Build Coastguard Worker     struct {
1748*54e60f84SAndroid Build Coastguard Worker         /** \brief log2 width aligment */
1749*54e60f84SAndroid Build Coastguard Worker         uint32_t log2_width_alignment  : 4;
1750*54e60f84SAndroid Build Coastguard Worker         /** \brief log2 height aligment */
1751*54e60f84SAndroid Build Coastguard Worker         uint32_t log2_height_alignment : 4;
1752*54e60f84SAndroid Build Coastguard Worker         uint32_t reserved              : 24;
1753*54e60f84SAndroid Build Coastguard Worker     } bits;
1754*54e60f84SAndroid Build Coastguard Worker     uint32_t value;
1755*54e60f84SAndroid Build Coastguard Worker } VASurfaceAttribAlignmentStruct;
1756*54e60f84SAndroid Build Coastguard Worker 
1757*54e60f84SAndroid Build Coastguard Worker /**
1758*54e60f84SAndroid Build Coastguard Worker  * \brief VASurfaceAttribExternalBuffers structure for
1759*54e60f84SAndroid Build Coastguard Worker  * the VASurfaceAttribExternalBufferDescriptor attribute.
1760*54e60f84SAndroid Build Coastguard Worker  */
1761*54e60f84SAndroid Build Coastguard Worker typedef struct _VASurfaceAttribExternalBuffers {
1762*54e60f84SAndroid Build Coastguard Worker     /** \brief pixel format in fourcc. */
1763*54e60f84SAndroid Build Coastguard Worker     uint32_t pixel_format;
1764*54e60f84SAndroid Build Coastguard Worker     /** \brief width in pixels. */
1765*54e60f84SAndroid Build Coastguard Worker     uint32_t width;
1766*54e60f84SAndroid Build Coastguard Worker     /** \brief height in pixels. */
1767*54e60f84SAndroid Build Coastguard Worker     uint32_t height;
1768*54e60f84SAndroid Build Coastguard Worker     /** \brief total size of the buffer in bytes. */
1769*54e60f84SAndroid Build Coastguard Worker     uint32_t data_size;
1770*54e60f84SAndroid Build Coastguard Worker     /** \brief number of planes for planar layout */
1771*54e60f84SAndroid Build Coastguard Worker     uint32_t num_planes;
1772*54e60f84SAndroid Build Coastguard Worker     /** \brief pitch for each plane in bytes */
1773*54e60f84SAndroid Build Coastguard Worker     uint32_t pitches[4];
1774*54e60f84SAndroid Build Coastguard Worker     /** \brief offset for each plane in bytes */
1775*54e60f84SAndroid Build Coastguard Worker     uint32_t offsets[4];
1776*54e60f84SAndroid Build Coastguard Worker     /** \brief buffer handles or user pointers */
1777*54e60f84SAndroid Build Coastguard Worker     uintptr_t *buffers;
1778*54e60f84SAndroid Build Coastguard Worker     /** \brief number of elements in the "buffers" array */
1779*54e60f84SAndroid Build Coastguard Worker     uint32_t num_buffers;
1780*54e60f84SAndroid Build Coastguard Worker     /** \brief flags. See "Surface external buffer descriptor flags". */
1781*54e60f84SAndroid Build Coastguard Worker     uint32_t flags;
1782*54e60f84SAndroid Build Coastguard Worker     /** \brief reserved for passing private data */
1783*54e60f84SAndroid Build Coastguard Worker     void *private_data;
1784*54e60f84SAndroid Build Coastguard Worker } VASurfaceAttribExternalBuffers;
1785*54e60f84SAndroid Build Coastguard Worker 
1786*54e60f84SAndroid Build Coastguard Worker /** @name VASurfaceAttribExternalBuffers flags */
1787*54e60f84SAndroid Build Coastguard Worker /**@{*/
1788*54e60f84SAndroid Build Coastguard Worker /** \brief Enable memory tiling */
1789*54e60f84SAndroid Build Coastguard Worker #define VA_SURFACE_EXTBUF_DESC_ENABLE_TILING    0x00000001
1790*54e60f84SAndroid Build Coastguard Worker /** \brief Memory is cacheable */
1791*54e60f84SAndroid Build Coastguard Worker #define VA_SURFACE_EXTBUF_DESC_CACHED       0x00000002
1792*54e60f84SAndroid Build Coastguard Worker /** \brief Memory is non-cacheable */
1793*54e60f84SAndroid Build Coastguard Worker #define VA_SURFACE_EXTBUF_DESC_UNCACHED     0x00000004
1794*54e60f84SAndroid Build Coastguard Worker /** \brief Memory is write-combined */
1795*54e60f84SAndroid Build Coastguard Worker #define VA_SURFACE_EXTBUF_DESC_WC       0x00000008
1796*54e60f84SAndroid Build Coastguard Worker /** \brief Memory is protected */
1797*54e60f84SAndroid Build Coastguard Worker #define VA_SURFACE_EXTBUF_DESC_PROTECTED        0x80000000
1798*54e60f84SAndroid Build Coastguard Worker 
1799*54e60f84SAndroid Build Coastguard Worker /** @name VASurfaceAttribUsageHint attribute usage hint flags */
1800*54e60f84SAndroid Build Coastguard Worker /**@{*/
1801*54e60f84SAndroid Build Coastguard Worker /** \brief Surface usage not indicated. */
1802*54e60f84SAndroid Build Coastguard Worker #define VA_SURFACE_ATTRIB_USAGE_HINT_GENERIC    0x00000000
1803*54e60f84SAndroid Build Coastguard Worker /** \brief Surface used by video decoder. */
1804*54e60f84SAndroid Build Coastguard Worker #define VA_SURFACE_ATTRIB_USAGE_HINT_DECODER    0x00000001
1805*54e60f84SAndroid Build Coastguard Worker /** \brief Surface used by video encoder. */
1806*54e60f84SAndroid Build Coastguard Worker #define VA_SURFACE_ATTRIB_USAGE_HINT_ENCODER    0x00000002
1807*54e60f84SAndroid Build Coastguard Worker /** \brief Surface read by video post-processing. */
1808*54e60f84SAndroid Build Coastguard Worker #define VA_SURFACE_ATTRIB_USAGE_HINT_VPP_READ   0x00000004
1809*54e60f84SAndroid Build Coastguard Worker /** \brief Surface written by video post-processing. */
1810*54e60f84SAndroid Build Coastguard Worker #define VA_SURFACE_ATTRIB_USAGE_HINT_VPP_WRITE  0x00000008
1811*54e60f84SAndroid Build Coastguard Worker /** \brief Surface used for display. */
1812*54e60f84SAndroid Build Coastguard Worker #define VA_SURFACE_ATTRIB_USAGE_HINT_DISPLAY    0x00000010
1813*54e60f84SAndroid Build Coastguard Worker /** \brief Surface used for export to third-party APIs, e.g. via
1814*54e60f84SAndroid Build Coastguard Worker  *  vaExportSurfaceHandle(). */
1815*54e60f84SAndroid Build Coastguard Worker #define VA_SURFACE_ATTRIB_USAGE_HINT_EXPORT     0x00000020
1816*54e60f84SAndroid Build Coastguard Worker 
1817*54e60f84SAndroid Build Coastguard Worker /**@}*/
1818*54e60f84SAndroid Build Coastguard Worker 
1819*54e60f84SAndroid Build Coastguard Worker /**
1820*54e60f84SAndroid Build Coastguard Worker  * \brief Queries surface attributes for the supplied config.
1821*54e60f84SAndroid Build Coastguard Worker  *
1822*54e60f84SAndroid Build Coastguard Worker  * This function queries for all supported attributes for the
1823*54e60f84SAndroid Build Coastguard Worker  * supplied VA \c config. In particular, if the underlying hardware
1824*54e60f84SAndroid Build Coastguard Worker  * supports the creation of VA surfaces in various formats, then
1825*54e60f84SAndroid Build Coastguard Worker  * this function will enumerate all pixel formats that are supported.
1826*54e60f84SAndroid Build Coastguard Worker  *
1827*54e60f84SAndroid Build Coastguard Worker  * The \c attrib_list array is allocated by the user and \c
1828*54e60f84SAndroid Build Coastguard Worker  * num_attribs shall be initialized to the number of allocated
1829*54e60f84SAndroid Build Coastguard Worker  * elements in that array. Upon successful return, the actual number
1830*54e60f84SAndroid Build Coastguard Worker  * of attributes will be overwritten into \c num_attribs. Otherwise,
1831*54e60f84SAndroid Build Coastguard Worker  * \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned and \c num_attribs
1832*54e60f84SAndroid Build Coastguard Worker  * is adjusted to the number of elements that would be returned if
1833*54e60f84SAndroid Build Coastguard Worker  * enough space was available.
1834*54e60f84SAndroid Build Coastguard Worker  *
1835*54e60f84SAndroid Build Coastguard Worker  * Note: it is perfectly valid to pass NULL to the \c attrib_list
1836*54e60f84SAndroid Build Coastguard Worker  * argument when vaQuerySurfaceAttributes() is used to determine the
1837*54e60f84SAndroid Build Coastguard Worker  * actual number of elements that need to be allocated.
1838*54e60f84SAndroid Build Coastguard Worker  *
1839*54e60f84SAndroid Build Coastguard Worker  * @param[in] dpy               the VA display
1840*54e60f84SAndroid Build Coastguard Worker  * @param[in] config            the config identifying a codec or a video
1841*54e60f84SAndroid Build Coastguard Worker  *     processing pipeline
1842*54e60f84SAndroid Build Coastguard Worker  * @param[out] attrib_list      the output array of #VASurfaceAttrib elements
1843*54e60f84SAndroid Build Coastguard Worker  * @param[in,out] num_attribs   the number of elements allocated on
1844*54e60f84SAndroid Build Coastguard Worker  *      input, the number of elements actually filled in output
1845*54e60f84SAndroid Build Coastguard Worker  */
1846*54e60f84SAndroid Build Coastguard Worker VAStatus
1847*54e60f84SAndroid Build Coastguard Worker vaQuerySurfaceAttributes(
1848*54e60f84SAndroid Build Coastguard Worker     VADisplay           dpy,
1849*54e60f84SAndroid Build Coastguard Worker     VAConfigID          config,
1850*54e60f84SAndroid Build Coastguard Worker     VASurfaceAttrib    *attrib_list,
1851*54e60f84SAndroid Build Coastguard Worker     unsigned int       *num_attribs
1852*54e60f84SAndroid Build Coastguard Worker );
1853*54e60f84SAndroid Build Coastguard Worker 
1854*54e60f84SAndroid Build Coastguard Worker /**
1855*54e60f84SAndroid Build Coastguard Worker  * \brief Creates an array of surfaces
1856*54e60f84SAndroid Build Coastguard Worker  *
1857*54e60f84SAndroid Build Coastguard Worker  * Creates an array of surfaces. The optional list of attributes shall
1858*54e60f84SAndroid Build Coastguard Worker  * be constructed based on what the underlying hardware could expose
1859*54e60f84SAndroid Build Coastguard Worker  * through vaQuerySurfaceAttributes().
1860*54e60f84SAndroid Build Coastguard Worker  *
1861*54e60f84SAndroid Build Coastguard Worker  * @param[in] dpy               the VA display
1862*54e60f84SAndroid Build Coastguard Worker  * @param[in] format            the desired surface format. See \c VA_RT_FORMAT_*
1863*54e60f84SAndroid Build Coastguard Worker  * @param[in] width             the surface width
1864*54e60f84SAndroid Build Coastguard Worker  * @param[in] height            the surface height
1865*54e60f84SAndroid Build Coastguard Worker  * @param[out] surfaces         the array of newly created surfaces
1866*54e60f84SAndroid Build Coastguard Worker  * @param[in] num_surfaces      the number of surfaces to create
1867*54e60f84SAndroid Build Coastguard Worker  * @param[in] attrib_list       the list of (optional) attributes, or \c NULL
1868*54e60f84SAndroid Build Coastguard Worker  * @param[in] num_attribs       the number of attributes supplied in
1869*54e60f84SAndroid Build Coastguard Worker  *     \c attrib_list, or zero
1870*54e60f84SAndroid Build Coastguard Worker  */
1871*54e60f84SAndroid Build Coastguard Worker VAStatus
1872*54e60f84SAndroid Build Coastguard Worker vaCreateSurfaces(
1873*54e60f84SAndroid Build Coastguard Worker     VADisplay           dpy,
1874*54e60f84SAndroid Build Coastguard Worker     unsigned int        format,
1875*54e60f84SAndroid Build Coastguard Worker     unsigned int        width,
1876*54e60f84SAndroid Build Coastguard Worker     unsigned int        height,
1877*54e60f84SAndroid Build Coastguard Worker     VASurfaceID        *surfaces,
1878*54e60f84SAndroid Build Coastguard Worker     unsigned int        num_surfaces,
1879*54e60f84SAndroid Build Coastguard Worker     VASurfaceAttrib    *attrib_list,
1880*54e60f84SAndroid Build Coastguard Worker     unsigned int        num_attribs
1881*54e60f84SAndroid Build Coastguard Worker );
1882*54e60f84SAndroid Build Coastguard Worker 
1883*54e60f84SAndroid Build Coastguard Worker /**
1884*54e60f84SAndroid Build Coastguard Worker  * vaDestroySurfaces - Destroy resources associated with surfaces.
1885*54e60f84SAndroid Build Coastguard Worker  *  Surfaces can only be destroyed after all contexts using these surfaces have been
1886*54e60f84SAndroid Build Coastguard Worker  *  destroyed.
1887*54e60f84SAndroid Build Coastguard Worker  *  dpy: display
1888*54e60f84SAndroid Build Coastguard Worker  *  surfaces: array of surfaces to destroy
1889*54e60f84SAndroid Build Coastguard Worker  *  num_surfaces: number of surfaces in the array to be destroyed.
1890*54e60f84SAndroid Build Coastguard Worker  */
1891*54e60f84SAndroid Build Coastguard Worker VAStatus vaDestroySurfaces(
1892*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
1893*54e60f84SAndroid Build Coastguard Worker     VASurfaceID *surfaces,
1894*54e60f84SAndroid Build Coastguard Worker     int num_surfaces
1895*54e60f84SAndroid Build Coastguard Worker );
1896*54e60f84SAndroid Build Coastguard Worker 
1897*54e60f84SAndroid Build Coastguard Worker #define VA_PROGRESSIVE 0x1
1898*54e60f84SAndroid Build Coastguard Worker /**
1899*54e60f84SAndroid Build Coastguard Worker  * vaCreateContext - Create a context
1900*54e60f84SAndroid Build Coastguard Worker  *  dpy: display
1901*54e60f84SAndroid Build Coastguard Worker  *  config_id: configuration for the context
1902*54e60f84SAndroid Build Coastguard Worker  *  picture_width: coded picture width
1903*54e60f84SAndroid Build Coastguard Worker  *  picture_height: coded picture height
1904*54e60f84SAndroid Build Coastguard Worker  *  flag: any combination of the following:
1905*54e60f84SAndroid Build Coastguard Worker  *    VA_PROGRESSIVE (only progressive frame pictures in the sequence when set)
1906*54e60f84SAndroid Build Coastguard Worker  *  render_targets: a hint for render targets (surfaces) tied to the context
1907*54e60f84SAndroid Build Coastguard Worker  *  num_render_targets: number of render targets in the above array
1908*54e60f84SAndroid Build Coastguard Worker  *  context: created context id upon return
1909*54e60f84SAndroid Build Coastguard Worker  */
1910*54e60f84SAndroid Build Coastguard Worker VAStatus vaCreateContext(
1911*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
1912*54e60f84SAndroid Build Coastguard Worker     VAConfigID config_id,
1913*54e60f84SAndroid Build Coastguard Worker     int picture_width,
1914*54e60f84SAndroid Build Coastguard Worker     int picture_height,
1915*54e60f84SAndroid Build Coastguard Worker     int flag,
1916*54e60f84SAndroid Build Coastguard Worker     VASurfaceID *render_targets,
1917*54e60f84SAndroid Build Coastguard Worker     int num_render_targets,
1918*54e60f84SAndroid Build Coastguard Worker     VAContextID *context        /* out */
1919*54e60f84SAndroid Build Coastguard Worker );
1920*54e60f84SAndroid Build Coastguard Worker 
1921*54e60f84SAndroid Build Coastguard Worker /**
1922*54e60f84SAndroid Build Coastguard Worker  * vaDestroyContext - Destroy a context
1923*54e60f84SAndroid Build Coastguard Worker  *  dpy: display
1924*54e60f84SAndroid Build Coastguard Worker  *  context: context to be destroyed
1925*54e60f84SAndroid Build Coastguard Worker  */
1926*54e60f84SAndroid Build Coastguard Worker VAStatus vaDestroyContext(
1927*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
1928*54e60f84SAndroid Build Coastguard Worker     VAContextID context
1929*54e60f84SAndroid Build Coastguard Worker );
1930*54e60f84SAndroid Build Coastguard Worker 
1931*54e60f84SAndroid Build Coastguard Worker //Multi-frame context
1932*54e60f84SAndroid Build Coastguard Worker typedef VAGenericID VAMFContextID;
1933*54e60f84SAndroid Build Coastguard Worker /**
1934*54e60f84SAndroid Build Coastguard Worker  * vaCreateMFContext - Create a multi-frame context
1935*54e60f84SAndroid Build Coastguard Worker  *  interface encapsulating common for all streams memory objects and structures
1936*54e60f84SAndroid Build Coastguard Worker  *  required for single GPU task submission from several VAContextID's.
1937*54e60f84SAndroid Build Coastguard Worker  *  Allocation: This call only creates an instance, doesn't allocate any additional memory.
1938*54e60f84SAndroid Build Coastguard Worker  *  Support identification: Application can identify multi-frame feature support by ability
1939*54e60f84SAndroid Build Coastguard Worker  *  to create multi-frame context. If driver supports multi-frame - call successful,
1940*54e60f84SAndroid Build Coastguard Worker  *  mf_context != NULL and VAStatus = VA_STATUS_SUCCESS, otherwise if multi-frame processing
1941*54e60f84SAndroid Build Coastguard Worker  *  not supported driver returns VA_STATUS_ERROR_UNIMPLEMENTED and mf_context = NULL.
1942*54e60f84SAndroid Build Coastguard Worker  *  return values:
1943*54e60f84SAndroid Build Coastguard Worker  *  VA_STATUS_SUCCESS - operation successful.
1944*54e60f84SAndroid Build Coastguard Worker  *  VA_STATUS_ERROR_UNIMPLEMENTED - no support for multi-frame.
1945*54e60f84SAndroid Build Coastguard Worker  *  dpy: display adapter.
1946*54e60f84SAndroid Build Coastguard Worker  *  mf_context: Multi-Frame context encapsulating all associated context
1947*54e60f84SAndroid Build Coastguard Worker  *  for multi-frame submission.
1948*54e60f84SAndroid Build Coastguard Worker  */
1949*54e60f84SAndroid Build Coastguard Worker VAStatus vaCreateMFContext(
1950*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
1951*54e60f84SAndroid Build Coastguard Worker     VAMFContextID *mf_context    /* out */
1952*54e60f84SAndroid Build Coastguard Worker );
1953*54e60f84SAndroid Build Coastguard Worker 
1954*54e60f84SAndroid Build Coastguard Worker /**
1955*54e60f84SAndroid Build Coastguard Worker  * vaMFAddContext - Provide ability to associate each context used for
1956*54e60f84SAndroid Build Coastguard Worker  *  Multi-Frame submission and common Multi-Frame context.
1957*54e60f84SAndroid Build Coastguard Worker  *  Try to add context to understand if it is supported.
1958*54e60f84SAndroid Build Coastguard Worker  *  Allocation: this call allocates and/or reallocates all memory objects
1959*54e60f84SAndroid Build Coastguard Worker  *  common for all contexts associated with particular Multi-Frame context.
1960*54e60f84SAndroid Build Coastguard Worker  *  All memory required for each context(pixel buffers, internal driver
1961*54e60f84SAndroid Build Coastguard Worker  *  buffers required for processing) allocated during standard vaCreateContext call for each context.
1962*54e60f84SAndroid Build Coastguard Worker  *  Runtime dependency - if current implementation doesn't allow to run different entry points/profile,
1963*54e60f84SAndroid Build Coastguard Worker  *  first context added will set entry point/profile for whole Multi-Frame context,
1964*54e60f84SAndroid Build Coastguard Worker  *  all other entry points and profiles can be rejected to be added.
1965*54e60f84SAndroid Build Coastguard Worker  *  Return values:
1966*54e60f84SAndroid Build Coastguard Worker  *  VA_STATUS_SUCCESS - operation successful, context was added.
1967*54e60f84SAndroid Build Coastguard Worker  *  VA_STATUS_ERROR_OPERATION_FAILED - something unexpected happened - application have to close
1968*54e60f84SAndroid Build Coastguard Worker  *  current mf_context and associated contexts and start working with new ones.
1969*54e60f84SAndroid Build Coastguard Worker  *  VA_STATUS_ERROR_INVALID_CONTEXT - ContextID is invalid, means:
1970*54e60f84SAndroid Build Coastguard Worker  *  1 - mf_context is not valid context or
1971*54e60f84SAndroid Build Coastguard Worker  *  2 - driver can't suport different VAEntrypoint or VAProfile simultaneosly
1972*54e60f84SAndroid Build Coastguard Worker  *  and current context contradicts with previously added, application can continue with current mf_context
1973*54e60f84SAndroid Build Coastguard Worker  *  and other contexts passed this call, rejected context can continue work in stand-alone
1974*54e60f84SAndroid Build Coastguard Worker  *  mode or other mf_context.
1975*54e60f84SAndroid Build Coastguard Worker  *  VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT - particular context being added was created with with
1976*54e60f84SAndroid Build Coastguard Worker  *  unsupported VAEntrypoint. Application can continue with current mf_context
1977*54e60f84SAndroid Build Coastguard Worker  *  and other contexts passed this call, rejected context can continue work in stand-alone
1978*54e60f84SAndroid Build Coastguard Worker  *  mode.
1979*54e60f84SAndroid Build Coastguard Worker  *  VA_STATUS_ERROR_UNSUPPORTED_PROFILE - Current context with Particular VAEntrypoint is supported
1980*54e60f84SAndroid Build Coastguard Worker  *  but VAProfile is not supported. Application can continue with current mf_context
1981*54e60f84SAndroid Build Coastguard Worker  *  and other contexts passed this call, rejected context can continue work in stand-alone
1982*54e60f84SAndroid Build Coastguard Worker  *  mode.
1983*54e60f84SAndroid Build Coastguard Worker  *  dpy: display adapter.
1984*54e60f84SAndroid Build Coastguard Worker  *  context: context being associated with Multi-Frame context.
1985*54e60f84SAndroid Build Coastguard Worker  *  mf_context: - multi-frame context used to associate contexts for multi-frame submission.
1986*54e60f84SAndroid Build Coastguard Worker  */
1987*54e60f84SAndroid Build Coastguard Worker VAStatus vaMFAddContext(
1988*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
1989*54e60f84SAndroid Build Coastguard Worker     VAMFContextID mf_context,
1990*54e60f84SAndroid Build Coastguard Worker     VAContextID context
1991*54e60f84SAndroid Build Coastguard Worker );
1992*54e60f84SAndroid Build Coastguard Worker 
1993*54e60f84SAndroid Build Coastguard Worker /**
1994*54e60f84SAndroid Build Coastguard Worker  * vaMFReleaseContext - Removes context from multi-frame and
1995*54e60f84SAndroid Build Coastguard Worker  *  association with multi-frame context.
1996*54e60f84SAndroid Build Coastguard Worker  *  After association removed vaEndPicture will submit tasks, but not vaMFSubmit.
1997*54e60f84SAndroid Build Coastguard Worker  *  Return values:
1998*54e60f84SAndroid Build Coastguard Worker  *  VA_STATUS_SUCCESS - operation successful, context was removed.
1999*54e60f84SAndroid Build Coastguard Worker  *  VA_STATUS_ERROR_OPERATION_FAILED - something unexpected happened.
2000*54e60f84SAndroid Build Coastguard Worker  *  application need to destroy this VAMFContextID and all assotiated VAContextID
2001*54e60f84SAndroid Build Coastguard Worker  *  dpy: display
2002*54e60f84SAndroid Build Coastguard Worker  *  mf_context: VAMFContextID where context is added
2003*54e60f84SAndroid Build Coastguard Worker  *  context: VAContextID to be added
2004*54e60f84SAndroid Build Coastguard Worker  */
2005*54e60f84SAndroid Build Coastguard Worker VAStatus vaMFReleaseContext(
2006*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
2007*54e60f84SAndroid Build Coastguard Worker     VAMFContextID mf_context,
2008*54e60f84SAndroid Build Coastguard Worker     VAContextID context
2009*54e60f84SAndroid Build Coastguard Worker );
2010*54e60f84SAndroid Build Coastguard Worker 
2011*54e60f84SAndroid Build Coastguard Worker /**
2012*54e60f84SAndroid Build Coastguard Worker  * Buffers
2013*54e60f84SAndroid Build Coastguard Worker  * Buffers are used to pass various types of data from the
2014*54e60f84SAndroid Build Coastguard Worker  * client to the server. The server maintains a data store
2015*54e60f84SAndroid Build Coastguard Worker  * for each buffer created, and the client idenfies a buffer
2016*54e60f84SAndroid Build Coastguard Worker  * through a unique buffer id assigned by the server.
2017*54e60f84SAndroid Build Coastguard Worker  */
2018*54e60f84SAndroid Build Coastguard Worker 
2019*54e60f84SAndroid Build Coastguard Worker typedef VAGenericID VABufferID;
2020*54e60f84SAndroid Build Coastguard Worker 
2021*54e60f84SAndroid Build Coastguard Worker typedef enum {
2022*54e60f84SAndroid Build Coastguard Worker     VAPictureParameterBufferType    = 0,
2023*54e60f84SAndroid Build Coastguard Worker     VAIQMatrixBufferType        = 1,
2024*54e60f84SAndroid Build Coastguard Worker     VABitPlaneBufferType        = 2,
2025*54e60f84SAndroid Build Coastguard Worker     VASliceGroupMapBufferType       = 3,
2026*54e60f84SAndroid Build Coastguard Worker     VASliceParameterBufferType      = 4,
2027*54e60f84SAndroid Build Coastguard Worker     VASliceDataBufferType       = 5,
2028*54e60f84SAndroid Build Coastguard Worker     VAMacroblockParameterBufferType = 6,
2029*54e60f84SAndroid Build Coastguard Worker     VAResidualDataBufferType        = 7,
2030*54e60f84SAndroid Build Coastguard Worker     VADeblockingParameterBufferType = 8,
2031*54e60f84SAndroid Build Coastguard Worker     VAImageBufferType           = 9,
2032*54e60f84SAndroid Build Coastguard Worker     VAProtectedSliceDataBufferType  = 10,
2033*54e60f84SAndroid Build Coastguard Worker     VAQMatrixBufferType                 = 11,
2034*54e60f84SAndroid Build Coastguard Worker     VAHuffmanTableBufferType            = 12,
2035*54e60f84SAndroid Build Coastguard Worker     VAProbabilityBufferType             = 13,
2036*54e60f84SAndroid Build Coastguard Worker 
2037*54e60f84SAndroid Build Coastguard Worker     /* Following are encode buffer types */
2038*54e60f84SAndroid Build Coastguard Worker     VAEncCodedBufferType        = 21,
2039*54e60f84SAndroid Build Coastguard Worker     VAEncSequenceParameterBufferType    = 22,
2040*54e60f84SAndroid Build Coastguard Worker     VAEncPictureParameterBufferType = 23,
2041*54e60f84SAndroid Build Coastguard Worker     VAEncSliceParameterBufferType   = 24,
2042*54e60f84SAndroid Build Coastguard Worker     VAEncPackedHeaderParameterBufferType = 25,
2043*54e60f84SAndroid Build Coastguard Worker     VAEncPackedHeaderDataBufferType     = 26,
2044*54e60f84SAndroid Build Coastguard Worker     VAEncMiscParameterBufferType    = 27,
2045*54e60f84SAndroid Build Coastguard Worker     VAEncMacroblockParameterBufferType  = 28,
2046*54e60f84SAndroid Build Coastguard Worker     VAEncMacroblockMapBufferType        = 29,
2047*54e60f84SAndroid Build Coastguard Worker 
2048*54e60f84SAndroid Build Coastguard Worker     /**
2049*54e60f84SAndroid Build Coastguard Worker      * \brief Encoding QP buffer
2050*54e60f84SAndroid Build Coastguard Worker      *
2051*54e60f84SAndroid Build Coastguard Worker      * This buffer contains QP per MB for encoding. Currently
2052*54e60f84SAndroid Build Coastguard Worker      * VAEncQPBufferH264 is defined for H.264 encoding, see
2053*54e60f84SAndroid Build Coastguard Worker      * #VAEncQPBufferH264 for details
2054*54e60f84SAndroid Build Coastguard Worker      */
2055*54e60f84SAndroid Build Coastguard Worker     VAEncQPBufferType                   = 30,
2056*54e60f84SAndroid Build Coastguard Worker     /* Following are video processing buffer types */
2057*54e60f84SAndroid Build Coastguard Worker     /**
2058*54e60f84SAndroid Build Coastguard Worker      * \brief Video processing pipeline parameter buffer.
2059*54e60f84SAndroid Build Coastguard Worker      *
2060*54e60f84SAndroid Build Coastguard Worker      * This buffer describes the video processing pipeline. See
2061*54e60f84SAndroid Build Coastguard Worker      * #VAProcPipelineParameterBuffer for details.
2062*54e60f84SAndroid Build Coastguard Worker      */
2063*54e60f84SAndroid Build Coastguard Worker     VAProcPipelineParameterBufferType   = 41,
2064*54e60f84SAndroid Build Coastguard Worker     /**
2065*54e60f84SAndroid Build Coastguard Worker      * \brief Video filter parameter buffer.
2066*54e60f84SAndroid Build Coastguard Worker      *
2067*54e60f84SAndroid Build Coastguard Worker      * This buffer describes the video filter parameters. All buffers
2068*54e60f84SAndroid Build Coastguard Worker      * inherit from #VAProcFilterParameterBufferBase, thus including
2069*54e60f84SAndroid Build Coastguard Worker      * a unique filter buffer type.
2070*54e60f84SAndroid Build Coastguard Worker      *
2071*54e60f84SAndroid Build Coastguard Worker      * The default buffer used by most filters is #VAProcFilterParameterBuffer.
2072*54e60f84SAndroid Build Coastguard Worker      * Filters requiring advanced parameters include, but are not limited to,
2073*54e60f84SAndroid Build Coastguard Worker      * deinterlacing (#VAProcFilterParameterBufferDeinterlacing),
2074*54e60f84SAndroid Build Coastguard Worker      * color balance (#VAProcFilterParameterBufferColorBalance), etc.
2075*54e60f84SAndroid Build Coastguard Worker      */
2076*54e60f84SAndroid Build Coastguard Worker     VAProcFilterParameterBufferType     = 42,
2077*54e60f84SAndroid Build Coastguard Worker     /**
2078*54e60f84SAndroid Build Coastguard Worker      * \brief FEI specific buffer types
2079*54e60f84SAndroid Build Coastguard Worker      */
2080*54e60f84SAndroid Build Coastguard Worker     VAEncFEIMVBufferType                = 43,
2081*54e60f84SAndroid Build Coastguard Worker     VAEncFEIMBCodeBufferType            = 44,
2082*54e60f84SAndroid Build Coastguard Worker     VAEncFEIDistortionBufferType        = 45,
2083*54e60f84SAndroid Build Coastguard Worker     VAEncFEIMBControlBufferType         = 46,
2084*54e60f84SAndroid Build Coastguard Worker     VAEncFEIMVPredictorBufferType       = 47,
2085*54e60f84SAndroid Build Coastguard Worker     VAStatsStatisticsParameterBufferType = 48,
2086*54e60f84SAndroid Build Coastguard Worker     /** \brief Statistics output for VAEntrypointStats progressive and top field of interlaced case*/
2087*54e60f84SAndroid Build Coastguard Worker     VAStatsStatisticsBufferType         = 49,
2088*54e60f84SAndroid Build Coastguard Worker     /** \brief Statistics output for VAEntrypointStats bottom field of interlaced case*/
2089*54e60f84SAndroid Build Coastguard Worker     VAStatsStatisticsBottomFieldBufferType = 50,
2090*54e60f84SAndroid Build Coastguard Worker     VAStatsMVBufferType                 = 51,
2091*54e60f84SAndroid Build Coastguard Worker     VAStatsMVPredictorBufferType        = 52,
2092*54e60f84SAndroid Build Coastguard Worker     /** Force MB's to be non skip for encode.it's per-mb control buffer, The width of the MB map
2093*54e60f84SAndroid Build Coastguard Worker      * Surface is (width of the Picture in MB unit) * 1 byte, multiple of 64 bytes.
2094*54e60f84SAndroid Build Coastguard Worker      * The height is (height of the picture in MB unit). The picture is either
2095*54e60f84SAndroid Build Coastguard Worker      * frame or non-interleaved top or bottom field.  If the application provides this
2096*54e60f84SAndroid Build Coastguard Worker      *surface, it will override the "skipCheckDisable" setting in VAEncMiscParameterEncQuality.
2097*54e60f84SAndroid Build Coastguard Worker      */
2098*54e60f84SAndroid Build Coastguard Worker     VAEncMacroblockDisableSkipMapBufferType = 53,
2099*54e60f84SAndroid Build Coastguard Worker     /**
2100*54e60f84SAndroid Build Coastguard Worker      * \brief HEVC FEI CTB level cmd buffer
2101*54e60f84SAndroid Build Coastguard Worker      * it is CTB level information for future usage.
2102*54e60f84SAndroid Build Coastguard Worker      */
2103*54e60f84SAndroid Build Coastguard Worker     VAEncFEICTBCmdBufferType            = 54,
2104*54e60f84SAndroid Build Coastguard Worker     /**
2105*54e60f84SAndroid Build Coastguard Worker      * \brief HEVC FEI CU level data buffer
2106*54e60f84SAndroid Build Coastguard Worker      * it's CTB level information for future usage
2107*54e60f84SAndroid Build Coastguard Worker      */
2108*54e60f84SAndroid Build Coastguard Worker     VAEncFEICURecordBufferType          = 55,
2109*54e60f84SAndroid Build Coastguard Worker     /** decode stream out buffer, intermedia data of decode, it may include MV, MB mode etc.
2110*54e60f84SAndroid Build Coastguard Worker       * it can be used to detect motion and analyze the frame contain  */
2111*54e60f84SAndroid Build Coastguard Worker     VADecodeStreamoutBufferType             = 56,
2112*54e60f84SAndroid Build Coastguard Worker 
2113*54e60f84SAndroid Build Coastguard Worker     /** \brief HEVC Decoding Subset Parameter buffer type
2114*54e60f84SAndroid Build Coastguard Worker      *
2115*54e60f84SAndroid Build Coastguard Worker      * The subsets parameter buffer is concatenation with one or multiple
2116*54e60f84SAndroid Build Coastguard Worker      * subset entry point offsets. All the offset values are layed out one
2117*54e60f84SAndroid Build Coastguard Worker      * by one according to slice order with first slice segment first, second
2118*54e60f84SAndroid Build Coastguard Worker      * slice segment second, etc... The entry number is indicated by parameter
2119*54e60f84SAndroid Build Coastguard Worker      * \ref num_entry_point_offsets. And the first entry position of the entry
2120*54e60f84SAndroid Build Coastguard Worker      * point offsets for any slice segment is indicated by parameter
2121*54e60f84SAndroid Build Coastguard Worker      * entry_offset_to_subset_array in VAPictureParameterBufferHEVC data structure.
2122*54e60f84SAndroid Build Coastguard Worker      */
2123*54e60f84SAndroid Build Coastguard Worker     VASubsetsParameterBufferType        = 57,
2124*54e60f84SAndroid Build Coastguard Worker     /** \brief adjust context parameters dynamically
2125*54e60f84SAndroid Build Coastguard Worker      *
2126*54e60f84SAndroid Build Coastguard Worker      * this parameter is used to update context parameters, detail parameter is in
2127*54e60f84SAndroid Build Coastguard Worker      *  \c VAContextParameterUpdateBuffer
2128*54e60f84SAndroid Build Coastguard Worker      */
2129*54e60f84SAndroid Build Coastguard Worker     VAContextParameterUpdateBufferType  = 58,
2130*54e60f84SAndroid Build Coastguard Worker     /**
2131*54e60f84SAndroid Build Coastguard Worker      * \brief Protected session execution buffer type
2132*54e60f84SAndroid Build Coastguard Worker      *
2133*54e60f84SAndroid Build Coastguard Worker      * It's for TEE execution usage (vaProtectedSessionExecute()). The buffer structure is in
2134*54e60f84SAndroid Build Coastguard Worker      * \c VAProtectedSessionExecuteBuffer
2135*54e60f84SAndroid Build Coastguard Worker      */
2136*54e60f84SAndroid Build Coastguard Worker     VAProtectedSessionExecuteBufferType = 59,
2137*54e60f84SAndroid Build Coastguard Worker 
2138*54e60f84SAndroid Build Coastguard Worker     /** \brief Encryption parameters buffer for protected content session.
2139*54e60f84SAndroid Build Coastguard Worker      *
2140*54e60f84SAndroid Build Coastguard Worker      * Refer to \c VAEncryptionParameters
2141*54e60f84SAndroid Build Coastguard Worker     */
2142*54e60f84SAndroid Build Coastguard Worker     VAEncryptionParameterBufferType = 60,
2143*54e60f84SAndroid Build Coastguard Worker 
2144*54e60f84SAndroid Build Coastguard Worker     /**
2145*54e60f84SAndroid Build Coastguard Worker      * \brief Encoding delta QP per block buffer
2146*54e60f84SAndroid Build Coastguard Worker      *
2147*54e60f84SAndroid Build Coastguard Worker      * This buffer only could be created and accepted
2148*54e60f84SAndroid Build Coastguard Worker      * when \c VAConfigAttribValEncPerBlockControl delta_qp_support == 1.
2149*54e60f84SAndroid Build Coastguard Worker      * This input buffer contains delta QP per block for encoding.
2150*54e60f84SAndroid Build Coastguard Worker      * The supported size of delta QP block and the size of delta QP
2151*54e60f84SAndroid Build Coastguard Worker      * must be quried from \c VAConfigAttribValEncPerBlockControl.
2152*54e60f84SAndroid Build Coastguard Worker      */
2153*54e60f84SAndroid Build Coastguard Worker     VAEncDeltaQpPerBlockBufferType   = 61,
2154*54e60f84SAndroid Build Coastguard Worker 
2155*54e60f84SAndroid Build Coastguard Worker     /**
2156*54e60f84SAndroid Build Coastguard Worker      * \brief VVC ALF data buffer
2157*54e60f84SAndroid Build Coastguard Worker      *
2158*54e60f84SAndroid Build Coastguard Worker      * Refer to \c VAAlfDataVVC
2159*54e60f84SAndroid Build Coastguard Worker      */
2160*54e60f84SAndroid Build Coastguard Worker     VAAlfBufferType = 62,
2161*54e60f84SAndroid Build Coastguard Worker     /**
2162*54e60f84SAndroid Build Coastguard Worker      * \brief VVC LMCS data buffer
2163*54e60f84SAndroid Build Coastguard Worker      *
2164*54e60f84SAndroid Build Coastguard Worker      * Refer to \c VALmcsDataVVC
2165*54e60f84SAndroid Build Coastguard Worker      */
2166*54e60f84SAndroid Build Coastguard Worker     VALmcsBufferType = 63,
2167*54e60f84SAndroid Build Coastguard Worker     /**
2168*54e60f84SAndroid Build Coastguard Worker      * \brief VVC SubPic data buffer
2169*54e60f84SAndroid Build Coastguard Worker      *
2170*54e60f84SAndroid Build Coastguard Worker      * Refer to \c VASubPicVVC
2171*54e60f84SAndroid Build Coastguard Worker      */
2172*54e60f84SAndroid Build Coastguard Worker     VASubPicBufferType = 64,
2173*54e60f84SAndroid Build Coastguard Worker     /**
2174*54e60f84SAndroid Build Coastguard Worker      * \brief VVC Tile Dimension data buffer
2175*54e60f84SAndroid Build Coastguard Worker      *
2176*54e60f84SAndroid Build Coastguard Worker      * Data buffer of tile widths and heights, with each element formatted as uint16_t
2177*54e60f84SAndroid Build Coastguard Worker      */
2178*54e60f84SAndroid Build Coastguard Worker     VATileBufferType = 65,
2179*54e60f84SAndroid Build Coastguard Worker     /**
2180*54e60f84SAndroid Build Coastguard Worker      * \brief VVC Slice Structure data buffer
2181*54e60f84SAndroid Build Coastguard Worker      *
2182*54e60f84SAndroid Build Coastguard Worker      * Refer to \c VASliceStructVVC
2183*54e60f84SAndroid Build Coastguard Worker      */
2184*54e60f84SAndroid Build Coastguard Worker     VASliceStructBufferType = 66,
2185*54e60f84SAndroid Build Coastguard Worker 
2186*54e60f84SAndroid Build Coastguard Worker     VABufferTypeMax
2187*54e60f84SAndroid Build Coastguard Worker } VABufferType;
2188*54e60f84SAndroid Build Coastguard Worker 
2189*54e60f84SAndroid Build Coastguard Worker /** \brief update the context parameter
2190*54e60f84SAndroid Build Coastguard Worker  * this structure is used to update context parameters, such as priority of the context
2191*54e60f84SAndroid Build Coastguard Worker  * backend driver should keep the parameter unchanged if there no new
2192*54e60f84SAndroid Build Coastguard Worker  * parameter updated.
2193*54e60f84SAndroid Build Coastguard Worker  */
2194*54e60f84SAndroid Build Coastguard Worker typedef struct _VAContextParameterUpdateBuffer {
2195*54e60f84SAndroid Build Coastguard Worker     union {
2196*54e60f84SAndroid Build Coastguard Worker         struct {
2197*54e60f84SAndroid Build Coastguard Worker             /** \brief indicate whether context priority changed */
2198*54e60f84SAndroid Build Coastguard Worker             uint32_t context_priority_update : 1;
2199*54e60f84SAndroid Build Coastguard Worker             /** \brief Reserved bits for future use, must be zero */
2200*54e60f84SAndroid Build Coastguard Worker             uint32_t reserved                : 31;
2201*54e60f84SAndroid Build Coastguard Worker         } bits;
2202*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
2203*54e60f84SAndroid Build Coastguard Worker     } flags;
2204*54e60f84SAndroid Build Coastguard Worker     /** \brief task/context priority */
2205*54e60f84SAndroid Build Coastguard Worker     VAConfigAttribValContextPriority context_priority;
2206*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
2207*54e60f84SAndroid Build Coastguard Worker     uint32_t reserved[VA_PADDING_MEDIUM];
2208*54e60f84SAndroid Build Coastguard Worker } VAContextParameterUpdateBuffer;
2209*54e60f84SAndroid Build Coastguard Worker 
2210*54e60f84SAndroid Build Coastguard Worker /**
2211*54e60f84SAndroid Build Coastguard Worker  * These ENCRYPTION_TYPEs are used for the attribute values for
2212*54e60f84SAndroid Build Coastguard Worker  * \c VAConfigAttribEncryption and for encryption_type in
2213*54e60f84SAndroid Build Coastguard Worker  * VAEncryptionParameters.
2214*54e60f84SAndroid Build Coastguard Worker  *
2215*54e60f84SAndroid Build Coastguard Worker  * When used for \c VAConfigAttribEncryption, it be used via
2216*54e60f84SAndroid Build Coastguard Worker  * vaQueryConfigEntrypoints to check which type are supported for specific
2217*54e60f84SAndroid Build Coastguard Worker  * profile or not.
2218*54e60f84SAndroid Build Coastguard Worker  *
2219*54e60f84SAndroid Build Coastguard Worker  * When used for encryption_type in VAEncryptionParameters, it tells driver
2220*54e60f84SAndroid Build Coastguard Worker  * the parameters in VAEncryptionParameters are used for which encryption type.
2221*54e60f84SAndroid Build Coastguard Worker  */
2222*54e60f84SAndroid Build Coastguard Worker #define VA_ENCRYPTION_TYPE_FULLSAMPLE_CTR       0x00000001  /* AES CTR fullsample */
2223*54e60f84SAndroid Build Coastguard Worker #define VA_ENCRYPTION_TYPE_FULLSAMPLE_CBC       0x00000002  /* AES CBC fullsample */
2224*54e60f84SAndroid Build Coastguard Worker #define VA_ENCRYPTION_TYPE_SUBSAMPLE_CTR        0x00000004  /* AES CTR fullsample */
2225*54e60f84SAndroid Build Coastguard Worker #define VA_ENCRYPTION_TYPE_SUBSAMPLE_CBC        0x00000008  /* AES CBC fullsample */
2226*54e60f84SAndroid Build Coastguard Worker 
2227*54e60f84SAndroid Build Coastguard Worker /** \brief structure for encrypted segment info. */
2228*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncryptionSegmentInfo {
2229*54e60f84SAndroid Build Coastguard Worker     /** \brief  The offset relative to the start of the bitstream input in
2230*54e60f84SAndroid Build Coastguard Worker      *  bytes of the start of the segment */
2231*54e60f84SAndroid Build Coastguard Worker     uint32_t segment_start_offset;
2232*54e60f84SAndroid Build Coastguard Worker     /** \brief  The length of the segments in bytes */
2233*54e60f84SAndroid Build Coastguard Worker     uint32_t segment_length;
2234*54e60f84SAndroid Build Coastguard Worker     /** \brief  The length in bytes of the remainder of an incomplete block
2235*54e60f84SAndroid Build Coastguard Worker      *  from a previous segment*/
2236*54e60f84SAndroid Build Coastguard Worker     uint32_t partial_aes_block_size;
2237*54e60f84SAndroid Build Coastguard Worker     /** \brief  The length in bytes of the initial clear data */
2238*54e60f84SAndroid Build Coastguard Worker     uint32_t init_byte_length;
2239*54e60f84SAndroid Build Coastguard Worker     /** \brief  This will be AES counter for secure decode and secure encode
2240*54e60f84SAndroid Build Coastguard Worker      *  when numSegments equals 1, valid size is specified by
2241*54e60f84SAndroid Build Coastguard Worker      * \c key_blob_size */
2242*54e60f84SAndroid Build Coastguard Worker     uint8_t aes_cbc_iv_or_ctr[64];
2243*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
2244*54e60f84SAndroid Build Coastguard Worker     uint32_t va_reserved[VA_PADDING_MEDIUM];
2245*54e60f84SAndroid Build Coastguard Worker } VAEncryptionSegmentInfo;
2246*54e60f84SAndroid Build Coastguard Worker 
2247*54e60f84SAndroid Build Coastguard Worker /** \brief Encryption parameters buffer for VAEncryptionParameterBufferType */
2248*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncryptionParameters {
2249*54e60f84SAndroid Build Coastguard Worker     /** \brief Encryption type, refer to \c VA_ENCRYPTION_TYPE_FULLSAMPLE_CTR,
2250*54e60f84SAndroid Build Coastguard Worker      * \c VA_ENCRYPTION_TYPE_FULLSAMPLE_CBC, \c VA_ENCRYPTION_TYPE_SUBSAMPLE_CTR,
2251*54e60f84SAndroid Build Coastguard Worker      * or \c VA_ENCRYPTION_TYPE_SUBSAMPLE_CBC */
2252*54e60f84SAndroid Build Coastguard Worker     uint32_t encryption_type;
2253*54e60f84SAndroid Build Coastguard Worker     /** \brief The number of sengments */
2254*54e60f84SAndroid Build Coastguard Worker     uint32_t num_segments;
2255*54e60f84SAndroid Build Coastguard Worker     /** \brief Pointer of segments */
2256*54e60f84SAndroid Build Coastguard Worker     VAEncryptionSegmentInfo *segment_info;
2257*54e60f84SAndroid Build Coastguard Worker     /** \brief The status report index reserved for CENC fullsample workload.
2258*54e60f84SAndroid Build Coastguard Worker      * The related structures and definitions are vendor specific.
2259*54e60f84SAndroid Build Coastguard Worker     */
2260*54e60f84SAndroid Build Coastguard Worker     uint32_t status_report_index;
2261*54e60f84SAndroid Build Coastguard Worker     /** \brief CENC counter length */
2262*54e60f84SAndroid Build Coastguard Worker     uint32_t size_of_length;
2263*54e60f84SAndroid Build Coastguard Worker     /** \brief Wrapped decrypt blob (Snd)kb, valid size is specified by
2264*54e60f84SAndroid Build Coastguard Worker      * \c key_blob_size */
2265*54e60f84SAndroid Build Coastguard Worker     uint8_t wrapped_decrypt_blob[64];
2266*54e60f84SAndroid Build Coastguard Worker     /** \brief Wrapped Key blob info (Sne)kb, valid size is specified by
2267*54e60f84SAndroid Build Coastguard Worker      * \c key_blob_size */
2268*54e60f84SAndroid Build Coastguard Worker     uint8_t wrapped_encrypt_blob[64];
2269*54e60f84SAndroid Build Coastguard Worker     /** \brief key blob size
2270*54e60f84SAndroid Build Coastguard Worker      * It could be \c VA_PC_BLOCK_SIZE_128, \c VA_PC_BLOCK_SIZE_192, or
2271*54e60f84SAndroid Build Coastguard Worker      * \c VA_PC_BLOCK_SIZE_256
2272*54e60f84SAndroid Build Coastguard Worker      */
2273*54e60f84SAndroid Build Coastguard Worker     uint32_t key_blob_size;
2274*54e60f84SAndroid Build Coastguard Worker     /** \brief Indicates the number of 16-byte BLOCKS that are encrypted in any
2275*54e60f84SAndroid Build Coastguard Worker      *  given encrypted region of segments.
2276*54e60f84SAndroid Build Coastguard Worker      *  If this value is zero:
2277*54e60f84SAndroid Build Coastguard Worker      *    1. All bytes in encrypted region of segments are encrypted, i.e. the
2278*54e60f84SAndroid Build Coastguard Worker      *       CENC or CBC1 scheme is being used
2279*54e60f84SAndroid Build Coastguard Worker      *    2. blocks_stripe_clear must also be zero.
2280*54e60f84SAndroid Build Coastguard Worker      *  If this value is non-zero, blocks_stripe_clear must also be non-zero.
2281*54e60f84SAndroid Build Coastguard Worker      */
2282*54e60f84SAndroid Build Coastguard Worker     uint32_t blocks_stripe_encrypted;
2283*54e60f84SAndroid Build Coastguard Worker     /** \brief Indicates the number of 16-byte BLOCKS that are clear in any given
2284*54e60f84SAndroid Build Coastguard Worker      *  encrypted region of segments, as defined by the CENS and CBCS schemes in
2285*54e60f84SAndroid Build Coastguard Worker      *  the common encryption spec.
2286*54e60f84SAndroid Build Coastguard Worker      *  If this value is zero, all bytes in encrypted region of segments are
2287*54e60f84SAndroid Build Coastguard Worker      *  encrypted, i.e. the CENC or CBC1 scheme is being used.
2288*54e60f84SAndroid Build Coastguard Worker      */
2289*54e60f84SAndroid Build Coastguard Worker     uint32_t blocks_stripe_clear;
2290*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
2291*54e60f84SAndroid Build Coastguard Worker     uint32_t va_reserved[VA_PADDING_MEDIUM];
2292*54e60f84SAndroid Build Coastguard Worker } VAEncryptionParameters;
2293*54e60f84SAndroid Build Coastguard Worker 
2294*54e60f84SAndroid Build Coastguard Worker /**
2295*54e60f84SAndroid Build Coastguard Worker  * Processing rate parameter for encode.
2296*54e60f84SAndroid Build Coastguard Worker  */
2297*54e60f84SAndroid Build Coastguard Worker typedef struct _VAProcessingRateParameterEnc {
2298*54e60f84SAndroid Build Coastguard Worker     /** \brief Profile level */
2299*54e60f84SAndroid Build Coastguard Worker     uint8_t         level_idc;
2300*54e60f84SAndroid Build Coastguard Worker     uint8_t         reserved[3];
2301*54e60f84SAndroid Build Coastguard Worker     /** \brief quality level. When set to 0, default quality
2302*54e60f84SAndroid Build Coastguard Worker      * level is used.
2303*54e60f84SAndroid Build Coastguard Worker      */
2304*54e60f84SAndroid Build Coastguard Worker     uint32_t        quality_level;
2305*54e60f84SAndroid Build Coastguard Worker     /** \brief Period between I frames. */
2306*54e60f84SAndroid Build Coastguard Worker     uint32_t        intra_period;
2307*54e60f84SAndroid Build Coastguard Worker     /** \brief Period between I/P frames. */
2308*54e60f84SAndroid Build Coastguard Worker     uint32_t        ip_period;
2309*54e60f84SAndroid Build Coastguard Worker } VAProcessingRateParameterEnc;
2310*54e60f84SAndroid Build Coastguard Worker 
2311*54e60f84SAndroid Build Coastguard Worker /**
2312*54e60f84SAndroid Build Coastguard Worker  * Processing rate parameter for decode.
2313*54e60f84SAndroid Build Coastguard Worker  */
2314*54e60f84SAndroid Build Coastguard Worker typedef struct _VAProcessingRateParameterDec {
2315*54e60f84SAndroid Build Coastguard Worker     /** \brief Profile level */
2316*54e60f84SAndroid Build Coastguard Worker     uint8_t         level_idc;
2317*54e60f84SAndroid Build Coastguard Worker     uint8_t         reserved0[3];
2318*54e60f84SAndroid Build Coastguard Worker     uint32_t        reserved;
2319*54e60f84SAndroid Build Coastguard Worker } VAProcessingRateParameterDec;
2320*54e60f84SAndroid Build Coastguard Worker 
2321*54e60f84SAndroid Build Coastguard Worker typedef struct _VAProcessingRateParameter {
2322*54e60f84SAndroid Build Coastguard Worker     union {
2323*54e60f84SAndroid Build Coastguard Worker         VAProcessingRateParameterEnc proc_buf_enc;
2324*54e60f84SAndroid Build Coastguard Worker         VAProcessingRateParameterDec proc_buf_dec;
2325*54e60f84SAndroid Build Coastguard Worker     };
2326*54e60f84SAndroid Build Coastguard Worker } VAProcessingRateParameter;
2327*54e60f84SAndroid Build Coastguard Worker 
2328*54e60f84SAndroid Build Coastguard Worker /**
2329*54e60f84SAndroid Build Coastguard Worker  * \brief Queries processing rate for the supplied config.
2330*54e60f84SAndroid Build Coastguard Worker  *
2331*54e60f84SAndroid Build Coastguard Worker  * This function queries the processing rate based on parameters in
2332*54e60f84SAndroid Build Coastguard Worker  * \c proc_buf for the given \c config. Upon successful return, the processing
2333*54e60f84SAndroid Build Coastguard Worker  * rate value will be stored in \c processing_rate. Processing rate is
2334*54e60f84SAndroid Build Coastguard Worker  * specified as the number of macroblocks/CTU per second.
2335*54e60f84SAndroid Build Coastguard Worker  *
2336*54e60f84SAndroid Build Coastguard Worker  * If NULL is passed to the \c proc_buf, the default processing rate for the
2337*54e60f84SAndroid Build Coastguard Worker  * given configuration will be returned.
2338*54e60f84SAndroid Build Coastguard Worker  *
2339*54e60f84SAndroid Build Coastguard Worker  * @param[in] dpy               the VA display
2340*54e60f84SAndroid Build Coastguard Worker  * @param[in] config            the config identifying a codec or a video
2341*54e60f84SAndroid Build Coastguard Worker  *     processing pipeline
2342*54e60f84SAndroid Build Coastguard Worker  * @param[in] proc_buf       the buffer that contains the parameters for
2343*54e60f84SAndroid Build Coastguard Worker         either the encode or decode processing rate
2344*54e60f84SAndroid Build Coastguard Worker  * @param[out] processing_rate  processing rate in number of macroblocks per
2345*54e60f84SAndroid Build Coastguard Worker         second constrained by parameters specified in proc_buf
2346*54e60f84SAndroid Build Coastguard Worker  *
2347*54e60f84SAndroid Build Coastguard Worker  */
2348*54e60f84SAndroid Build Coastguard Worker VAStatus
2349*54e60f84SAndroid Build Coastguard Worker vaQueryProcessingRate(
2350*54e60f84SAndroid Build Coastguard Worker     VADisplay           dpy,
2351*54e60f84SAndroid Build Coastguard Worker     VAConfigID          config,
2352*54e60f84SAndroid Build Coastguard Worker     VAProcessingRateParameter *proc_buf,
2353*54e60f84SAndroid Build Coastguard Worker     unsigned int       *processing_rate
2354*54e60f84SAndroid Build Coastguard Worker );
2355*54e60f84SAndroid Build Coastguard Worker 
2356*54e60f84SAndroid Build Coastguard Worker typedef enum {
2357*54e60f84SAndroid Build Coastguard Worker     VAEncMiscParameterTypeFrameRate     = 0,
2358*54e60f84SAndroid Build Coastguard Worker     VAEncMiscParameterTypeRateControl   = 1,
2359*54e60f84SAndroid Build Coastguard Worker     VAEncMiscParameterTypeMaxSliceSize  = 2,
2360*54e60f84SAndroid Build Coastguard Worker     VAEncMiscParameterTypeAIR       = 3,
2361*54e60f84SAndroid Build Coastguard Worker     /** \brief Buffer type used to express a maximum frame size (in bits). */
2362*54e60f84SAndroid Build Coastguard Worker     VAEncMiscParameterTypeMaxFrameSize  = 4,
2363*54e60f84SAndroid Build Coastguard Worker     /** \brief Buffer type used for HRD parameters. */
2364*54e60f84SAndroid Build Coastguard Worker     VAEncMiscParameterTypeHRD           = 5,
2365*54e60f84SAndroid Build Coastguard Worker     VAEncMiscParameterTypeQualityLevel  = 6,
2366*54e60f84SAndroid Build Coastguard Worker     /** \brief Buffer type used for Rolling intra refresh */
2367*54e60f84SAndroid Build Coastguard Worker     VAEncMiscParameterTypeRIR           = 7,
2368*54e60f84SAndroid Build Coastguard Worker     /** \brief Buffer type used for quantization parameters, it's per-sequence parameter*/
2369*54e60f84SAndroid Build Coastguard Worker     VAEncMiscParameterTypeQuantization  = 8,
2370*54e60f84SAndroid Build Coastguard Worker     /** \brief Buffer type used for sending skip frame parameters to the encoder's
2371*54e60f84SAndroid Build Coastguard Worker       * rate control, when the user has externally skipped frames. */
2372*54e60f84SAndroid Build Coastguard Worker     VAEncMiscParameterTypeSkipFrame     = 9,
2373*54e60f84SAndroid Build Coastguard Worker     /** \brief Buffer type used for region-of-interest (ROI) parameters. */
2374*54e60f84SAndroid Build Coastguard Worker     VAEncMiscParameterTypeROI           = 10,
2375*54e60f84SAndroid Build Coastguard Worker     /** \brief Buffer type used to express a maximum frame size (in bytes) settings for multiple pass. */
2376*54e60f84SAndroid Build Coastguard Worker     VAEncMiscParameterTypeMultiPassFrameSize       = 11,
2377*54e60f84SAndroid Build Coastguard Worker     /** \brief Buffer type used for temporal layer structure */
2378*54e60f84SAndroid Build Coastguard Worker     VAEncMiscParameterTypeTemporalLayerStructure   = 12,
2379*54e60f84SAndroid Build Coastguard Worker     /** \brief Buffer type used for dirty region-of-interest (ROI) parameters. */
2380*54e60f84SAndroid Build Coastguard Worker     VAEncMiscParameterTypeDirtyRect      = 13,
2381*54e60f84SAndroid Build Coastguard Worker     /** \brief Buffer type used for parallel BRC parameters. */
2382*54e60f84SAndroid Build Coastguard Worker     VAEncMiscParameterTypeParallelBRC   = 14,
2383*54e60f84SAndroid Build Coastguard Worker     /** \brief Set MB partion mode mask and Half-pel/Quant-pel motion search */
2384*54e60f84SAndroid Build Coastguard Worker     VAEncMiscParameterTypeSubMbPartPel = 15,
2385*54e60f84SAndroid Build Coastguard Worker     /** \brief set encode quality tuning */
2386*54e60f84SAndroid Build Coastguard Worker     VAEncMiscParameterTypeEncQuality = 16,
2387*54e60f84SAndroid Build Coastguard Worker     /** \brief Buffer type used for encoder rounding offset parameters. */
2388*54e60f84SAndroid Build Coastguard Worker     VAEncMiscParameterTypeCustomRoundingControl = 17,
2389*54e60f84SAndroid Build Coastguard Worker     /** \brief Buffer type used for FEI input frame level parameters */
2390*54e60f84SAndroid Build Coastguard Worker     VAEncMiscParameterTypeFEIFrameControl = 18,
2391*54e60f84SAndroid Build Coastguard Worker     /** \brief encode extension buffer, ect. MPEG2 Sequence extenstion data */
2392*54e60f84SAndroid Build Coastguard Worker     VAEncMiscParameterTypeExtensionData = 19
2393*54e60f84SAndroid Build Coastguard Worker } VAEncMiscParameterType;
2394*54e60f84SAndroid Build Coastguard Worker 
2395*54e60f84SAndroid Build Coastguard Worker /** \brief Packed header type. */
2396*54e60f84SAndroid Build Coastguard Worker typedef enum {
2397*54e60f84SAndroid Build Coastguard Worker     /** \brief Packed sequence header. */
2398*54e60f84SAndroid Build Coastguard Worker     VAEncPackedHeaderSequence   = 1,
2399*54e60f84SAndroid Build Coastguard Worker     /** \brief Packed picture header. */
2400*54e60f84SAndroid Build Coastguard Worker     VAEncPackedHeaderPicture    = 2,
2401*54e60f84SAndroid Build Coastguard Worker     /** \brief Packed slice header. */
2402*54e60f84SAndroid Build Coastguard Worker     VAEncPackedHeaderSlice      = 3,
2403*54e60f84SAndroid Build Coastguard Worker     /**
2404*54e60f84SAndroid Build Coastguard Worker      * \brief Packed raw header.
2405*54e60f84SAndroid Build Coastguard Worker      *
2406*54e60f84SAndroid Build Coastguard Worker      * Packed raw data header can be used by the client to insert a header
2407*54e60f84SAndroid Build Coastguard Worker      * into the bitstream data buffer at the point it is passed, the driver
2408*54e60f84SAndroid Build Coastguard Worker      * will handle the raw packed header based on "has_emulation_bytes" field
2409*54e60f84SAndroid Build Coastguard Worker      * in the packed header parameter structure.
2410*54e60f84SAndroid Build Coastguard Worker      */
2411*54e60f84SAndroid Build Coastguard Worker     VAEncPackedHeaderRawData    = 4,
2412*54e60f84SAndroid Build Coastguard Worker     /**
2413*54e60f84SAndroid Build Coastguard Worker      * \brief Misc packed header. See codec-specific definitions.
2414*54e60f84SAndroid Build Coastguard Worker      *
2415*54e60f84SAndroid Build Coastguard Worker      * @deprecated
2416*54e60f84SAndroid Build Coastguard Worker      * This is a deprecated packed header type. All applications can use
2417*54e60f84SAndroid Build Coastguard Worker      * \c VAEncPackedHeaderRawData to insert a codec-specific packed header
2418*54e60f84SAndroid Build Coastguard Worker      */
2419*54e60f84SAndroid Build Coastguard Worker     VAEncPackedHeaderMiscMask va_deprecated_enum  = 0x80000000,
2420*54e60f84SAndroid Build Coastguard Worker } VAEncPackedHeaderType;
2421*54e60f84SAndroid Build Coastguard Worker 
2422*54e60f84SAndroid Build Coastguard Worker /** \brief Packed header parameter. */
2423*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncPackedHeaderParameterBuffer {
2424*54e60f84SAndroid Build Coastguard Worker     /** Type of the packed header buffer. See #VAEncPackedHeaderType. */
2425*54e60f84SAndroid Build Coastguard Worker     uint32_t                type;
2426*54e60f84SAndroid Build Coastguard Worker     /** \brief Size of the #VAEncPackedHeaderDataBuffer in bits. */
2427*54e60f84SAndroid Build Coastguard Worker     uint32_t                bit_length;
2428*54e60f84SAndroid Build Coastguard Worker     /** \brief Flag: buffer contains start code emulation prevention bytes? */
2429*54e60f84SAndroid Build Coastguard Worker     uint8_t               has_emulation_bytes;
2430*54e60f84SAndroid Build Coastguard Worker 
2431*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
2432*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
2433*54e60f84SAndroid Build Coastguard Worker } VAEncPackedHeaderParameterBuffer;
2434*54e60f84SAndroid Build Coastguard Worker 
2435*54e60f84SAndroid Build Coastguard Worker /**
2436*54e60f84SAndroid Build Coastguard Worker  *  For application, e.g. set a new bitrate
2437*54e60f84SAndroid Build Coastguard Worker  *    VABufferID buf_id;
2438*54e60f84SAndroid Build Coastguard Worker  *    VAEncMiscParameterBuffer *misc_param;
2439*54e60f84SAndroid Build Coastguard Worker  *    VAEncMiscParameterRateControl *misc_rate_ctrl;
2440*54e60f84SAndroid Build Coastguard Worker  *
2441*54e60f84SAndroid Build Coastguard Worker  *    vaCreateBuffer(dpy, context, VAEncMiscParameterBufferType,
2442*54e60f84SAndroid Build Coastguard Worker  *              sizeof(VAEncMiscParameterBuffer) + sizeof(VAEncMiscParameterRateControl),
2443*54e60f84SAndroid Build Coastguard Worker  *              1, NULL, &buf_id);
2444*54e60f84SAndroid Build Coastguard Worker  *
2445*54e60f84SAndroid Build Coastguard Worker  *    vaMapBuffer(dpy,buf_id,(void **)&misc_param);
2446*54e60f84SAndroid Build Coastguard Worker  *    misc_param->type = VAEncMiscParameterTypeRateControl;
2447*54e60f84SAndroid Build Coastguard Worker  *    misc_rate_ctrl= (VAEncMiscParameterRateControl *)misc_param->data;
2448*54e60f84SAndroid Build Coastguard Worker  *    misc_rate_ctrl->bits_per_second = 6400000;
2449*54e60f84SAndroid Build Coastguard Worker  *    vaUnmapBuffer(dpy, buf_id);
2450*54e60f84SAndroid Build Coastguard Worker  *    vaRenderPicture(dpy, context, &buf_id, 1);
2451*54e60f84SAndroid Build Coastguard Worker  */
2452*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncMiscParameterBuffer {
2453*54e60f84SAndroid Build Coastguard Worker     VAEncMiscParameterType type;
2454*54e60f84SAndroid Build Coastguard Worker     uint32_t data[];
2455*54e60f84SAndroid Build Coastguard Worker } VAEncMiscParameterBuffer;
2456*54e60f84SAndroid Build Coastguard Worker 
2457*54e60f84SAndroid Build Coastguard Worker /** \brief Temporal layer Structure*/
2458*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncMiscParameterTemporalLayerStructure {
2459*54e60f84SAndroid Build Coastguard Worker     /** \brief The number of temporal layers */
2460*54e60f84SAndroid Build Coastguard Worker     uint32_t number_of_layers;
2461*54e60f84SAndroid Build Coastguard Worker     /** \brief The length of the array defining frame layer membership. Should be 1-32 */
2462*54e60f84SAndroid Build Coastguard Worker     uint32_t periodicity;
2463*54e60f84SAndroid Build Coastguard Worker     /**
2464*54e60f84SAndroid Build Coastguard Worker      * \brief The array indicating the layer id for each frame
2465*54e60f84SAndroid Build Coastguard Worker      *
2466*54e60f84SAndroid Build Coastguard Worker      * The layer id for the first frame in a coded sequence is always 0, so layer_id[] specifies the layer
2467*54e60f84SAndroid Build Coastguard Worker      * ids for frames starting from the 2nd frame.
2468*54e60f84SAndroid Build Coastguard Worker      */
2469*54e60f84SAndroid Build Coastguard Worker     uint32_t layer_id[32];
2470*54e60f84SAndroid Build Coastguard Worker 
2471*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
2472*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
2473*54e60f84SAndroid Build Coastguard Worker } VAEncMiscParameterTemporalLayerStructure;
2474*54e60f84SAndroid Build Coastguard Worker 
2475*54e60f84SAndroid Build Coastguard Worker 
2476*54e60f84SAndroid Build Coastguard Worker /** \brief Rate control parameters */
2477*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncMiscParameterRateControl {
2478*54e60f84SAndroid Build Coastguard Worker     /** The maximum bit-rate which the the rate controller should generate. */
2479*54e60f84SAndroid Build Coastguard Worker     uint32_t bits_per_second;
2480*54e60f84SAndroid Build Coastguard Worker     /** The target bit-rate which the rate controller should generate, as a percentage of the
2481*54e60f84SAndroid Build Coastguard Worker      * maximum bit-rate.
2482*54e60f84SAndroid Build Coastguard Worker      *
2483*54e60f84SAndroid Build Coastguard Worker      * In CBR mode this value is ignored (treated as 100%).
2484*54e60f84SAndroid Build Coastguard Worker      */
2485*54e60f84SAndroid Build Coastguard Worker     uint32_t target_percentage;
2486*54e60f84SAndroid Build Coastguard Worker     /** Rate control window size in milliseconds.
2487*54e60f84SAndroid Build Coastguard Worker      *
2488*54e60f84SAndroid Build Coastguard Worker      * The rate controller will attempt to guarantee that the target and maximum bit-rates are
2489*54e60f84SAndroid Build Coastguard Worker      * correct over this window.
2490*54e60f84SAndroid Build Coastguard Worker      */
2491*54e60f84SAndroid Build Coastguard Worker     uint32_t window_size;
2492*54e60f84SAndroid Build Coastguard Worker     /** Initial quantiser value used at the start of the stream.
2493*54e60f84SAndroid Build Coastguard Worker      *
2494*54e60f84SAndroid Build Coastguard Worker      * Ignored if set to zero.
2495*54e60f84SAndroid Build Coastguard Worker      */
2496*54e60f84SAndroid Build Coastguard Worker     uint32_t initial_qp;
2497*54e60f84SAndroid Build Coastguard Worker     /** Minimum quantiser value to use.
2498*54e60f84SAndroid Build Coastguard Worker      *
2499*54e60f84SAndroid Build Coastguard Worker      * The quantiser will not go below the value - if this limit is hit, the output bitrate may
2500*54e60f84SAndroid Build Coastguard Worker      * be lower than the target.  Ignored if set to zero.
2501*54e60f84SAndroid Build Coastguard Worker      */
2502*54e60f84SAndroid Build Coastguard Worker     uint32_t min_qp;
2503*54e60f84SAndroid Build Coastguard Worker     /** Basic unit size.
2504*54e60f84SAndroid Build Coastguard Worker      *
2505*54e60f84SAndroid Build Coastguard Worker      * Only used by some drivers - see driver documentation for details.  Set to zero if unused.
2506*54e60f84SAndroid Build Coastguard Worker      */
2507*54e60f84SAndroid Build Coastguard Worker     uint32_t basic_unit_size;
2508*54e60f84SAndroid Build Coastguard Worker     union {
2509*54e60f84SAndroid Build Coastguard Worker         struct {
2510*54e60f84SAndroid Build Coastguard Worker             /** Force rate controller reset.
2511*54e60f84SAndroid Build Coastguard Worker              *
2512*54e60f84SAndroid Build Coastguard Worker              * The next frame will be treated as the start of a new stream, with all rate
2513*54e60f84SAndroid Build Coastguard Worker              * controller state reset to its initial values.
2514*54e60f84SAndroid Build Coastguard Worker              */
2515*54e60f84SAndroid Build Coastguard Worker             uint32_t reset : 1;
2516*54e60f84SAndroid Build Coastguard Worker             /** Disable frame skip in rate control mode. */
2517*54e60f84SAndroid Build Coastguard Worker             uint32_t disable_frame_skip : 1;
2518*54e60f84SAndroid Build Coastguard Worker             /** Disable bit stuffing in rate control mode. */
2519*54e60f84SAndroid Build Coastguard Worker             uint32_t disable_bit_stuffing : 1;
2520*54e60f84SAndroid Build Coastguard Worker             /** Macroblock-level rate control.
2521*54e60f84SAndroid Build Coastguard Worker              *
2522*54e60f84SAndroid Build Coastguard Worker              * 0: use default, 1: always enable, 2: always disable, other: reserved.
2523*54e60f84SAndroid Build Coastguard Worker              *
2524*54e60f84SAndroid Build Coastguard Worker              * This feature is only available if VAConfigAttribRateControl has the
2525*54e60f84SAndroid Build Coastguard Worker              * \ref VA_RC_MB bit set.
2526*54e60f84SAndroid Build Coastguard Worker              */
2527*54e60f84SAndroid Build Coastguard Worker             uint32_t mb_rate_control : 4;
2528*54e60f84SAndroid Build Coastguard Worker             /** The temporal layer that these rate control parameters apply to. */
2529*54e60f84SAndroid Build Coastguard Worker             uint32_t temporal_id : 8;
2530*54e60f84SAndroid Build Coastguard Worker             /** Ensure that intra frames also conform to the constant frame size. */
2531*54e60f84SAndroid Build Coastguard Worker             uint32_t cfs_I_frames : 1;
2532*54e60f84SAndroid Build Coastguard Worker             /** Enable parallel rate control for hierarchical B frames.
2533*54e60f84SAndroid Build Coastguard Worker              *
2534*54e60f84SAndroid Build Coastguard Worker              * See \ref VA_RC_PARALLEL.
2535*54e60f84SAndroid Build Coastguard Worker              */
2536*54e60f84SAndroid Build Coastguard Worker             uint32_t enable_parallel_brc    : 1;
2537*54e60f84SAndroid Build Coastguard Worker             uint32_t enable_dynamic_scaling : 1;
2538*54e60f84SAndroid Build Coastguard Worker             /** Frame tolerance mode.
2539*54e60f84SAndroid Build Coastguard Worker              *
2540*54e60f84SAndroid Build Coastguard Worker              *  Indicates the tolerance the application has to variations in the frame size.
2541*54e60f84SAndroid Build Coastguard Worker              *  For example, wireless display scenarios may require very steady bit rate to
2542*54e60f84SAndroid Build Coastguard Worker              *  reduce buffering time. It affects the rate control algorithm used,
2543*54e60f84SAndroid Build Coastguard Worker              *  but may or may not have an effect based on the combination of other BRC
2544*54e60f84SAndroid Build Coastguard Worker              *  parameters.  Only valid when the driver reports support for
2545*54e60f84SAndroid Build Coastguard Worker              *  #VAConfigAttribFrameSizeToleranceSupport.
2546*54e60f84SAndroid Build Coastguard Worker              *
2547*54e60f84SAndroid Build Coastguard Worker              *  equals 0    -- normal mode;
2548*54e60f84SAndroid Build Coastguard Worker              *  equals 1    -- maps to sliding window;
2549*54e60f84SAndroid Build Coastguard Worker              *  equals 2    -- maps to low delay mode;
2550*54e60f84SAndroid Build Coastguard Worker              *  other       -- invalid.
2551*54e60f84SAndroid Build Coastguard Worker              */
2552*54e60f84SAndroid Build Coastguard Worker             uint32_t frame_tolerance_mode   : 2;
2553*54e60f84SAndroid Build Coastguard Worker             /** Reserved for future use, must be zero. */
2554*54e60f84SAndroid Build Coastguard Worker             uint32_t reserved               : 12;
2555*54e60f84SAndroid Build Coastguard Worker         } bits;
2556*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
2557*54e60f84SAndroid Build Coastguard Worker     } rc_flags;
2558*54e60f84SAndroid Build Coastguard Worker     /** Initial quality factor used in ICQ mode.
2559*54e60f84SAndroid Build Coastguard Worker      *
2560*54e60f84SAndroid Build Coastguard Worker      * This value must be between 1 and 51.
2561*54e60f84SAndroid Build Coastguard Worker      * this value will be deprecated in future, to use quality_factor instead of it.
2562*54e60f84SAndroid Build Coastguard Worker      */
2563*54e60f84SAndroid Build Coastguard Worker     uint32_t ICQ_quality_factor;
2564*54e60f84SAndroid Build Coastguard Worker     /** Maximum quantiser value to use.
2565*54e60f84SAndroid Build Coastguard Worker      *
2566*54e60f84SAndroid Build Coastguard Worker      * The quantiser will not go above this value - if this limit is hit, the output bitrate
2567*54e60f84SAndroid Build Coastguard Worker      * may exceed the target.  Ignored if set to zero.
2568*54e60f84SAndroid Build Coastguard Worker      */
2569*54e60f84SAndroid Build Coastguard Worker     uint32_t max_qp;
2570*54e60f84SAndroid Build Coastguard Worker     /** Quality factor
2571*54e60f84SAndroid Build Coastguard Worker      *
2572*54e60f84SAndroid Build Coastguard Worker      *  the range will be different for different codec
2573*54e60f84SAndroid Build Coastguard Worker      */
2574*54e60f84SAndroid Build Coastguard Worker     uint32_t quality_factor;
2575*54e60f84SAndroid Build Coastguard Worker     /** Target frame size
2576*54e60f84SAndroid Build Coastguard Worker      *
2577*54e60f84SAndroid Build Coastguard Worker      *  Desired frame size in bytes.
2578*54e60f84SAndroid Build Coastguard Worker      *  This parameter can be used in some RC modes (like Transport Controlled BRC)
2579*54e60f84SAndroid Build Coastguard Worker      *  where feedback from the app is required.
2580*54e60f84SAndroid Build Coastguard Worker      *  Zero value means no limits.
2581*54e60f84SAndroid Build Coastguard Worker      *
2582*54e60f84SAndroid Build Coastguard Worker      */
2583*54e60f84SAndroid Build Coastguard Worker     uint32_t target_frame_size;
2584*54e60f84SAndroid Build Coastguard Worker     /** Reserved bytes for future use, must be zero. */
2585*54e60f84SAndroid Build Coastguard Worker     uint32_t va_reserved[VA_PADDING_LOW];
2586*54e60f84SAndroid Build Coastguard Worker } VAEncMiscParameterRateControl;
2587*54e60f84SAndroid Build Coastguard Worker 
2588*54e60f84SAndroid Build Coastguard Worker /** Encode framerate parameters.
2589*54e60f84SAndroid Build Coastguard Worker  *
2590*54e60f84SAndroid Build Coastguard Worker  * Sets the encode framerate used by the rate controller.  This should be
2591*54e60f84SAndroid Build Coastguard Worker  * provided in all modes using a bitrate target (variable framerate is not
2592*54e60f84SAndroid Build Coastguard Worker  * supported).
2593*54e60f84SAndroid Build Coastguard Worker  */
2594*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncMiscParameterFrameRate {
2595*54e60f84SAndroid Build Coastguard Worker     /** Encode framerate.
2596*54e60f84SAndroid Build Coastguard Worker      *
2597*54e60f84SAndroid Build Coastguard Worker      * The framerate is specified as a number of frames per second, as a
2598*54e60f84SAndroid Build Coastguard Worker      * fraction.  The denominator of the fraction is given in the top half
2599*54e60f84SAndroid Build Coastguard Worker      * (the high two bytes) of the framerate field, and the numerator is
2600*54e60f84SAndroid Build Coastguard Worker      * given in the bottom half (the low two bytes).
2601*54e60f84SAndroid Build Coastguard Worker      *
2602*54e60f84SAndroid Build Coastguard Worker      * That is:
2603*54e60f84SAndroid Build Coastguard Worker      * denominator = framerate >> 16 & 0xffff;
2604*54e60f84SAndroid Build Coastguard Worker      * numerator   = framerate & 0xffff;
2605*54e60f84SAndroid Build Coastguard Worker      * fps         = numerator / denominator;
2606*54e60f84SAndroid Build Coastguard Worker      *
2607*54e60f84SAndroid Build Coastguard Worker      * For example, if framerate is set to (100 << 16 | 750), this is
2608*54e60f84SAndroid Build Coastguard Worker      * 750 / 100, hence 7.5fps.
2609*54e60f84SAndroid Build Coastguard Worker      *
2610*54e60f84SAndroid Build Coastguard Worker      * If the denominator is zero (the high two bytes are both zero) then
2611*54e60f84SAndroid Build Coastguard Worker      * it takes the value one instead, so the framerate is just the integer
2612*54e60f84SAndroid Build Coastguard Worker      * in the low 2 bytes.
2613*54e60f84SAndroid Build Coastguard Worker      */
2614*54e60f84SAndroid Build Coastguard Worker     uint32_t framerate;
2615*54e60f84SAndroid Build Coastguard Worker     union {
2616*54e60f84SAndroid Build Coastguard Worker         struct {
2617*54e60f84SAndroid Build Coastguard Worker             /** The temporal layer that these framerate parameters apply to. */
2618*54e60f84SAndroid Build Coastguard Worker             uint32_t temporal_id : 8;
2619*54e60f84SAndroid Build Coastguard Worker             /** Reserved for future use, must be zero. */
2620*54e60f84SAndroid Build Coastguard Worker             uint32_t reserved : 24;
2621*54e60f84SAndroid Build Coastguard Worker         } bits;
2622*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
2623*54e60f84SAndroid Build Coastguard Worker     } framerate_flags;
2624*54e60f84SAndroid Build Coastguard Worker 
2625*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
2626*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
2627*54e60f84SAndroid Build Coastguard Worker } VAEncMiscParameterFrameRate;
2628*54e60f84SAndroid Build Coastguard Worker 
2629*54e60f84SAndroid Build Coastguard Worker /**
2630*54e60f84SAndroid Build Coastguard Worker  * Allow a maximum slice size to be specified (in bits).
2631*54e60f84SAndroid Build Coastguard Worker  * The encoder will attempt to make sure that individual slices do not exceed this size
2632*54e60f84SAndroid Build Coastguard Worker  * Or to signal applicate if the slice size exceed this size, see "status" of VACodedBufferSegment
2633*54e60f84SAndroid Build Coastguard Worker  */
2634*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncMiscParameterMaxSliceSize {
2635*54e60f84SAndroid Build Coastguard Worker     uint32_t max_slice_size;
2636*54e60f84SAndroid Build Coastguard Worker 
2637*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
2638*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
2639*54e60f84SAndroid Build Coastguard Worker } VAEncMiscParameterMaxSliceSize;
2640*54e60f84SAndroid Build Coastguard Worker 
2641*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncMiscParameterAIR {
2642*54e60f84SAndroid Build Coastguard Worker     uint32_t air_num_mbs;
2643*54e60f84SAndroid Build Coastguard Worker     uint32_t air_threshold;
2644*54e60f84SAndroid Build Coastguard Worker     uint32_t air_auto; /* if set to 1 then hardware auto-tune the AIR threshold */
2645*54e60f84SAndroid Build Coastguard Worker 
2646*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
2647*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
2648*54e60f84SAndroid Build Coastguard Worker } VAEncMiscParameterAIR;
2649*54e60f84SAndroid Build Coastguard Worker 
2650*54e60f84SAndroid Build Coastguard Worker /*
2651*54e60f84SAndroid Build Coastguard Worker  * \brief Rolling intra refresh data structure for encoding.
2652*54e60f84SAndroid Build Coastguard Worker  */
2653*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncMiscParameterRIR {
2654*54e60f84SAndroid Build Coastguard Worker     union {
2655*54e60f84SAndroid Build Coastguard Worker         struct
2656*54e60f84SAndroid Build Coastguard Worker         /**
2657*54e60f84SAndroid Build Coastguard Worker          * \brief Indicate if intra refresh is enabled in column/row.
2658*54e60f84SAndroid Build Coastguard Worker          *
2659*54e60f84SAndroid Build Coastguard Worker          * App should query VAConfigAttribEncIntraRefresh to confirm RIR support
2660*54e60f84SAndroid Build Coastguard Worker          * by the driver before sending this structure.
2661*54e60f84SAndroid Build Coastguard Worker              */
2662*54e60f84SAndroid Build Coastguard Worker         {
2663*54e60f84SAndroid Build Coastguard Worker             /* \brief enable RIR in column */
2664*54e60f84SAndroid Build Coastguard Worker             uint32_t enable_rir_column : 1;
2665*54e60f84SAndroid Build Coastguard Worker             /* \brief enable RIR in row */
2666*54e60f84SAndroid Build Coastguard Worker             uint32_t enable_rir_row : 1;
2667*54e60f84SAndroid Build Coastguard Worker             uint32_t reserved : 30;
2668*54e60f84SAndroid Build Coastguard Worker         } bits;
2669*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
2670*54e60f84SAndroid Build Coastguard Worker     } rir_flags;
2671*54e60f84SAndroid Build Coastguard Worker     /**
2672*54e60f84SAndroid Build Coastguard Worker      * \brief Indicates the column or row location in MB. It is ignored if
2673*54e60f84SAndroid Build Coastguard Worker      * rir_flags is 0.
2674*54e60f84SAndroid Build Coastguard Worker      */
2675*54e60f84SAndroid Build Coastguard Worker     uint16_t intra_insertion_location;
2676*54e60f84SAndroid Build Coastguard Worker     /**
2677*54e60f84SAndroid Build Coastguard Worker      * \brief Indicates the number of columns or rows in MB. It is ignored if
2678*54e60f84SAndroid Build Coastguard Worker      * rir_flags is 0.
2679*54e60f84SAndroid Build Coastguard Worker      */
2680*54e60f84SAndroid Build Coastguard Worker     uint16_t intra_insert_size;
2681*54e60f84SAndroid Build Coastguard Worker     /**
2682*54e60f84SAndroid Build Coastguard Worker      * \brief indicates the Qp difference for inserted intra columns or rows.
2683*54e60f84SAndroid Build Coastguard Worker      * App can use this to adjust intra Qp based on bitrate & max frame size.
2684*54e60f84SAndroid Build Coastguard Worker      */
2685*54e60f84SAndroid Build Coastguard Worker     uint8_t  qp_delta_for_inserted_intra;
2686*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
2687*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
2688*54e60f84SAndroid Build Coastguard Worker } VAEncMiscParameterRIR;
2689*54e60f84SAndroid Build Coastguard Worker 
2690*54e60f84SAndroid Build Coastguard Worker /** HRD / VBV buffering parameters for encoding.
2691*54e60f84SAndroid Build Coastguard Worker  *
2692*54e60f84SAndroid Build Coastguard Worker  * This sets the HRD / VBV parameters which will be used by the rate
2693*54e60f84SAndroid Build Coastguard Worker  * controller for encoding.  It should be specified in modes using a bitrate
2694*54e60f84SAndroid Build Coastguard Worker  * target when the buffering of the output stream needs to be constrained.
2695*54e60f84SAndroid Build Coastguard Worker  *
2696*54e60f84SAndroid Build Coastguard Worker  * If not provided, the encoder may use arbitrary amounts of buffering.
2697*54e60f84SAndroid Build Coastguard Worker  */
2698*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncMiscParameterHRD {
2699*54e60f84SAndroid Build Coastguard Worker     /** The initial fullness of the HRD coded picture buffer, in bits.
2700*54e60f84SAndroid Build Coastguard Worker      *
2701*54e60f84SAndroid Build Coastguard Worker      * This sets how full the CPB is when encoding begins - that is, how much
2702*54e60f84SAndroid Build Coastguard Worker      * buffering will happen on the decoder side before the first frame.
2703*54e60f84SAndroid Build Coastguard Worker      * The CPB fullness will be reset to this value after any rate control
2704*54e60f84SAndroid Build Coastguard Worker      * reset (a change in parameters or an explicit reset).
2705*54e60f84SAndroid Build Coastguard Worker      *
2706*54e60f84SAndroid Build Coastguard Worker      * For H.264, it should match the value of initial_cpb_removal_delay in
2707*54e60f84SAndroid Build Coastguard Worker      * buffering_period SEI messages.
2708*54e60f84SAndroid Build Coastguard Worker      */
2709*54e60f84SAndroid Build Coastguard Worker     uint32_t initial_buffer_fullness;
2710*54e60f84SAndroid Build Coastguard Worker     /** The HRD coded picture buffer size, in bits.
2711*54e60f84SAndroid Build Coastguard Worker      *
2712*54e60f84SAndroid Build Coastguard Worker      * For H.264, it should match the value of cpb_size_value_minus1 in the VUI
2713*54e60f84SAndroid Build Coastguard Worker      * parameters.
2714*54e60f84SAndroid Build Coastguard Worker      */
2715*54e60f84SAndroid Build Coastguard Worker     uint32_t buffer_size;
2716*54e60f84SAndroid Build Coastguard Worker 
2717*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
2718*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
2719*54e60f84SAndroid Build Coastguard Worker } VAEncMiscParameterHRD;
2720*54e60f84SAndroid Build Coastguard Worker 
2721*54e60f84SAndroid Build Coastguard Worker /**
2722*54e60f84SAndroid Build Coastguard Worker  * \brief Defines a maximum frame size (in bits).
2723*54e60f84SAndroid Build Coastguard Worker  *
2724*54e60f84SAndroid Build Coastguard Worker  * This misc parameter buffer defines the maximum size of a frame (in
2725*54e60f84SAndroid Build Coastguard Worker  * bits). The encoder will try to make sure that each frame does not
2726*54e60f84SAndroid Build Coastguard Worker  * exceed this size. Otherwise, if the frame size exceeds this size,
2727*54e60f84SAndroid Build Coastguard Worker  * the \c status flag of #VACodedBufferSegment will contain
2728*54e60f84SAndroid Build Coastguard Worker  * #VA_CODED_BUF_STATUS_FRAME_SIZE_OVERFLOW.
2729*54e60f84SAndroid Build Coastguard Worker  */
2730*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncMiscParameterBufferMaxFrameSize {
2731*54e60f84SAndroid Build Coastguard Worker     /** \brief Type. Shall be set to #VAEncMiscParameterTypeMaxFrameSize. */
2732*54e60f84SAndroid Build Coastguard Worker     /** duplicated with VAEncMiscParameterBuffer, should be deprecated*/
2733*54e60f84SAndroid Build Coastguard Worker     va_deprecated VAEncMiscParameterType      type;
2734*54e60f84SAndroid Build Coastguard Worker     /** \brief Maximum size of a frame (in bits). */
2735*54e60f84SAndroid Build Coastguard Worker     uint32_t                max_frame_size;
2736*54e60f84SAndroid Build Coastguard Worker 
2737*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
2738*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
2739*54e60f84SAndroid Build Coastguard Worker } VAEncMiscParameterBufferMaxFrameSize;
2740*54e60f84SAndroid Build Coastguard Worker 
2741*54e60f84SAndroid Build Coastguard Worker /**
2742*54e60f84SAndroid Build Coastguard Worker  * \brief Maximum frame size (in bytes) settings for multiple pass.
2743*54e60f84SAndroid Build Coastguard Worker  *
2744*54e60f84SAndroid Build Coastguard Worker  * This misc parameter buffer defines the maximum size of a frame (in
2745*54e60f84SAndroid Build Coastguard Worker  * bytes) settings for multiple pass. currently only AVC encoder can
2746*54e60f84SAndroid Build Coastguard Worker  * support this settings in multiple pass case. If the frame size exceeds
2747*54e60f84SAndroid Build Coastguard Worker  * this size, the encoder will do more pak passes to adjust the QP value
2748*54e60f84SAndroid Build Coastguard Worker  * to control the frame size.
2749*54e60f84SAndroid Build Coastguard Worker  */
2750*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncMiscParameterBufferMultiPassFrameSize {
2751*54e60f84SAndroid Build Coastguard Worker     /** \brief Type. Shall be set to #VAEncMiscParameterTypeMultiPassMaxFrameSize. */
2752*54e60f84SAndroid Build Coastguard Worker     /** duplicated with VAEncMiscParameterBuffer, should be deprecated*/
2753*54e60f84SAndroid Build Coastguard Worker     va_deprecated VAEncMiscParameterType      type;
2754*54e60f84SAndroid Build Coastguard Worker     /** \brief Maximum size of a frame (in byte) */
2755*54e60f84SAndroid Build Coastguard Worker     uint32_t                max_frame_size;
2756*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
2757*54e60f84SAndroid Build Coastguard Worker     uint32_t                reserved;
2758*54e60f84SAndroid Build Coastguard Worker     /** \brief number of passes, every pass has different QP, currently AVC encoder can support up to 4 passes */
2759*54e60f84SAndroid Build Coastguard Worker     uint8_t                 num_passes;
2760*54e60f84SAndroid Build Coastguard Worker     /** \brief delta QP list for every pass */
2761*54e60f84SAndroid Build Coastguard Worker     uint8_t                *delta_qp;
2762*54e60f84SAndroid Build Coastguard Worker 
2763*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
2764*54e60f84SAndroid Build Coastguard Worker     unsigned long           va_reserved[VA_PADDING_LOW];
2765*54e60f84SAndroid Build Coastguard Worker } VAEncMiscParameterBufferMultiPassFrameSize;
2766*54e60f84SAndroid Build Coastguard Worker 
2767*54e60f84SAndroid Build Coastguard Worker /**
2768*54e60f84SAndroid Build Coastguard Worker  * \brief Encoding quality level.
2769*54e60f84SAndroid Build Coastguard Worker  *
2770*54e60f84SAndroid Build Coastguard Worker  * The encoding quality could be set through this structure, if the implementation
2771*54e60f84SAndroid Build Coastguard Worker  * supports multiple quality levels. The quality level set through this structure is
2772*54e60f84SAndroid Build Coastguard Worker  * persistent over the entire coded sequence, or until a new structure is being sent.
2773*54e60f84SAndroid Build Coastguard Worker  * The quality level range can be queried through the VAConfigAttribEncQualityRange
2774*54e60f84SAndroid Build Coastguard Worker  * attribute. A lower value means higher quality, and a value of 1 represents the highest
2775*54e60f84SAndroid Build Coastguard Worker  * quality. The quality level setting is used as a trade-off between quality and speed/power
2776*54e60f84SAndroid Build Coastguard Worker  * consumption, with higher quality corresponds to lower speed and higher power consumption.
2777*54e60f84SAndroid Build Coastguard Worker  */
2778*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncMiscParameterBufferQualityLevel {
2779*54e60f84SAndroid Build Coastguard Worker     /** \brief Encoding quality level setting. When set to 0, default quality
2780*54e60f84SAndroid Build Coastguard Worker      * level is used.
2781*54e60f84SAndroid Build Coastguard Worker      */
2782*54e60f84SAndroid Build Coastguard Worker     uint32_t                quality_level;
2783*54e60f84SAndroid Build Coastguard Worker 
2784*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
2785*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
2786*54e60f84SAndroid Build Coastguard Worker } VAEncMiscParameterBufferQualityLevel;
2787*54e60f84SAndroid Build Coastguard Worker 
2788*54e60f84SAndroid Build Coastguard Worker /**
2789*54e60f84SAndroid Build Coastguard Worker  * \brief Quantization settings for encoding.
2790*54e60f84SAndroid Build Coastguard Worker  *
2791*54e60f84SAndroid Build Coastguard Worker  * Some encoders support special types of quantization such as trellis, and this structure
2792*54e60f84SAndroid Build Coastguard Worker  * can be used by the app to control these special types of quantization by the encoder.
2793*54e60f84SAndroid Build Coastguard Worker  */
2794*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncMiscParameterQuantization {
2795*54e60f84SAndroid Build Coastguard Worker     union {
2796*54e60f84SAndroid Build Coastguard Worker         /* if no flags is set then quantization is determined by the driver */
2797*54e60f84SAndroid Build Coastguard Worker         struct {
2798*54e60f84SAndroid Build Coastguard Worker             /* \brief disable trellis for all frames/fields */
2799*54e60f84SAndroid Build Coastguard Worker             uint32_t disable_trellis : 1;
2800*54e60f84SAndroid Build Coastguard Worker             /* \brief enable trellis for I frames/fields */
2801*54e60f84SAndroid Build Coastguard Worker             uint32_t enable_trellis_I : 1;
2802*54e60f84SAndroid Build Coastguard Worker             /* \brief enable trellis for P frames/fields */
2803*54e60f84SAndroid Build Coastguard Worker             uint32_t enable_trellis_P : 1;
2804*54e60f84SAndroid Build Coastguard Worker             /* \brief enable trellis for B frames/fields */
2805*54e60f84SAndroid Build Coastguard Worker             uint32_t enable_trellis_B : 1;
2806*54e60f84SAndroid Build Coastguard Worker             uint32_t reserved : 28;
2807*54e60f84SAndroid Build Coastguard Worker         } bits;
2808*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
2809*54e60f84SAndroid Build Coastguard Worker     } quantization_flags;
2810*54e60f84SAndroid Build Coastguard Worker     uint32_t va_reserved;
2811*54e60f84SAndroid Build Coastguard Worker } VAEncMiscParameterQuantization;
2812*54e60f84SAndroid Build Coastguard Worker 
2813*54e60f84SAndroid Build Coastguard Worker /**
2814*54e60f84SAndroid Build Coastguard Worker  * \brief Encoding skip frame.
2815*54e60f84SAndroid Build Coastguard Worker  *
2816*54e60f84SAndroid Build Coastguard Worker  * The application may choose to skip frames externally to the encoder (e.g. drop completely or
2817*54e60f84SAndroid Build Coastguard Worker  * code as all skip's). For rate control purposes the encoder will need to know the size and number
2818*54e60f84SAndroid Build Coastguard Worker  * of skipped frames.  Skip frame(s) indicated through this structure is applicable only to the
2819*54e60f84SAndroid Build Coastguard Worker  * current frame.  It is allowed for the application to still send in packed headers for the driver to
2820*54e60f84SAndroid Build Coastguard Worker  * pack, although no frame will be encoded (e.g. for HW to encrypt the frame).
2821*54e60f84SAndroid Build Coastguard Worker  */
2822*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncMiscParameterSkipFrame {
2823*54e60f84SAndroid Build Coastguard Worker     /** \brief Indicates skip frames as below.
2824*54e60f84SAndroid Build Coastguard Worker       * 0: Encode as normal, no skip.
2825*54e60f84SAndroid Build Coastguard Worker       * 1: One or more frames were skipped prior to the current frame, encode the current frame as normal.
2826*54e60f84SAndroid Build Coastguard Worker       * 2: The current frame is to be skipped, do not encode it but pack/encrypt the packed header contents
2827*54e60f84SAndroid Build Coastguard Worker       *    (all except VAEncPackedHeaderSlice) which could contain actual frame contents (e.g. pack the frame
2828*54e60f84SAndroid Build Coastguard Worker       *    in VAEncPackedHeaderPicture).  */
2829*54e60f84SAndroid Build Coastguard Worker     uint8_t               skip_frame_flag;
2830*54e60f84SAndroid Build Coastguard Worker     /** \brief The number of frames skipped prior to the current frame.  Valid when skip_frame_flag = 1. */
2831*54e60f84SAndroid Build Coastguard Worker     uint8_t               num_skip_frames;
2832*54e60f84SAndroid Build Coastguard Worker     /** \brief When skip_frame_flag = 1, the size of the skipped frames in bits.   When skip_frame_flag = 2,
2833*54e60f84SAndroid Build Coastguard Worker       * the size of the current skipped frame that is to be packed/encrypted in bits. */
2834*54e60f84SAndroid Build Coastguard Worker     uint32_t                size_skip_frames;
2835*54e60f84SAndroid Build Coastguard Worker 
2836*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
2837*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
2838*54e60f84SAndroid Build Coastguard Worker } VAEncMiscParameterSkipFrame;
2839*54e60f84SAndroid Build Coastguard Worker 
2840*54e60f84SAndroid Build Coastguard Worker /**
2841*54e60f84SAndroid Build Coastguard Worker  * \brief Encoding region-of-interest (ROI).
2842*54e60f84SAndroid Build Coastguard Worker  *
2843*54e60f84SAndroid Build Coastguard Worker  * The encoding ROI can be set through VAEncMiscParameterBufferROI, if the implementation
2844*54e60f84SAndroid Build Coastguard Worker  * supports ROI input. The ROI set through this structure is applicable only to the
2845*54e60f84SAndroid Build Coastguard Worker  * current frame or field, so must be sent every frame or field to be applied.  The number of
2846*54e60f84SAndroid Build Coastguard Worker  * supported ROIs can be queried through the VAConfigAttribEncROI.  The encoder will use the
2847*54e60f84SAndroid Build Coastguard Worker  * ROI information to adjust the QP values of the MB's that fall within the ROIs.
2848*54e60f84SAndroid Build Coastguard Worker  */
2849*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncROI {
2850*54e60f84SAndroid Build Coastguard Worker     /** \brief Defines the ROI boundary in pixels, the driver will map it to appropriate
2851*54e60f84SAndroid Build Coastguard Worker      *  codec coding units.  It is relative to frame coordinates for the frame case and
2852*54e60f84SAndroid Build Coastguard Worker      *  to field coordinates for the field case. */
2853*54e60f84SAndroid Build Coastguard Worker     VARectangle     roi_rectangle;
2854*54e60f84SAndroid Build Coastguard Worker     /**
2855*54e60f84SAndroid Build Coastguard Worker      * \brief ROI value
2856*54e60f84SAndroid Build Coastguard Worker      *
2857*54e60f84SAndroid Build Coastguard Worker      * \ref roi_value specifies ROI delta QP or ROI priority.
2858*54e60f84SAndroid Build Coastguard Worker      * --  ROI delta QP is the value that will be added on top of the frame level QP.
2859*54e60f84SAndroid Build Coastguard Worker      * --  ROI priority specifies the priority of a region, it can be positive (more important)
2860*54e60f84SAndroid Build Coastguard Worker      * or negative (less important) values and is compared with non-ROI region (taken as value 0),
2861*54e60f84SAndroid Build Coastguard Worker      * E.g. ROI region with \ref roi_value -3 is less important than the non-ROI region (\ref roi_value
2862*54e60f84SAndroid Build Coastguard Worker      * implied to be 0) which is less important than ROI region with roi_value +2. For overlapping
2863*54e60f84SAndroid Build Coastguard Worker      * regions, the roi_value that is first in the ROI array will have priority.
2864*54e60f84SAndroid Build Coastguard Worker      *
2865*54e60f84SAndroid Build Coastguard Worker      * \ref roi_value always specifes ROI delta QP when VAConfigAttribRateControl == VA_RC_CQP, no matter
2866*54e60f84SAndroid Build Coastguard Worker      * the value of \c roi_value_is_qp_delta in #VAEncMiscParameterBufferROI.
2867*54e60f84SAndroid Build Coastguard Worker      *
2868*54e60f84SAndroid Build Coastguard Worker      * \ref roi_value depends on \c roi_value_is_qp_delta in #VAEncMiscParameterBufferROI when
2869*54e60f84SAndroid Build Coastguard Worker      * VAConfigAttribRateControl != VA_RC_CQP. \ref roi_value specifies ROI_delta QP if \c roi_value_is_qp_delta
2870*54e60f84SAndroid Build Coastguard Worker      * in VAEncMiscParameterBufferROI is 1, otherwise \ref roi_value specifies ROI priority.
2871*54e60f84SAndroid Build Coastguard Worker      */
2872*54e60f84SAndroid Build Coastguard Worker     int8_t            roi_value;
2873*54e60f84SAndroid Build Coastguard Worker } VAEncROI;
2874*54e60f84SAndroid Build Coastguard Worker 
2875*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncMiscParameterBufferROI {
2876*54e60f84SAndroid Build Coastguard Worker     /** \brief Number of ROIs being sent.*/
2877*54e60f84SAndroid Build Coastguard Worker     uint32_t        num_roi;
2878*54e60f84SAndroid Build Coastguard Worker 
2879*54e60f84SAndroid Build Coastguard Worker     /** \brief Valid when VAConfigAttribRateControl != VA_RC_CQP, then the encoder's
2880*54e60f84SAndroid Build Coastguard Worker      *  rate control will determine actual delta QPs.  Specifies the max/min allowed delta
2881*54e60f84SAndroid Build Coastguard Worker      *  QPs. */
2882*54e60f84SAndroid Build Coastguard Worker     int8_t                max_delta_qp;
2883*54e60f84SAndroid Build Coastguard Worker     int8_t                min_delta_qp;
2884*54e60f84SAndroid Build Coastguard Worker 
2885*54e60f84SAndroid Build Coastguard Worker     /** \brief Pointer to a VAEncROI array with num_roi elements.  It is relative to frame
2886*54e60f84SAndroid Build Coastguard Worker       *  coordinates for the frame case and to field coordinates for the field case.*/
2887*54e60f84SAndroid Build Coastguard Worker     VAEncROI            *roi;
2888*54e60f84SAndroid Build Coastguard Worker     union {
2889*54e60f84SAndroid Build Coastguard Worker         struct {
2890*54e60f84SAndroid Build Coastguard Worker             /**
2891*54e60f84SAndroid Build Coastguard Worker              * \brief An indication for roi value.
2892*54e60f84SAndroid Build Coastguard Worker              *
2893*54e60f84SAndroid Build Coastguard Worker              * \ref roi_value_is_qp_delta equal to 1 indicates \c roi_value in #VAEncROI should
2894*54e60f84SAndroid Build Coastguard Worker              * be used as ROI delta QP. \ref roi_value_is_qp_delta equal to 0 indicates \c roi_value
2895*54e60f84SAndroid Build Coastguard Worker              * in #VAEncROI should be used as ROI priority.
2896*54e60f84SAndroid Build Coastguard Worker              *
2897*54e60f84SAndroid Build Coastguard Worker              * \ref roi_value_is_qp_delta is only available when VAConfigAttribRateControl != VA_RC_CQP,
2898*54e60f84SAndroid Build Coastguard Worker              * the setting must comply with \c roi_rc_priority_support and \c roi_rc_qp_delta_support in
2899*54e60f84SAndroid Build Coastguard Worker              * #VAConfigAttribValEncROI. The underlying driver should ignore this field
2900*54e60f84SAndroid Build Coastguard Worker              * when VAConfigAttribRateControl == VA_RC_CQP.
2901*54e60f84SAndroid Build Coastguard Worker              */
2902*54e60f84SAndroid Build Coastguard Worker             uint32_t  roi_value_is_qp_delta    : 1;
2903*54e60f84SAndroid Build Coastguard Worker             uint32_t  reserved                 : 31;
2904*54e60f84SAndroid Build Coastguard Worker         } bits;
2905*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
2906*54e60f84SAndroid Build Coastguard Worker     } roi_flags;
2907*54e60f84SAndroid Build Coastguard Worker 
2908*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
2909*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
2910*54e60f84SAndroid Build Coastguard Worker } VAEncMiscParameterBufferROI;
2911*54e60f84SAndroid Build Coastguard Worker /*
2912*54e60f84SAndroid Build Coastguard Worker  * \brief Dirty rectangle data structure for encoding.
2913*54e60f84SAndroid Build Coastguard Worker  *
2914*54e60f84SAndroid Build Coastguard Worker  * The encoding dirty rect can be set through VAEncMiscParameterBufferDirtyRect, if the
2915*54e60f84SAndroid Build Coastguard Worker  * implementation supports dirty rect input. The rect set through this structure is applicable
2916*54e60f84SAndroid Build Coastguard Worker  * only to the current frame or field, so must be sent every frame or field to be applied.
2917*54e60f84SAndroid Build Coastguard Worker  * The number of supported rects can be queried through the VAConfigAttribEncDirtyRect.  The
2918*54e60f84SAndroid Build Coastguard Worker  * encoder will use the rect information to know those rectangle areas have changed while the
2919*54e60f84SAndroid Build Coastguard Worker  * areas not covered by dirty rect rectangles are assumed to have not changed compared to the
2920*54e60f84SAndroid Build Coastguard Worker  * previous picture.  The encoder may do some internal optimizations.
2921*54e60f84SAndroid Build Coastguard Worker  */
2922*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncMiscParameterBufferDirtyRect {
2923*54e60f84SAndroid Build Coastguard Worker     /** \brief Number of Rectangle being sent.*/
2924*54e60f84SAndroid Build Coastguard Worker     uint32_t    num_roi_rectangle;
2925*54e60f84SAndroid Build Coastguard Worker 
2926*54e60f84SAndroid Build Coastguard Worker     /** \brief Pointer to a VARectangle array with num_roi_rectangle elements.*/
2927*54e60f84SAndroid Build Coastguard Worker     VARectangle    *roi_rectangle;
2928*54e60f84SAndroid Build Coastguard Worker } VAEncMiscParameterBufferDirtyRect;
2929*54e60f84SAndroid Build Coastguard Worker 
2930*54e60f84SAndroid Build Coastguard Worker /** \brief Attribute value for VAConfigAttribEncParallelRateControl */
2931*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncMiscParameterParallelRateControl {
2932*54e60f84SAndroid Build Coastguard Worker     /** brief Number of layers*/
2933*54e60f84SAndroid Build Coastguard Worker     uint32_t num_layers;
2934*54e60f84SAndroid Build Coastguard Worker     /** brief Number of B frames per layer per GOP.
2935*54e60f84SAndroid Build Coastguard Worker      *
2936*54e60f84SAndroid Build Coastguard Worker      * it should be allocated by application, and the is num_layers.
2937*54e60f84SAndroid Build Coastguard Worker      *  num_b_in_gop[0] is the number of regular B which refers to only I or P frames. */
2938*54e60f84SAndroid Build Coastguard Worker     uint32_t *num_b_in_gop;
2939*54e60f84SAndroid Build Coastguard Worker } VAEncMiscParameterParallelRateControl;
2940*54e60f84SAndroid Build Coastguard Worker 
2941*54e60f84SAndroid Build Coastguard Worker /** per frame encoder quality controls, once set they will persist for all future frames
2942*54e60f84SAndroid Build Coastguard Worker   *till it is updated again. */
2943*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncMiscParameterEncQuality {
2944*54e60f84SAndroid Build Coastguard Worker     union {
2945*54e60f84SAndroid Build Coastguard Worker         struct {
2946*54e60f84SAndroid Build Coastguard Worker             /** Use raw frames for reference instead of reconstructed frames.
2947*54e60f84SAndroid Build Coastguard Worker               * it only impact motion estimation (ME)  stage, and will not impact MC stage
2948*54e60f84SAndroid Build Coastguard Worker               * so the reconstruct picture will can match with decode side */
2949*54e60f84SAndroid Build Coastguard Worker             uint32_t useRawPicForRef                    : 1;
2950*54e60f84SAndroid Build Coastguard Worker             /**  Disables skip check for ME stage, it will increase the bistream size
2951*54e60f84SAndroid Build Coastguard Worker               * but will improve the qulity */
2952*54e60f84SAndroid Build Coastguard Worker             uint32_t skipCheckDisable                   : 1;
2953*54e60f84SAndroid Build Coastguard Worker             /**  Indicates app will override default driver FTQ settings using FTQEnable.
2954*54e60f84SAndroid Build Coastguard Worker               *  FTQ is forward transform quantization */
2955*54e60f84SAndroid Build Coastguard Worker             uint32_t FTQOverride                        : 1;
2956*54e60f84SAndroid Build Coastguard Worker             /** Enables/disables FTQ. */
2957*54e60f84SAndroid Build Coastguard Worker             uint32_t FTQEnable                          : 1;
2958*54e60f84SAndroid Build Coastguard Worker             /** Indicates the app will provide the Skip Threshold LUT to use when FTQ is
2959*54e60f84SAndroid Build Coastguard Worker               * enabled (FTQSkipThresholdLUT), else default driver thresholds will be used. */
2960*54e60f84SAndroid Build Coastguard Worker             uint32_t FTQSkipThresholdLUTInput           : 1;
2961*54e60f84SAndroid Build Coastguard Worker             /** Indicates the app will provide the Skip Threshold LUT to use when FTQ is
2962*54e60f84SAndroid Build Coastguard Worker               * disabled (NonFTQSkipThresholdLUT), else default driver thresholds will be used. */
2963*54e60f84SAndroid Build Coastguard Worker             uint32_t NonFTQSkipThresholdLUTInput        : 1;
2964*54e60f84SAndroid Build Coastguard Worker             uint32_t ReservedBit                        : 1;
2965*54e60f84SAndroid Build Coastguard Worker             /** Control to enable the ME mode decision algorithm to bias to fewer B Direct/Skip types.
2966*54e60f84SAndroid Build Coastguard Worker               * Applies only to B frames, all other frames will ignore this setting.  */
2967*54e60f84SAndroid Build Coastguard Worker             uint32_t directBiasAdjustmentEnable         : 1;
2968*54e60f84SAndroid Build Coastguard Worker             /** Enables global motion bias. global motion also is called HME (Heirarchical Motion Estimation )
2969*54e60f84SAndroid Build Coastguard Worker               * HME is used to handle large motions and avoiding local minima in the video encoding process
2970*54e60f84SAndroid Build Coastguard Worker               * down scaled the input and reference picture, then do ME. the result will be a predictor to next level HME or ME
2971*54e60f84SAndroid Build Coastguard Worker               * current interface divide the HME to 3 level. UltraHME , SuperHME, and HME, result of UltraHME will be input of SurperHME,
2972*54e60f84SAndroid Build Coastguard Worker               * result of superHME will be a input for HME. HME result will be input of ME. it is a switch for HMEMVCostScalingFactor
2973*54e60f84SAndroid Build Coastguard Worker               * can change the HME bias inside RDO stage*/
2974*54e60f84SAndroid Build Coastguard Worker             uint32_t globalMotionBiasAdjustmentEnable   : 1;
2975*54e60f84SAndroid Build Coastguard Worker             /** MV cost scaling ratio for HME ( predictors.  It is used when
2976*54e60f84SAndroid Build Coastguard Worker               * globalMotionBiasAdjustmentEnable == 1, else it is ignored.  Values are:
2977*54e60f84SAndroid Build Coastguard Worker               *     0: set MV cost to be 0 for HME predictor.
2978*54e60f84SAndroid Build Coastguard Worker               *     1: scale MV cost to be 1/2 of the default value for HME predictor.
2979*54e60f84SAndroid Build Coastguard Worker               *     2: scale MV cost to be 1/4 of the default value for HME predictor.
2980*54e60f84SAndroid Build Coastguard Worker               *     3: scale MV cost to be 1/8 of the default value for HME predictor. */
2981*54e60f84SAndroid Build Coastguard Worker             uint32_t HMEMVCostScalingFactor             : 2;
2982*54e60f84SAndroid Build Coastguard Worker             /**disable HME, if it is disabled. Super*ultraHME should also be disabled  */
2983*54e60f84SAndroid Build Coastguard Worker             uint32_t HMEDisable                         : 1;
2984*54e60f84SAndroid Build Coastguard Worker             /**disable Super HME, if it is disabled, ultraHME should be disabled */
2985*54e60f84SAndroid Build Coastguard Worker             uint32_t SuperHMEDisable                    : 1;
2986*54e60f84SAndroid Build Coastguard Worker             /** disable Ultra HME */
2987*54e60f84SAndroid Build Coastguard Worker             uint32_t UltraHMEDisable                    : 1;
2988*54e60f84SAndroid Build Coastguard Worker             /** disable panic mode. Panic mode happened when there are extreme BRC (bit rate control) requirement
2989*54e60f84SAndroid Build Coastguard Worker               * frame size cant achieve the target of BRC.  when Panic mode is triggered, Coefficients will
2990*54e60f84SAndroid Build Coastguard Worker               *  be set to zero. disable panic mode will improve quality but will impact BRC */
2991*54e60f84SAndroid Build Coastguard Worker             uint32_t PanicModeDisable                   : 1;
2992*54e60f84SAndroid Build Coastguard Worker             /** Force RepartitionCheck
2993*54e60f84SAndroid Build Coastguard Worker              *  0: DEFAULT - follow driver default settings.
2994*54e60f84SAndroid Build Coastguard Worker              *  1: FORCE_ENABLE - enable this feature totally for all cases.
2995*54e60f84SAndroid Build Coastguard Worker              *  2: FORCE_DISABLE - disable this feature totally for all cases. */
2996*54e60f84SAndroid Build Coastguard Worker             uint32_t ForceRepartitionCheck              : 2;
2997*54e60f84SAndroid Build Coastguard Worker 
2998*54e60f84SAndroid Build Coastguard Worker         };
2999*54e60f84SAndroid Build Coastguard Worker         uint32_t encControls;
3000*54e60f84SAndroid Build Coastguard Worker     };
3001*54e60f84SAndroid Build Coastguard Worker 
3002*54e60f84SAndroid Build Coastguard Worker     /** Maps QP to skip thresholds when FTQ is enabled.  Valid range is 0-255. */
3003*54e60f84SAndroid Build Coastguard Worker     uint8_t FTQSkipThresholdLUT[52];
3004*54e60f84SAndroid Build Coastguard Worker     /** Maps QP to skip thresholds when FTQ is disabled.  Valid range is 0-65535. */
3005*54e60f84SAndroid Build Coastguard Worker     uint16_t NonFTQSkipThresholdLUT[52];
3006*54e60f84SAndroid Build Coastguard Worker 
3007*54e60f84SAndroid Build Coastguard Worker     uint32_t reserved[VA_PADDING_HIGH];  // Reserved for future use.
3008*54e60f84SAndroid Build Coastguard Worker 
3009*54e60f84SAndroid Build Coastguard Worker } VAEncMiscParameterEncQuality;
3010*54e60f84SAndroid Build Coastguard Worker 
3011*54e60f84SAndroid Build Coastguard Worker /**
3012*54e60f84SAndroid Build Coastguard Worker  *  \brief Custom Encoder Rounding Offset Control.
3013*54e60f84SAndroid Build Coastguard Worker  *  Application may use this structure to set customized rounding
3014*54e60f84SAndroid Build Coastguard Worker  *  offset parameters for quantization.
3015*54e60f84SAndroid Build Coastguard Worker  *  Valid when \c VAConfigAttribCustomRoundingControl equals 1.
3016*54e60f84SAndroid Build Coastguard Worker  */
3017*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncMiscParameterCustomRoundingControl {
3018*54e60f84SAndroid Build Coastguard Worker     union {
3019*54e60f84SAndroid Build Coastguard Worker         struct {
3020*54e60f84SAndroid Build Coastguard Worker             /** \brief Enable customized rounding offset for intra blocks.
3021*54e60f84SAndroid Build Coastguard Worker              *  If 0, default value would be taken by driver for intra
3022*54e60f84SAndroid Build Coastguard Worker              *  rounding offset.
3023*54e60f84SAndroid Build Coastguard Worker              */
3024*54e60f84SAndroid Build Coastguard Worker             uint32_t    enable_custom_rouding_intra     : 1 ;
3025*54e60f84SAndroid Build Coastguard Worker 
3026*54e60f84SAndroid Build Coastguard Worker             /** \brief Intra rounding offset
3027*54e60f84SAndroid Build Coastguard Worker              *  Ignored if \c enable_custom_rouding_intra equals 0.
3028*54e60f84SAndroid Build Coastguard Worker              */
3029*54e60f84SAndroid Build Coastguard Worker             uint32_t    rounding_offset_intra           : 7;
3030*54e60f84SAndroid Build Coastguard Worker 
3031*54e60f84SAndroid Build Coastguard Worker             /** \brief Enable customized rounding offset for inter blocks.
3032*54e60f84SAndroid Build Coastguard Worker              *  If 0, default value would be taken by driver for inter
3033*54e60f84SAndroid Build Coastguard Worker              *  rounding offset.
3034*54e60f84SAndroid Build Coastguard Worker              */
3035*54e60f84SAndroid Build Coastguard Worker             uint32_t    enable_custom_rounding_inter    : 1 ;
3036*54e60f84SAndroid Build Coastguard Worker 
3037*54e60f84SAndroid Build Coastguard Worker             /** \brief Inter rounding offset
3038*54e60f84SAndroid Build Coastguard Worker              *  Ignored if \c enable_custom_rouding_inter equals 0.
3039*54e60f84SAndroid Build Coastguard Worker              */
3040*54e60f84SAndroid Build Coastguard Worker             uint32_t    rounding_offset_inter           : 7;
3041*54e60f84SAndroid Build Coastguard Worker 
3042*54e60f84SAndroid Build Coastguard Worker             /* Reserved */
3043*54e60f84SAndroid Build Coastguard Worker             uint32_t    reserved                        : 16;
3044*54e60f84SAndroid Build Coastguard Worker         }  bits;
3045*54e60f84SAndroid Build Coastguard Worker         uint32_t    value;
3046*54e60f84SAndroid Build Coastguard Worker     }   rounding_offset_setting;
3047*54e60f84SAndroid Build Coastguard Worker } VAEncMiscParameterCustomRoundingControl;
3048*54e60f84SAndroid Build Coastguard Worker 
3049*54e60f84SAndroid Build Coastguard Worker /**
3050*54e60f84SAndroid Build Coastguard Worker  * There will be cases where the bitstream buffer will not have enough room to hold
3051*54e60f84SAndroid Build Coastguard Worker  * the data for the entire slice, and the following flags will be used in the slice
3052*54e60f84SAndroid Build Coastguard Worker  * parameter to signal to the server for the possible cases.
3053*54e60f84SAndroid Build Coastguard Worker  * If a slice parameter buffer and slice data buffer pair is sent to the server with
3054*54e60f84SAndroid Build Coastguard Worker  * the slice data partially in the slice data buffer (BEGIN and MIDDLE cases below),
3055*54e60f84SAndroid Build Coastguard Worker  * then a slice parameter and data buffer needs to be sent again to complete this slice.
3056*54e60f84SAndroid Build Coastguard Worker  */
3057*54e60f84SAndroid Build Coastguard Worker #define VA_SLICE_DATA_FLAG_ALL      0x00    /* whole slice is in the buffer */
3058*54e60f84SAndroid Build Coastguard Worker #define VA_SLICE_DATA_FLAG_BEGIN    0x01    /* The beginning of the slice is in the buffer but the end if not */
3059*54e60f84SAndroid Build Coastguard Worker #define VA_SLICE_DATA_FLAG_MIDDLE   0x02    /* Neither beginning nor end of the slice is in the buffer */
3060*54e60f84SAndroid Build Coastguard Worker #define VA_SLICE_DATA_FLAG_END      0x04    /* end of the slice is in the buffer */
3061*54e60f84SAndroid Build Coastguard Worker 
3062*54e60f84SAndroid Build Coastguard Worker /* Codec-independent Slice Parameter Buffer base */
3063*54e60f84SAndroid Build Coastguard Worker typedef struct _VASliceParameterBufferBase {
3064*54e60f84SAndroid Build Coastguard Worker     uint32_t slice_data_size;   /* number of bytes in the slice data buffer for this slice */
3065*54e60f84SAndroid Build Coastguard Worker     uint32_t slice_data_offset; /* the offset to the first byte of slice data */
3066*54e60f84SAndroid Build Coastguard Worker     uint32_t slice_data_flag;   /* see VA_SLICE_DATA_FLAG_XXX definitions */
3067*54e60f84SAndroid Build Coastguard Worker } VASliceParameterBufferBase;
3068*54e60f84SAndroid Build Coastguard Worker 
3069*54e60f84SAndroid Build Coastguard Worker /**********************************
3070*54e60f84SAndroid Build Coastguard Worker  * JPEG common  data structures
3071*54e60f84SAndroid Build Coastguard Worker  **********************************/
3072*54e60f84SAndroid Build Coastguard Worker /**
3073*54e60f84SAndroid Build Coastguard Worker  * \brief Huffman table for JPEG decoding.
3074*54e60f84SAndroid Build Coastguard Worker  *
3075*54e60f84SAndroid Build Coastguard Worker  * This structure holds the complete Huffman tables. This is an
3076*54e60f84SAndroid Build Coastguard Worker  * aggregation of all Huffman table (DHT) segments maintained by the
3077*54e60f84SAndroid Build Coastguard Worker  * application. i.e. up to 2 Huffman tables are stored in there for
3078*54e60f84SAndroid Build Coastguard Worker  * baseline profile.
3079*54e60f84SAndroid Build Coastguard Worker  *
3080*54e60f84SAndroid Build Coastguard Worker  * The #load_huffman_table array can be used as a hint to notify the
3081*54e60f84SAndroid Build Coastguard Worker  * VA driver implementation about which table(s) actually changed
3082*54e60f84SAndroid Build Coastguard Worker  * since the last submission of this buffer.
3083*54e60f84SAndroid Build Coastguard Worker  */
3084*54e60f84SAndroid Build Coastguard Worker typedef struct _VAHuffmanTableBufferJPEGBaseline {
3085*54e60f84SAndroid Build Coastguard Worker     /** \brief Specifies which #huffman_table is valid. */
3086*54e60f84SAndroid Build Coastguard Worker     uint8_t       load_huffman_table[2];
3087*54e60f84SAndroid Build Coastguard Worker     /** \brief Huffman tables indexed by table identifier (Th). */
3088*54e60f84SAndroid Build Coastguard Worker     struct {
3089*54e60f84SAndroid Build Coastguard Worker         /** @name DC table (up to 12 categories) */
3090*54e60f84SAndroid Build Coastguard Worker         /**@{*/
3091*54e60f84SAndroid Build Coastguard Worker         /** \brief Number of Huffman codes of length i + 1 (Li). */
3092*54e60f84SAndroid Build Coastguard Worker         uint8_t   num_dc_codes[16];
3093*54e60f84SAndroid Build Coastguard Worker         /** \brief Value associated with each Huffman code (Vij). */
3094*54e60f84SAndroid Build Coastguard Worker         uint8_t   dc_values[12];
3095*54e60f84SAndroid Build Coastguard Worker         /**@}*/
3096*54e60f84SAndroid Build Coastguard Worker         /** @name AC table (2 special codes + up to 16 * 10 codes) */
3097*54e60f84SAndroid Build Coastguard Worker         /**@{*/
3098*54e60f84SAndroid Build Coastguard Worker         /** \brief Number of Huffman codes of length i + 1 (Li). */
3099*54e60f84SAndroid Build Coastguard Worker         uint8_t   num_ac_codes[16];
3100*54e60f84SAndroid Build Coastguard Worker         /** \brief Value associated with each Huffman code (Vij). */
3101*54e60f84SAndroid Build Coastguard Worker         uint8_t   ac_values[162];
3102*54e60f84SAndroid Build Coastguard Worker         /** \brief Padding to 4-byte boundaries. Must be set to zero. */
3103*54e60f84SAndroid Build Coastguard Worker         uint8_t   pad[2];
3104*54e60f84SAndroid Build Coastguard Worker         /**@}*/
3105*54e60f84SAndroid Build Coastguard Worker     }                   huffman_table[2];
3106*54e60f84SAndroid Build Coastguard Worker 
3107*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
3108*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
3109*54e60f84SAndroid Build Coastguard Worker } VAHuffmanTableBufferJPEGBaseline;
3110*54e60f84SAndroid Build Coastguard Worker 
3111*54e60f84SAndroid Build Coastguard Worker /****************************
3112*54e60f84SAndroid Build Coastguard Worker  * MPEG-2 data structures
3113*54e60f84SAndroid Build Coastguard Worker  ****************************/
3114*54e60f84SAndroid Build Coastguard Worker 
3115*54e60f84SAndroid Build Coastguard Worker /* MPEG-2 Picture Parameter Buffer */
3116*54e60f84SAndroid Build Coastguard Worker /*
3117*54e60f84SAndroid Build Coastguard Worker  * For each frame or field, and before any slice data, a single
3118*54e60f84SAndroid Build Coastguard Worker  * picture parameter buffer must be send.
3119*54e60f84SAndroid Build Coastguard Worker  */
3120*54e60f84SAndroid Build Coastguard Worker typedef struct _VAPictureParameterBufferMPEG2 {
3121*54e60f84SAndroid Build Coastguard Worker     uint16_t horizontal_size;
3122*54e60f84SAndroid Build Coastguard Worker     uint16_t vertical_size;
3123*54e60f84SAndroid Build Coastguard Worker     VASurfaceID forward_reference_picture;
3124*54e60f84SAndroid Build Coastguard Worker     VASurfaceID backward_reference_picture;
3125*54e60f84SAndroid Build Coastguard Worker     /* meanings of the following fields are the same as in the standard */
3126*54e60f84SAndroid Build Coastguard Worker     int32_t picture_coding_type;
3127*54e60f84SAndroid Build Coastguard Worker     int32_t f_code; /* pack all four fcode into this */
3128*54e60f84SAndroid Build Coastguard Worker     union {
3129*54e60f84SAndroid Build Coastguard Worker         struct {
3130*54e60f84SAndroid Build Coastguard Worker             uint32_t intra_dc_precision     : 2;
3131*54e60f84SAndroid Build Coastguard Worker             uint32_t picture_structure      : 2;
3132*54e60f84SAndroid Build Coastguard Worker             uint32_t top_field_first        : 1;
3133*54e60f84SAndroid Build Coastguard Worker             uint32_t frame_pred_frame_dct       : 1;
3134*54e60f84SAndroid Build Coastguard Worker             uint32_t concealment_motion_vectors : 1;
3135*54e60f84SAndroid Build Coastguard Worker             uint32_t q_scale_type           : 1;
3136*54e60f84SAndroid Build Coastguard Worker             uint32_t intra_vlc_format       : 1;
3137*54e60f84SAndroid Build Coastguard Worker             uint32_t alternate_scan         : 1;
3138*54e60f84SAndroid Build Coastguard Worker             uint32_t repeat_first_field     : 1;
3139*54e60f84SAndroid Build Coastguard Worker             uint32_t progressive_frame      : 1;
3140*54e60f84SAndroid Build Coastguard Worker             uint32_t is_first_field         : 1; /* indicate whether the current field
3141*54e60f84SAndroid Build Coastguard Worker                                                               * is the first field for field picture
3142*54e60f84SAndroid Build Coastguard Worker                                                               */
3143*54e60f84SAndroid Build Coastguard Worker         } bits;
3144*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
3145*54e60f84SAndroid Build Coastguard Worker     } picture_coding_extension;
3146*54e60f84SAndroid Build Coastguard Worker 
3147*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
3148*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
3149*54e60f84SAndroid Build Coastguard Worker } VAPictureParameterBufferMPEG2;
3150*54e60f84SAndroid Build Coastguard Worker 
3151*54e60f84SAndroid Build Coastguard Worker /** MPEG-2 Inverse Quantization Matrix Buffer */
3152*54e60f84SAndroid Build Coastguard Worker typedef struct _VAIQMatrixBufferMPEG2 {
3153*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the MPEG-2 bitstream syntax element. */
3154*54e60f84SAndroid Build Coastguard Worker     int32_t load_intra_quantiser_matrix;
3155*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the MPEG-2 bitstream syntax element. */
3156*54e60f84SAndroid Build Coastguard Worker     int32_t load_non_intra_quantiser_matrix;
3157*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the MPEG-2 bitstream syntax element. */
3158*54e60f84SAndroid Build Coastguard Worker     int32_t load_chroma_intra_quantiser_matrix;
3159*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the MPEG-2 bitstream syntax element. */
3160*54e60f84SAndroid Build Coastguard Worker     int32_t load_chroma_non_intra_quantiser_matrix;
3161*54e60f84SAndroid Build Coastguard Worker     /** \brief Luminance intra matrix, in zig-zag scan order. */
3162*54e60f84SAndroid Build Coastguard Worker     uint8_t intra_quantiser_matrix[64];
3163*54e60f84SAndroid Build Coastguard Worker     /** \brief Luminance non-intra matrix, in zig-zag scan order. */
3164*54e60f84SAndroid Build Coastguard Worker     uint8_t non_intra_quantiser_matrix[64];
3165*54e60f84SAndroid Build Coastguard Worker     /** \brief Chroma intra matrix, in zig-zag scan order. */
3166*54e60f84SAndroid Build Coastguard Worker     uint8_t chroma_intra_quantiser_matrix[64];
3167*54e60f84SAndroid Build Coastguard Worker     /** \brief Chroma non-intra matrix, in zig-zag scan order. */
3168*54e60f84SAndroid Build Coastguard Worker     uint8_t chroma_non_intra_quantiser_matrix[64];
3169*54e60f84SAndroid Build Coastguard Worker 
3170*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
3171*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
3172*54e60f84SAndroid Build Coastguard Worker } VAIQMatrixBufferMPEG2;
3173*54e60f84SAndroid Build Coastguard Worker 
3174*54e60f84SAndroid Build Coastguard Worker /** MPEG-2 Slice Parameter Buffer */
3175*54e60f84SAndroid Build Coastguard Worker typedef struct _VASliceParameterBufferMPEG2 {
3176*54e60f84SAndroid Build Coastguard Worker     uint32_t slice_data_size;/* number of bytes in the slice data buffer for this slice */
3177*54e60f84SAndroid Build Coastguard Worker     uint32_t slice_data_offset;/* the offset to the first byte of slice data */
3178*54e60f84SAndroid Build Coastguard Worker     uint32_t slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */
3179*54e60f84SAndroid Build Coastguard Worker     uint32_t macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */
3180*54e60f84SAndroid Build Coastguard Worker     uint32_t slice_horizontal_position;
3181*54e60f84SAndroid Build Coastguard Worker     uint32_t slice_vertical_position;
3182*54e60f84SAndroid Build Coastguard Worker     int32_t quantiser_scale_code;
3183*54e60f84SAndroid Build Coastguard Worker     int32_t intra_slice_flag;
3184*54e60f84SAndroid Build Coastguard Worker 
3185*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
3186*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
3187*54e60f84SAndroid Build Coastguard Worker } VASliceParameterBufferMPEG2;
3188*54e60f84SAndroid Build Coastguard Worker 
3189*54e60f84SAndroid Build Coastguard Worker /** MPEG-2 Macroblock Parameter Buffer */
3190*54e60f84SAndroid Build Coastguard Worker typedef struct _VAMacroblockParameterBufferMPEG2 {
3191*54e60f84SAndroid Build Coastguard Worker     uint16_t macroblock_address;
3192*54e60f84SAndroid Build Coastguard Worker     /*
3193*54e60f84SAndroid Build Coastguard Worker      * macroblock_address (in raster scan order)
3194*54e60f84SAndroid Build Coastguard Worker      * top-left: 0
3195*54e60f84SAndroid Build Coastguard Worker      * bottom-right: picture-height-in-mb*picture-width-in-mb - 1
3196*54e60f84SAndroid Build Coastguard Worker      */
3197*54e60f84SAndroid Build Coastguard Worker     uint8_t macroblock_type;  /* see definition below */
3198*54e60f84SAndroid Build Coastguard Worker     union {
3199*54e60f84SAndroid Build Coastguard Worker         struct {
3200*54e60f84SAndroid Build Coastguard Worker             uint32_t frame_motion_type      : 2;
3201*54e60f84SAndroid Build Coastguard Worker             uint32_t field_motion_type      : 2;
3202*54e60f84SAndroid Build Coastguard Worker             uint32_t dct_type           : 1;
3203*54e60f84SAndroid Build Coastguard Worker         } bits;
3204*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
3205*54e60f84SAndroid Build Coastguard Worker     } macroblock_modes;
3206*54e60f84SAndroid Build Coastguard Worker     uint8_t motion_vertical_field_select;
3207*54e60f84SAndroid Build Coastguard Worker     /*
3208*54e60f84SAndroid Build Coastguard Worker      * motion_vertical_field_select:
3209*54e60f84SAndroid Build Coastguard Worker      * see section 6.3.17.2 in the spec
3210*54e60f84SAndroid Build Coastguard Worker      * only the lower 4 bits are used
3211*54e60f84SAndroid Build Coastguard Worker      * bit 0: first vector forward
3212*54e60f84SAndroid Build Coastguard Worker      * bit 1: first vector backward
3213*54e60f84SAndroid Build Coastguard Worker      * bit 2: second vector forward
3214*54e60f84SAndroid Build Coastguard Worker      * bit 3: second vector backward
3215*54e60f84SAndroid Build Coastguard Worker      */
3216*54e60f84SAndroid Build Coastguard Worker     int16_t PMV[2][2][2]; /* see Table 7-7 in the spec */
3217*54e60f84SAndroid Build Coastguard Worker     uint16_t coded_block_pattern;
3218*54e60f84SAndroid Build Coastguard Worker     /*
3219*54e60f84SAndroid Build Coastguard Worker      * The bitplanes for coded_block_pattern are described
3220*54e60f84SAndroid Build Coastguard Worker      * in Figure 6.10-12 in the spec
3221*54e60f84SAndroid Build Coastguard Worker      */
3222*54e60f84SAndroid Build Coastguard Worker 
3223*54e60f84SAndroid Build Coastguard Worker     /* Number of skipped macroblocks after this macroblock */
3224*54e60f84SAndroid Build Coastguard Worker     uint16_t num_skipped_macroblocks;
3225*54e60f84SAndroid Build Coastguard Worker 
3226*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
3227*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
3228*54e60f84SAndroid Build Coastguard Worker } VAMacroblockParameterBufferMPEG2;
3229*54e60f84SAndroid Build Coastguard Worker 
3230*54e60f84SAndroid Build Coastguard Worker /*
3231*54e60f84SAndroid Build Coastguard Worker  * OR'd flags for macroblock_type (section 6.3.17.1 in the spec)
3232*54e60f84SAndroid Build Coastguard Worker  */
3233*54e60f84SAndroid Build Coastguard Worker #define VA_MB_TYPE_MOTION_FORWARD   0x02
3234*54e60f84SAndroid Build Coastguard Worker #define VA_MB_TYPE_MOTION_BACKWARD  0x04
3235*54e60f84SAndroid Build Coastguard Worker #define VA_MB_TYPE_MOTION_PATTERN   0x08
3236*54e60f84SAndroid Build Coastguard Worker #define VA_MB_TYPE_MOTION_INTRA     0x10
3237*54e60f84SAndroid Build Coastguard Worker 
3238*54e60f84SAndroid Build Coastguard Worker /**
3239*54e60f84SAndroid Build Coastguard Worker  * MPEG-2 Residual Data Buffer
3240*54e60f84SAndroid Build Coastguard Worker  * For each macroblock, there wil be 64 shorts (16-bit) in the
3241*54e60f84SAndroid Build Coastguard Worker  * residual data buffer
3242*54e60f84SAndroid Build Coastguard Worker  */
3243*54e60f84SAndroid Build Coastguard Worker 
3244*54e60f84SAndroid Build Coastguard Worker /****************************
3245*54e60f84SAndroid Build Coastguard Worker  * MPEG-4 Part 2 data structures
3246*54e60f84SAndroid Build Coastguard Worker  ****************************/
3247*54e60f84SAndroid Build Coastguard Worker 
3248*54e60f84SAndroid Build Coastguard Worker /* MPEG-4 Picture Parameter Buffer */
3249*54e60f84SAndroid Build Coastguard Worker /*
3250*54e60f84SAndroid Build Coastguard Worker  * For each frame or field, and before any slice data, a single
3251*54e60f84SAndroid Build Coastguard Worker  * picture parameter buffer must be send.
3252*54e60f84SAndroid Build Coastguard Worker  */
3253*54e60f84SAndroid Build Coastguard Worker typedef struct _VAPictureParameterBufferMPEG4 {
3254*54e60f84SAndroid Build Coastguard Worker     uint16_t vop_width;
3255*54e60f84SAndroid Build Coastguard Worker     uint16_t vop_height;
3256*54e60f84SAndroid Build Coastguard Worker     VASurfaceID forward_reference_picture;
3257*54e60f84SAndroid Build Coastguard Worker     VASurfaceID backward_reference_picture;
3258*54e60f84SAndroid Build Coastguard Worker     union {
3259*54e60f84SAndroid Build Coastguard Worker         struct {
3260*54e60f84SAndroid Build Coastguard Worker             uint32_t short_video_header     : 1;
3261*54e60f84SAndroid Build Coastguard Worker             uint32_t chroma_format          : 2;
3262*54e60f84SAndroid Build Coastguard Worker             uint32_t interlaced         : 1;
3263*54e60f84SAndroid Build Coastguard Worker             uint32_t obmc_disable           : 1;
3264*54e60f84SAndroid Build Coastguard Worker             uint32_t sprite_enable          : 2;
3265*54e60f84SAndroid Build Coastguard Worker             uint32_t sprite_warping_accuracy    : 2;
3266*54e60f84SAndroid Build Coastguard Worker             uint32_t quant_type         : 1;
3267*54e60f84SAndroid Build Coastguard Worker             uint32_t quarter_sample         : 1;
3268*54e60f84SAndroid Build Coastguard Worker             uint32_t data_partitioned       : 1;
3269*54e60f84SAndroid Build Coastguard Worker             uint32_t reversible_vlc         : 1;
3270*54e60f84SAndroid Build Coastguard Worker             uint32_t resync_marker_disable      : 1;
3271*54e60f84SAndroid Build Coastguard Worker         } bits;
3272*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
3273*54e60f84SAndroid Build Coastguard Worker     } vol_fields;
3274*54e60f84SAndroid Build Coastguard Worker     uint8_t no_of_sprite_warping_points;
3275*54e60f84SAndroid Build Coastguard Worker     int16_t sprite_trajectory_du[3];
3276*54e60f84SAndroid Build Coastguard Worker     int16_t sprite_trajectory_dv[3];
3277*54e60f84SAndroid Build Coastguard Worker     uint8_t quant_precision;
3278*54e60f84SAndroid Build Coastguard Worker     union {
3279*54e60f84SAndroid Build Coastguard Worker         struct {
3280*54e60f84SAndroid Build Coastguard Worker             uint32_t vop_coding_type        : 2;
3281*54e60f84SAndroid Build Coastguard Worker             uint32_t backward_reference_vop_coding_type : 2;
3282*54e60f84SAndroid Build Coastguard Worker             uint32_t vop_rounding_type      : 1;
3283*54e60f84SAndroid Build Coastguard Worker             uint32_t intra_dc_vlc_thr       : 3;
3284*54e60f84SAndroid Build Coastguard Worker             uint32_t top_field_first        : 1;
3285*54e60f84SAndroid Build Coastguard Worker             uint32_t alternate_vertical_scan_flag   : 1;
3286*54e60f84SAndroid Build Coastguard Worker         } bits;
3287*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
3288*54e60f84SAndroid Build Coastguard Worker     } vop_fields;
3289*54e60f84SAndroid Build Coastguard Worker     uint8_t vop_fcode_forward;
3290*54e60f84SAndroid Build Coastguard Worker     uint8_t vop_fcode_backward;
3291*54e60f84SAndroid Build Coastguard Worker     uint16_t vop_time_increment_resolution;
3292*54e60f84SAndroid Build Coastguard Worker     /* short header related */
3293*54e60f84SAndroid Build Coastguard Worker     uint8_t num_gobs_in_vop;
3294*54e60f84SAndroid Build Coastguard Worker     uint8_t num_macroblocks_in_gob;
3295*54e60f84SAndroid Build Coastguard Worker     /* for direct mode prediction */
3296*54e60f84SAndroid Build Coastguard Worker     int16_t TRB;
3297*54e60f84SAndroid Build Coastguard Worker     int16_t TRD;
3298*54e60f84SAndroid Build Coastguard Worker 
3299*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
3300*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
3301*54e60f84SAndroid Build Coastguard Worker } VAPictureParameterBufferMPEG4;
3302*54e60f84SAndroid Build Coastguard Worker 
3303*54e60f84SAndroid Build Coastguard Worker /** MPEG-4 Inverse Quantization Matrix Buffer */
3304*54e60f84SAndroid Build Coastguard Worker typedef struct _VAIQMatrixBufferMPEG4 {
3305*54e60f84SAndroid Build Coastguard Worker     /** Same as the MPEG-4:2 bitstream syntax element. */
3306*54e60f84SAndroid Build Coastguard Worker     int32_t load_intra_quant_mat;
3307*54e60f84SAndroid Build Coastguard Worker     /** Same as the MPEG-4:2 bitstream syntax element. */
3308*54e60f84SAndroid Build Coastguard Worker     int32_t load_non_intra_quant_mat;
3309*54e60f84SAndroid Build Coastguard Worker     /** The matrix for intra blocks, in zig-zag scan order. */
3310*54e60f84SAndroid Build Coastguard Worker     uint8_t intra_quant_mat[64];
3311*54e60f84SAndroid Build Coastguard Worker     /** The matrix for non-intra blocks, in zig-zag scan order. */
3312*54e60f84SAndroid Build Coastguard Worker     uint8_t non_intra_quant_mat[64];
3313*54e60f84SAndroid Build Coastguard Worker 
3314*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
3315*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
3316*54e60f84SAndroid Build Coastguard Worker } VAIQMatrixBufferMPEG4;
3317*54e60f84SAndroid Build Coastguard Worker 
3318*54e60f84SAndroid Build Coastguard Worker /** MPEG-4 Slice Parameter Buffer */
3319*54e60f84SAndroid Build Coastguard Worker typedef struct _VASliceParameterBufferMPEG4 {
3320*54e60f84SAndroid Build Coastguard Worker     uint32_t slice_data_size;/* number of bytes in the slice data buffer for this slice */
3321*54e60f84SAndroid Build Coastguard Worker     uint32_t slice_data_offset;/* the offset to the first byte of slice data */
3322*54e60f84SAndroid Build Coastguard Worker     uint32_t slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */
3323*54e60f84SAndroid Build Coastguard Worker     uint32_t macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */
3324*54e60f84SAndroid Build Coastguard Worker     uint32_t macroblock_number;
3325*54e60f84SAndroid Build Coastguard Worker     int32_t quant_scale;
3326*54e60f84SAndroid Build Coastguard Worker 
3327*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
3328*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
3329*54e60f84SAndroid Build Coastguard Worker } VASliceParameterBufferMPEG4;
3330*54e60f84SAndroid Build Coastguard Worker 
3331*54e60f84SAndroid Build Coastguard Worker /**
3332*54e60f84SAndroid Build Coastguard Worker  VC-1 data structures
3333*54e60f84SAndroid Build Coastguard Worker */
3334*54e60f84SAndroid Build Coastguard Worker 
3335*54e60f84SAndroid Build Coastguard Worker typedef enum   /* see 7.1.1.32 */
3336*54e60f84SAndroid Build Coastguard Worker {
3337*54e60f84SAndroid Build Coastguard Worker     VAMvMode1Mv                        = 0,
3338*54e60f84SAndroid Build Coastguard Worker     VAMvMode1MvHalfPel                 = 1,
3339*54e60f84SAndroid Build Coastguard Worker     VAMvMode1MvHalfPelBilinear         = 2,
3340*54e60f84SAndroid Build Coastguard Worker     VAMvModeMixedMv                    = 3,
3341*54e60f84SAndroid Build Coastguard Worker     VAMvModeIntensityCompensation      = 4
3342*54e60f84SAndroid Build Coastguard Worker } VAMvModeVC1;
3343*54e60f84SAndroid Build Coastguard Worker 
3344*54e60f84SAndroid Build Coastguard Worker /** VC-1 Picture Parameter Buffer */
3345*54e60f84SAndroid Build Coastguard Worker /*
3346*54e60f84SAndroid Build Coastguard Worker  * For each picture, and before any slice data, a picture parameter
3347*54e60f84SAndroid Build Coastguard Worker  * buffer must be send. Multiple picture parameter buffers may be
3348*54e60f84SAndroid Build Coastguard Worker  * sent for a single picture. In that case picture parameters will
3349*54e60f84SAndroid Build Coastguard Worker  * apply to all slice data that follow it until a new picture
3350*54e60f84SAndroid Build Coastguard Worker  * parameter buffer is sent.
3351*54e60f84SAndroid Build Coastguard Worker  *
3352*54e60f84SAndroid Build Coastguard Worker  * Notes:
3353*54e60f84SAndroid Build Coastguard Worker  *   pic_quantizer_type should be set to the applicable quantizer
3354*54e60f84SAndroid Build Coastguard Worker  *   type as defined by QUANTIZER (J.1.19) and either
3355*54e60f84SAndroid Build Coastguard Worker  *   PQUANTIZER (7.1.1.8) or PQINDEX (7.1.1.6)
3356*54e60f84SAndroid Build Coastguard Worker  */
3357*54e60f84SAndroid Build Coastguard Worker typedef struct _VAPictureParameterBufferVC1 {
3358*54e60f84SAndroid Build Coastguard Worker     VASurfaceID forward_reference_picture;
3359*54e60f84SAndroid Build Coastguard Worker     VASurfaceID backward_reference_picture;
3360*54e60f84SAndroid Build Coastguard Worker     /* if out-of-loop post-processing is done on the render
3361*54e60f84SAndroid Build Coastguard Worker        target, then we need to keep the in-loop decoded
3362*54e60f84SAndroid Build Coastguard Worker        picture as a reference picture */
3363*54e60f84SAndroid Build Coastguard Worker     VASurfaceID inloop_decoded_picture;
3364*54e60f84SAndroid Build Coastguard Worker 
3365*54e60f84SAndroid Build Coastguard Worker     /* sequence layer for AP or meta data for SP and MP */
3366*54e60f84SAndroid Build Coastguard Worker     union {
3367*54e60f84SAndroid Build Coastguard Worker         struct {
3368*54e60f84SAndroid Build Coastguard Worker             uint32_t pulldown   : 1; /* SEQUENCE_LAYER::PULLDOWN */
3369*54e60f84SAndroid Build Coastguard Worker             uint32_t interlace  : 1; /* SEQUENCE_LAYER::INTERLACE */
3370*54e60f84SAndroid Build Coastguard Worker             uint32_t tfcntrflag : 1; /* SEQUENCE_LAYER::TFCNTRFLAG */
3371*54e60f84SAndroid Build Coastguard Worker             uint32_t finterpflag    : 1; /* SEQUENCE_LAYER::FINTERPFLAG */
3372*54e60f84SAndroid Build Coastguard Worker             uint32_t psf        : 1; /* SEQUENCE_LAYER::PSF */
3373*54e60f84SAndroid Build Coastguard Worker             uint32_t multires   : 1; /* METADATA::MULTIRES */
3374*54e60f84SAndroid Build Coastguard Worker             uint32_t overlap    : 1; /* METADATA::OVERLAP */
3375*54e60f84SAndroid Build Coastguard Worker             uint32_t syncmarker : 1; /* METADATA::SYNCMARKER */
3376*54e60f84SAndroid Build Coastguard Worker             uint32_t rangered   : 1; /* METADATA::RANGERED */
3377*54e60f84SAndroid Build Coastguard Worker             uint32_t max_b_frames   : 3; /* METADATA::MAXBFRAMES */
3378*54e60f84SAndroid Build Coastguard Worker             uint32_t profile    : 2; /* SEQUENCE_LAYER::PROFILE or The MSB of METADATA::PROFILE */
3379*54e60f84SAndroid Build Coastguard Worker         } bits;
3380*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
3381*54e60f84SAndroid Build Coastguard Worker     } sequence_fields;
3382*54e60f84SAndroid Build Coastguard Worker 
3383*54e60f84SAndroid Build Coastguard Worker     uint16_t coded_width;       /* ENTRY_POINT_LAYER::CODED_WIDTH */
3384*54e60f84SAndroid Build Coastguard Worker     uint16_t coded_height;  /* ENTRY_POINT_LAYER::CODED_HEIGHT */
3385*54e60f84SAndroid Build Coastguard Worker     union {
3386*54e60f84SAndroid Build Coastguard Worker         struct {
3387*54e60f84SAndroid Build Coastguard Worker             uint32_t broken_link    : 1; /* ENTRY_POINT_LAYER::BROKEN_LINK */
3388*54e60f84SAndroid Build Coastguard Worker             uint32_t closed_entry   : 1; /* ENTRY_POINT_LAYER::CLOSED_ENTRY */
3389*54e60f84SAndroid Build Coastguard Worker             uint32_t panscan_flag   : 1; /* ENTRY_POINT_LAYER::PANSCAN_FLAG */
3390*54e60f84SAndroid Build Coastguard Worker             uint32_t loopfilter : 1; /* ENTRY_POINT_LAYER::LOOPFILTER */
3391*54e60f84SAndroid Build Coastguard Worker         } bits;
3392*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
3393*54e60f84SAndroid Build Coastguard Worker     } entrypoint_fields;
3394*54e60f84SAndroid Build Coastguard Worker     uint8_t conditional_overlap_flag; /* ENTRY_POINT_LAYER::CONDOVER */
3395*54e60f84SAndroid Build Coastguard Worker     uint8_t fast_uvmc_flag; /* ENTRY_POINT_LAYER::FASTUVMC */
3396*54e60f84SAndroid Build Coastguard Worker     union {
3397*54e60f84SAndroid Build Coastguard Worker         struct {
3398*54e60f84SAndroid Build Coastguard Worker             uint32_t luma_flag  : 1; /* ENTRY_POINT_LAYER::RANGE_MAPY_FLAG */
3399*54e60f84SAndroid Build Coastguard Worker             uint32_t luma       : 3; /* ENTRY_POINT_LAYER::RANGE_MAPY */
3400*54e60f84SAndroid Build Coastguard Worker             uint32_t chroma_flag    : 1; /* ENTRY_POINT_LAYER::RANGE_MAPUV_FLAG */
3401*54e60f84SAndroid Build Coastguard Worker             uint32_t chroma     : 3; /* ENTRY_POINT_LAYER::RANGE_MAPUV */
3402*54e60f84SAndroid Build Coastguard Worker         } bits;
3403*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
3404*54e60f84SAndroid Build Coastguard Worker     } range_mapping_fields;
3405*54e60f84SAndroid Build Coastguard Worker 
3406*54e60f84SAndroid Build Coastguard Worker     uint8_t b_picture_fraction; /* Index for PICTURE_LAYER::BFRACTION value in Table 40 (7.1.1.14) */
3407*54e60f84SAndroid Build Coastguard Worker     uint8_t cbp_table;      /* PICTURE_LAYER::CBPTAB/ICBPTAB */
3408*54e60f84SAndroid Build Coastguard Worker     uint8_t mb_mode_table;  /* PICTURE_LAYER::MBMODETAB */
3409*54e60f84SAndroid Build Coastguard Worker     uint8_t range_reduction_frame;/* PICTURE_LAYER::RANGEREDFRM */
3410*54e60f84SAndroid Build Coastguard Worker     uint8_t rounding_control;   /* PICTURE_LAYER::RNDCTRL */
3411*54e60f84SAndroid Build Coastguard Worker     uint8_t post_processing;    /* PICTURE_LAYER::POSTPROC */
3412*54e60f84SAndroid Build Coastguard Worker     uint8_t picture_resolution_index;   /* PICTURE_LAYER::RESPIC */
3413*54e60f84SAndroid Build Coastguard Worker     uint8_t luma_scale;     /* PICTURE_LAYER::LUMSCALE */
3414*54e60f84SAndroid Build Coastguard Worker     uint8_t luma_shift;     /* PICTURE_LAYER::LUMSHIFT */
3415*54e60f84SAndroid Build Coastguard Worker 
3416*54e60f84SAndroid Build Coastguard Worker     union {
3417*54e60f84SAndroid Build Coastguard Worker         struct {
3418*54e60f84SAndroid Build Coastguard Worker             uint32_t picture_type       : 3; /* PICTURE_LAYER::PTYPE */
3419*54e60f84SAndroid Build Coastguard Worker             uint32_t frame_coding_mode  : 3; /* PICTURE_LAYER::FCM */
3420*54e60f84SAndroid Build Coastguard Worker             uint32_t top_field_first    : 1; /* PICTURE_LAYER::TFF */
3421*54e60f84SAndroid Build Coastguard Worker             uint32_t is_first_field     : 1; /* set to 1 if it is the first field */
3422*54e60f84SAndroid Build Coastguard Worker             uint32_t intensity_compensation : 1; /* PICTURE_LAYER::INTCOMP */
3423*54e60f84SAndroid Build Coastguard Worker         } bits;
3424*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
3425*54e60f84SAndroid Build Coastguard Worker     } picture_fields;
3426*54e60f84SAndroid Build Coastguard Worker     union {
3427*54e60f84SAndroid Build Coastguard Worker         struct {
3428*54e60f84SAndroid Build Coastguard Worker             uint32_t mv_type_mb : 1;    /* PICTURE::MVTYPEMB */
3429*54e60f84SAndroid Build Coastguard Worker             uint32_t direct_mb  : 1;    /* PICTURE::DIRECTMB */
3430*54e60f84SAndroid Build Coastguard Worker             uint32_t skip_mb    : 1;    /* PICTURE::SKIPMB */
3431*54e60f84SAndroid Build Coastguard Worker             uint32_t field_tx   : 1;    /* PICTURE::FIELDTX */
3432*54e60f84SAndroid Build Coastguard Worker             uint32_t forward_mb : 1;    /* PICTURE::FORWARDMB */
3433*54e60f84SAndroid Build Coastguard Worker             uint32_t ac_pred    : 1;    /* PICTURE::ACPRED */
3434*54e60f84SAndroid Build Coastguard Worker             uint32_t overflags  : 1;    /* PICTURE::OVERFLAGS */
3435*54e60f84SAndroid Build Coastguard Worker         } flags;
3436*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
3437*54e60f84SAndroid Build Coastguard Worker     } raw_coding;
3438*54e60f84SAndroid Build Coastguard Worker     union {
3439*54e60f84SAndroid Build Coastguard Worker         struct {
3440*54e60f84SAndroid Build Coastguard Worker             uint32_t bp_mv_type_mb   : 1;    /* PICTURE::MVTYPEMB */
3441*54e60f84SAndroid Build Coastguard Worker             uint32_t bp_direct_mb    : 1;    /* PICTURE::DIRECTMB */
3442*54e60f84SAndroid Build Coastguard Worker             uint32_t bp_skip_mb      : 1;    /* PICTURE::SKIPMB */
3443*54e60f84SAndroid Build Coastguard Worker             uint32_t bp_field_tx     : 1;    /* PICTURE::FIELDTX */
3444*54e60f84SAndroid Build Coastguard Worker             uint32_t bp_forward_mb   : 1;    /* PICTURE::FORWARDMB */
3445*54e60f84SAndroid Build Coastguard Worker             uint32_t bp_ac_pred      : 1;    /* PICTURE::ACPRED */
3446*54e60f84SAndroid Build Coastguard Worker             uint32_t bp_overflags    : 1;    /* PICTURE::OVERFLAGS */
3447*54e60f84SAndroid Build Coastguard Worker         } flags;
3448*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
3449*54e60f84SAndroid Build Coastguard Worker     } bitplane_present; /* signal what bitplane is being passed via the bitplane buffer */
3450*54e60f84SAndroid Build Coastguard Worker     union {
3451*54e60f84SAndroid Build Coastguard Worker         struct {
3452*54e60f84SAndroid Build Coastguard Worker             uint32_t reference_distance_flag : 1;/* PICTURE_LAYER::REFDIST_FLAG */
3453*54e60f84SAndroid Build Coastguard Worker             uint32_t reference_distance : 5;/* PICTURE_LAYER::REFDIST */
3454*54e60f84SAndroid Build Coastguard Worker             uint32_t num_reference_pictures: 1;/* PICTURE_LAYER::NUMREF */
3455*54e60f84SAndroid Build Coastguard Worker             uint32_t reference_field_pic_indicator  : 1;/* PICTURE_LAYER::REFFIELD */
3456*54e60f84SAndroid Build Coastguard Worker         } bits;
3457*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
3458*54e60f84SAndroid Build Coastguard Worker     } reference_fields;
3459*54e60f84SAndroid Build Coastguard Worker     union {
3460*54e60f84SAndroid Build Coastguard Worker         struct {
3461*54e60f84SAndroid Build Coastguard Worker             uint32_t mv_mode        : 3; /* PICTURE_LAYER::MVMODE */
3462*54e60f84SAndroid Build Coastguard Worker             uint32_t mv_mode2       : 3; /* PICTURE_LAYER::MVMODE2 */
3463*54e60f84SAndroid Build Coastguard Worker             uint32_t mv_table       : 3; /* PICTURE_LAYER::MVTAB/IMVTAB */
3464*54e60f84SAndroid Build Coastguard Worker             uint32_t two_mv_block_pattern_table: 2; /* PICTURE_LAYER::2MVBPTAB */
3465*54e60f84SAndroid Build Coastguard Worker             uint32_t four_mv_switch     : 1; /* PICTURE_LAYER::4MVSWITCH */
3466*54e60f84SAndroid Build Coastguard Worker             uint32_t four_mv_block_pattern_table : 2; /* PICTURE_LAYER::4MVBPTAB */
3467*54e60f84SAndroid Build Coastguard Worker             uint32_t extended_mv_flag   : 1; /* ENTRY_POINT_LAYER::EXTENDED_MV */
3468*54e60f84SAndroid Build Coastguard Worker             uint32_t extended_mv_range  : 2; /* PICTURE_LAYER::MVRANGE */
3469*54e60f84SAndroid Build Coastguard Worker             uint32_t extended_dmv_flag  : 1; /* ENTRY_POINT_LAYER::EXTENDED_DMV */
3470*54e60f84SAndroid Build Coastguard Worker             uint32_t extended_dmv_range : 2; /* PICTURE_LAYER::DMVRANGE */
3471*54e60f84SAndroid Build Coastguard Worker         } bits;
3472*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
3473*54e60f84SAndroid Build Coastguard Worker     } mv_fields;
3474*54e60f84SAndroid Build Coastguard Worker     union {
3475*54e60f84SAndroid Build Coastguard Worker         struct {
3476*54e60f84SAndroid Build Coastguard Worker             uint32_t dquant : 2;    /* ENTRY_POINT_LAYER::DQUANT */
3477*54e60f84SAndroid Build Coastguard Worker             uint32_t quantizer     : 2;     /* ENTRY_POINT_LAYER::QUANTIZER */
3478*54e60f84SAndroid Build Coastguard Worker             uint32_t half_qp    : 1;    /* PICTURE_LAYER::HALFQP */
3479*54e60f84SAndroid Build Coastguard Worker             uint32_t pic_quantizer_scale : 5;/* PICTURE_LAYER::PQUANT */
3480*54e60f84SAndroid Build Coastguard Worker             uint32_t pic_quantizer_type : 1;/* PICTURE_LAYER::PQUANTIZER */
3481*54e60f84SAndroid Build Coastguard Worker             uint32_t dq_frame   : 1;    /* VOPDQUANT::DQUANTFRM */
3482*54e60f84SAndroid Build Coastguard Worker             uint32_t dq_profile : 2;    /* VOPDQUANT::DQPROFILE */
3483*54e60f84SAndroid Build Coastguard Worker             uint32_t dq_sb_edge : 2;    /* VOPDQUANT::DQSBEDGE */
3484*54e60f84SAndroid Build Coastguard Worker             uint32_t dq_db_edge     : 2;    /* VOPDQUANT::DQDBEDGE */
3485*54e60f84SAndroid Build Coastguard Worker             uint32_t dq_binary_level : 1;   /* VOPDQUANT::DQBILEVEL */
3486*54e60f84SAndroid Build Coastguard Worker             uint32_t alt_pic_quantizer : 5;/* VOPDQUANT::ALTPQUANT */
3487*54e60f84SAndroid Build Coastguard Worker         } bits;
3488*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
3489*54e60f84SAndroid Build Coastguard Worker     } pic_quantizer_fields;
3490*54e60f84SAndroid Build Coastguard Worker     union {
3491*54e60f84SAndroid Build Coastguard Worker         struct {
3492*54e60f84SAndroid Build Coastguard Worker             uint32_t variable_sized_transform_flag  : 1;/* ENTRY_POINT_LAYER::VSTRANSFORM */
3493*54e60f84SAndroid Build Coastguard Worker             uint32_t mb_level_transform_type_flag   : 1;/* PICTURE_LAYER::TTMBF */
3494*54e60f84SAndroid Build Coastguard Worker             uint32_t frame_level_transform_type : 2;/* PICTURE_LAYER::TTFRM */
3495*54e60f84SAndroid Build Coastguard Worker             uint32_t transform_ac_codingset_idx1    : 2;/* PICTURE_LAYER::TRANSACFRM */
3496*54e60f84SAndroid Build Coastguard Worker             uint32_t transform_ac_codingset_idx2    : 2;/* PICTURE_LAYER::TRANSACFRM2 */
3497*54e60f84SAndroid Build Coastguard Worker             uint32_t intra_transform_dc_table   : 1;/* PICTURE_LAYER::TRANSDCTAB */
3498*54e60f84SAndroid Build Coastguard Worker         } bits;
3499*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
3500*54e60f84SAndroid Build Coastguard Worker     } transform_fields;
3501*54e60f84SAndroid Build Coastguard Worker 
3502*54e60f84SAndroid Build Coastguard Worker     uint8_t luma_scale2;                  /* PICTURE_LAYER::LUMSCALE2 */
3503*54e60f84SAndroid Build Coastguard Worker     uint8_t luma_shift2;                  /* PICTURE_LAYER::LUMSHIFT2 */
3504*54e60f84SAndroid Build Coastguard Worker     uint8_t intensity_compensation_field; /* Index for PICTURE_LAYER::INTCOMPFIELD value in Table 109 (9.1.1.48) */
3505*54e60f84SAndroid Build Coastguard Worker 
3506*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
3507*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_MEDIUM - 1];
3508*54e60f84SAndroid Build Coastguard Worker } VAPictureParameterBufferVC1;
3509*54e60f84SAndroid Build Coastguard Worker 
3510*54e60f84SAndroid Build Coastguard Worker /** VC-1 Bitplane Buffer
3511*54e60f84SAndroid Build Coastguard Worker There will be at most three bitplanes coded in any picture header. To send
3512*54e60f84SAndroid Build Coastguard Worker the bitplane data more efficiently, each byte is divided in two nibbles, with
3513*54e60f84SAndroid Build Coastguard Worker each nibble carrying three bitplanes for one macroblock.  The following table
3514*54e60f84SAndroid Build Coastguard Worker shows the bitplane data arrangement within each nibble based on the picture
3515*54e60f84SAndroid Build Coastguard Worker type.
3516*54e60f84SAndroid Build Coastguard Worker 
3517*54e60f84SAndroid Build Coastguard Worker Picture Type    Bit3        Bit2        Bit1        Bit0
3518*54e60f84SAndroid Build Coastguard Worker I or BI             OVERFLAGS   ACPRED      FIELDTX
3519*54e60f84SAndroid Build Coastguard Worker P               MYTYPEMB    SKIPMB      DIRECTMB
3520*54e60f84SAndroid Build Coastguard Worker B               FORWARDMB   SKIPMB      DIRECTMB
3521*54e60f84SAndroid Build Coastguard Worker 
3522*54e60f84SAndroid Build Coastguard Worker Within each byte, the lower nibble is for the first MB and the upper nibble is
3523*54e60f84SAndroid Build Coastguard Worker for the second MB.  E.g. the lower nibble of the first byte in the bitplane
3524*54e60f84SAndroid Build Coastguard Worker buffer is for Macroblock #1 and the upper nibble of the first byte is for
3525*54e60f84SAndroid Build Coastguard Worker Macroblock #2 in the first row.
3526*54e60f84SAndroid Build Coastguard Worker */
3527*54e60f84SAndroid Build Coastguard Worker 
3528*54e60f84SAndroid Build Coastguard Worker /* VC-1 Slice Parameter Buffer */
3529*54e60f84SAndroid Build Coastguard Worker typedef struct _VASliceParameterBufferVC1 {
3530*54e60f84SAndroid Build Coastguard Worker     uint32_t slice_data_size;/* number of bytes in the slice data buffer for this slice */
3531*54e60f84SAndroid Build Coastguard Worker     uint32_t slice_data_offset;/* the offset to the first byte of slice data */
3532*54e60f84SAndroid Build Coastguard Worker     uint32_t slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */
3533*54e60f84SAndroid Build Coastguard Worker     uint32_t macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */
3534*54e60f84SAndroid Build Coastguard Worker     uint32_t slice_vertical_position;
3535*54e60f84SAndroid Build Coastguard Worker 
3536*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
3537*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
3538*54e60f84SAndroid Build Coastguard Worker } VASliceParameterBufferVC1;
3539*54e60f84SAndroid Build Coastguard Worker 
3540*54e60f84SAndroid Build Coastguard Worker /* VC-1 Slice Data Buffer */
3541*54e60f84SAndroid Build Coastguard Worker /*
3542*54e60f84SAndroid Build Coastguard Worker This is simplely a buffer containing raw bit-stream bytes
3543*54e60f84SAndroid Build Coastguard Worker */
3544*54e60f84SAndroid Build Coastguard Worker 
3545*54e60f84SAndroid Build Coastguard Worker /****************************
3546*54e60f84SAndroid Build Coastguard Worker  * H.264/AVC data structures
3547*54e60f84SAndroid Build Coastguard Worker  ****************************/
3548*54e60f84SAndroid Build Coastguard Worker 
3549*54e60f84SAndroid Build Coastguard Worker typedef struct _VAPictureH264 {
3550*54e60f84SAndroid Build Coastguard Worker     VASurfaceID picture_id;
3551*54e60f84SAndroid Build Coastguard Worker     uint32_t frame_idx;
3552*54e60f84SAndroid Build Coastguard Worker     uint32_t flags;
3553*54e60f84SAndroid Build Coastguard Worker     int32_t TopFieldOrderCnt;
3554*54e60f84SAndroid Build Coastguard Worker     int32_t BottomFieldOrderCnt;
3555*54e60f84SAndroid Build Coastguard Worker 
3556*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
3557*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
3558*54e60f84SAndroid Build Coastguard Worker } VAPictureH264;
3559*54e60f84SAndroid Build Coastguard Worker /* flags in VAPictureH264 could be OR of the following */
3560*54e60f84SAndroid Build Coastguard Worker #define VA_PICTURE_H264_INVALID         0x00000001
3561*54e60f84SAndroid Build Coastguard Worker #define VA_PICTURE_H264_TOP_FIELD       0x00000002
3562*54e60f84SAndroid Build Coastguard Worker #define VA_PICTURE_H264_BOTTOM_FIELD        0x00000004
3563*54e60f84SAndroid Build Coastguard Worker #define VA_PICTURE_H264_SHORT_TERM_REFERENCE    0x00000008
3564*54e60f84SAndroid Build Coastguard Worker #define VA_PICTURE_H264_LONG_TERM_REFERENCE 0x00000010
3565*54e60f84SAndroid Build Coastguard Worker 
3566*54e60f84SAndroid Build Coastguard Worker /** H.264 Picture Parameter Buffer */
3567*54e60f84SAndroid Build Coastguard Worker /*
3568*54e60f84SAndroid Build Coastguard Worker  * For each picture, and before any slice data, a single
3569*54e60f84SAndroid Build Coastguard Worker  * picture parameter buffer must be send.
3570*54e60f84SAndroid Build Coastguard Worker  */
3571*54e60f84SAndroid Build Coastguard Worker typedef struct _VAPictureParameterBufferH264 {
3572*54e60f84SAndroid Build Coastguard Worker     VAPictureH264 CurrPic;
3573*54e60f84SAndroid Build Coastguard Worker     VAPictureH264 ReferenceFrames[16];  /* in DPB */
3574*54e60f84SAndroid Build Coastguard Worker     uint16_t picture_width_in_mbs_minus1;
3575*54e60f84SAndroid Build Coastguard Worker     uint16_t picture_height_in_mbs_minus1;
3576*54e60f84SAndroid Build Coastguard Worker     uint8_t bit_depth_luma_minus8;
3577*54e60f84SAndroid Build Coastguard Worker     uint8_t bit_depth_chroma_minus8;
3578*54e60f84SAndroid Build Coastguard Worker     uint8_t num_ref_frames;
3579*54e60f84SAndroid Build Coastguard Worker     union {
3580*54e60f84SAndroid Build Coastguard Worker         struct {
3581*54e60f84SAndroid Build Coastguard Worker             uint32_t chroma_format_idc          : 2;
3582*54e60f84SAndroid Build Coastguard Worker             uint32_t residual_colour_transform_flag     : 1; /* Renamed to separate_colour_plane_flag in newer standard versions. */
3583*54e60f84SAndroid Build Coastguard Worker             uint32_t gaps_in_frame_num_value_allowed_flag   : 1;
3584*54e60f84SAndroid Build Coastguard Worker             uint32_t frame_mbs_only_flag            : 1;
3585*54e60f84SAndroid Build Coastguard Worker             uint32_t mb_adaptive_frame_field_flag       : 1;
3586*54e60f84SAndroid Build Coastguard Worker             uint32_t direct_8x8_inference_flag      : 1;
3587*54e60f84SAndroid Build Coastguard Worker             uint32_t MinLumaBiPredSize8x8           : 1; /* see A.3.3.2 */
3588*54e60f84SAndroid Build Coastguard Worker             uint32_t log2_max_frame_num_minus4      : 4;
3589*54e60f84SAndroid Build Coastguard Worker             uint32_t pic_order_cnt_type         : 2;
3590*54e60f84SAndroid Build Coastguard Worker             uint32_t log2_max_pic_order_cnt_lsb_minus4  : 4;
3591*54e60f84SAndroid Build Coastguard Worker             uint32_t delta_pic_order_always_zero_flag   : 1;
3592*54e60f84SAndroid Build Coastguard Worker         } bits;
3593*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
3594*54e60f84SAndroid Build Coastguard Worker     } seq_fields;
3595*54e60f84SAndroid Build Coastguard Worker     // FMO is not supported.
3596*54e60f84SAndroid Build Coastguard Worker     va_deprecated uint8_t num_slice_groups_minus1;
3597*54e60f84SAndroid Build Coastguard Worker     va_deprecated uint8_t slice_group_map_type;
3598*54e60f84SAndroid Build Coastguard Worker     va_deprecated uint16_t slice_group_change_rate_minus1;
3599*54e60f84SAndroid Build Coastguard Worker     int8_t pic_init_qp_minus26;
3600*54e60f84SAndroid Build Coastguard Worker     int8_t pic_init_qs_minus26;
3601*54e60f84SAndroid Build Coastguard Worker     int8_t chroma_qp_index_offset;
3602*54e60f84SAndroid Build Coastguard Worker     int8_t second_chroma_qp_index_offset;
3603*54e60f84SAndroid Build Coastguard Worker     union {
3604*54e60f84SAndroid Build Coastguard Worker         struct {
3605*54e60f84SAndroid Build Coastguard Worker             uint32_t entropy_coding_mode_flag   : 1;
3606*54e60f84SAndroid Build Coastguard Worker             uint32_t weighted_pred_flag     : 1;
3607*54e60f84SAndroid Build Coastguard Worker             uint32_t weighted_bipred_idc        : 2;
3608*54e60f84SAndroid Build Coastguard Worker             uint32_t transform_8x8_mode_flag    : 1;
3609*54e60f84SAndroid Build Coastguard Worker             uint32_t field_pic_flag         : 1;
3610*54e60f84SAndroid Build Coastguard Worker             uint32_t constrained_intra_pred_flag    : 1;
3611*54e60f84SAndroid Build Coastguard Worker             uint32_t pic_order_present_flag         : 1; /* Renamed to bottom_field_pic_order_in_frame_present_flag in newer standard versions. */
3612*54e60f84SAndroid Build Coastguard Worker             uint32_t deblocking_filter_control_present_flag : 1;
3613*54e60f84SAndroid Build Coastguard Worker             uint32_t redundant_pic_cnt_present_flag     : 1;
3614*54e60f84SAndroid Build Coastguard Worker             uint32_t reference_pic_flag         : 1; /* nal_ref_idc != 0 */
3615*54e60f84SAndroid Build Coastguard Worker         } bits;
3616*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
3617*54e60f84SAndroid Build Coastguard Worker     } pic_fields;
3618*54e60f84SAndroid Build Coastguard Worker     uint16_t frame_num;
3619*54e60f84SAndroid Build Coastguard Worker 
3620*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
3621*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_MEDIUM];
3622*54e60f84SAndroid Build Coastguard Worker } VAPictureParameterBufferH264;
3623*54e60f84SAndroid Build Coastguard Worker 
3624*54e60f84SAndroid Build Coastguard Worker /** H.264 Inverse Quantization Matrix Buffer */
3625*54e60f84SAndroid Build Coastguard Worker typedef struct _VAIQMatrixBufferH264 {
3626*54e60f84SAndroid Build Coastguard Worker     /** \brief 4x4 scaling list, in raster scan order. */
3627*54e60f84SAndroid Build Coastguard Worker     uint8_t ScalingList4x4[6][16];
3628*54e60f84SAndroid Build Coastguard Worker     /** \brief 8x8 scaling list, in raster scan order. */
3629*54e60f84SAndroid Build Coastguard Worker     uint8_t ScalingList8x8[2][64];
3630*54e60f84SAndroid Build Coastguard Worker 
3631*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
3632*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
3633*54e60f84SAndroid Build Coastguard Worker } VAIQMatrixBufferH264;
3634*54e60f84SAndroid Build Coastguard Worker 
3635*54e60f84SAndroid Build Coastguard Worker /** H.264 Slice Parameter Buffer */
3636*54e60f84SAndroid Build Coastguard Worker typedef struct _VASliceParameterBufferH264 {
3637*54e60f84SAndroid Build Coastguard Worker     uint32_t slice_data_size;/* number of bytes in the slice data buffer for this slice */
3638*54e60f84SAndroid Build Coastguard Worker     /** \brief Byte offset to the NAL Header Unit for this slice. */
3639*54e60f84SAndroid Build Coastguard Worker     uint32_t slice_data_offset;
3640*54e60f84SAndroid Build Coastguard Worker     uint32_t slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */
3641*54e60f84SAndroid Build Coastguard Worker     /**
3642*54e60f84SAndroid Build Coastguard Worker      * \brief Bit offset from NAL Header Unit to the begining of slice_data().
3643*54e60f84SAndroid Build Coastguard Worker      *
3644*54e60f84SAndroid Build Coastguard Worker      * This bit offset is relative to and includes the NAL unit byte
3645*54e60f84SAndroid Build Coastguard Worker      * and represents the number of bits parsed in the slice_header()
3646*54e60f84SAndroid Build Coastguard Worker      * after the removal of any emulation prevention bytes in
3647*54e60f84SAndroid Build Coastguard Worker      * there. However, the slice data buffer passed to the hardware is
3648*54e60f84SAndroid Build Coastguard Worker      * the original bitstream, thus including any emulation prevention
3649*54e60f84SAndroid Build Coastguard Worker      * bytes.
3650*54e60f84SAndroid Build Coastguard Worker      */
3651*54e60f84SAndroid Build Coastguard Worker     uint16_t slice_data_bit_offset;
3652*54e60f84SAndroid Build Coastguard Worker     uint16_t first_mb_in_slice;
3653*54e60f84SAndroid Build Coastguard Worker     uint8_t slice_type;
3654*54e60f84SAndroid Build Coastguard Worker     uint8_t direct_spatial_mv_pred_flag;
3655*54e60f84SAndroid Build Coastguard Worker     /**
3656*54e60f84SAndroid Build Coastguard Worker      * H264/AVC syntax element
3657*54e60f84SAndroid Build Coastguard Worker      *
3658*54e60f84SAndroid Build Coastguard Worker      * if num_ref_idx_active_override_flag equals 0, host decoder should
3659*54e60f84SAndroid Build Coastguard Worker      * set its value to num_ref_idx_l0_default_active_minus1.
3660*54e60f84SAndroid Build Coastguard Worker      */
3661*54e60f84SAndroid Build Coastguard Worker     uint8_t num_ref_idx_l0_active_minus1;
3662*54e60f84SAndroid Build Coastguard Worker     /**
3663*54e60f84SAndroid Build Coastguard Worker      * H264/AVC syntax element
3664*54e60f84SAndroid Build Coastguard Worker      *
3665*54e60f84SAndroid Build Coastguard Worker      * if num_ref_idx_active_override_flag equals 0, host decoder should
3666*54e60f84SAndroid Build Coastguard Worker      * set its value to num_ref_idx_l1_default_active_minus1.
3667*54e60f84SAndroid Build Coastguard Worker      */
3668*54e60f84SAndroid Build Coastguard Worker     uint8_t num_ref_idx_l1_active_minus1;
3669*54e60f84SAndroid Build Coastguard Worker     uint8_t cabac_init_idc;
3670*54e60f84SAndroid Build Coastguard Worker     int8_t slice_qp_delta;
3671*54e60f84SAndroid Build Coastguard Worker     uint8_t disable_deblocking_filter_idc;
3672*54e60f84SAndroid Build Coastguard Worker     int8_t slice_alpha_c0_offset_div2;
3673*54e60f84SAndroid Build Coastguard Worker     int8_t slice_beta_offset_div2;
3674*54e60f84SAndroid Build Coastguard Worker     VAPictureH264 RefPicList0[32];  /* See 8.2.4.2 */
3675*54e60f84SAndroid Build Coastguard Worker     VAPictureH264 RefPicList1[32];  /* See 8.2.4.2 */
3676*54e60f84SAndroid Build Coastguard Worker     uint8_t luma_log2_weight_denom;
3677*54e60f84SAndroid Build Coastguard Worker     uint8_t chroma_log2_weight_denom;
3678*54e60f84SAndroid Build Coastguard Worker     uint8_t luma_weight_l0_flag;
3679*54e60f84SAndroid Build Coastguard Worker     int16_t luma_weight_l0[32];
3680*54e60f84SAndroid Build Coastguard Worker     int16_t luma_offset_l0[32];
3681*54e60f84SAndroid Build Coastguard Worker     uint8_t chroma_weight_l0_flag;
3682*54e60f84SAndroid Build Coastguard Worker     int16_t chroma_weight_l0[32][2];
3683*54e60f84SAndroid Build Coastguard Worker     int16_t chroma_offset_l0[32][2];
3684*54e60f84SAndroid Build Coastguard Worker     uint8_t luma_weight_l1_flag;
3685*54e60f84SAndroid Build Coastguard Worker     int16_t luma_weight_l1[32];
3686*54e60f84SAndroid Build Coastguard Worker     int16_t luma_offset_l1[32];
3687*54e60f84SAndroid Build Coastguard Worker     uint8_t chroma_weight_l1_flag;
3688*54e60f84SAndroid Build Coastguard Worker     int16_t chroma_weight_l1[32][2];
3689*54e60f84SAndroid Build Coastguard Worker     int16_t chroma_offset_l1[32][2];
3690*54e60f84SAndroid Build Coastguard Worker 
3691*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
3692*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
3693*54e60f84SAndroid Build Coastguard Worker } VASliceParameterBufferH264;
3694*54e60f84SAndroid Build Coastguard Worker 
3695*54e60f84SAndroid Build Coastguard Worker /****************************
3696*54e60f84SAndroid Build Coastguard Worker  * Common encode data structures
3697*54e60f84SAndroid Build Coastguard Worker  ****************************/
3698*54e60f84SAndroid Build Coastguard Worker typedef enum {
3699*54e60f84SAndroid Build Coastguard Worker     VAEncPictureTypeIntra       = 0,
3700*54e60f84SAndroid Build Coastguard Worker     VAEncPictureTypePredictive      = 1,
3701*54e60f84SAndroid Build Coastguard Worker     VAEncPictureTypeBidirectional   = 2,
3702*54e60f84SAndroid Build Coastguard Worker } VAEncPictureType;
3703*54e60f84SAndroid Build Coastguard Worker 
3704*54e60f84SAndroid Build Coastguard Worker /**
3705*54e60f84SAndroid Build Coastguard Worker  * \brief Encode Slice Parameter Buffer.
3706*54e60f84SAndroid Build Coastguard Worker  *
3707*54e60f84SAndroid Build Coastguard Worker  * @deprecated
3708*54e60f84SAndroid Build Coastguard Worker  * This is a deprecated encode slice parameter buffer, All applications
3709*54e60f84SAndroid Build Coastguard Worker  * \c can use VAEncSliceParameterBufferXXX (XXX = MPEG2, HEVC, H264, JPEG)
3710*54e60f84SAndroid Build Coastguard Worker  */
3711*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncSliceParameterBuffer {
3712*54e60f84SAndroid Build Coastguard Worker     uint32_t start_row_number;  /* starting MB row number for this slice */
3713*54e60f84SAndroid Build Coastguard Worker     uint32_t slice_height;  /* slice height measured in MB */
3714*54e60f84SAndroid Build Coastguard Worker     union {
3715*54e60f84SAndroid Build Coastguard Worker         struct {
3716*54e60f84SAndroid Build Coastguard Worker             uint32_t is_intra   : 1;
3717*54e60f84SAndroid Build Coastguard Worker             uint32_t disable_deblocking_filter_idc : 2;
3718*54e60f84SAndroid Build Coastguard Worker             uint32_t uses_long_term_ref     : 1;
3719*54e60f84SAndroid Build Coastguard Worker             uint32_t is_long_term_ref       : 1;
3720*54e60f84SAndroid Build Coastguard Worker         } bits;
3721*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
3722*54e60f84SAndroid Build Coastguard Worker     } slice_flags;
3723*54e60f84SAndroid Build Coastguard Worker 
3724*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
3725*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
3726*54e60f84SAndroid Build Coastguard Worker } VAEncSliceParameterBuffer;
3727*54e60f84SAndroid Build Coastguard Worker 
3728*54e60f84SAndroid Build Coastguard Worker 
3729*54e60f84SAndroid Build Coastguard Worker /****************************
3730*54e60f84SAndroid Build Coastguard Worker  * H.263 specific encode data structures
3731*54e60f84SAndroid Build Coastguard Worker  ****************************/
3732*54e60f84SAndroid Build Coastguard Worker 
3733*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncSequenceParameterBufferH263 {
3734*54e60f84SAndroid Build Coastguard Worker     uint32_t intra_period;
3735*54e60f84SAndroid Build Coastguard Worker     uint32_t bits_per_second;
3736*54e60f84SAndroid Build Coastguard Worker     uint32_t frame_rate;
3737*54e60f84SAndroid Build Coastguard Worker     uint32_t initial_qp;
3738*54e60f84SAndroid Build Coastguard Worker     uint32_t min_qp;
3739*54e60f84SAndroid Build Coastguard Worker 
3740*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
3741*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
3742*54e60f84SAndroid Build Coastguard Worker } VAEncSequenceParameterBufferH263;
3743*54e60f84SAndroid Build Coastguard Worker 
3744*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncPictureParameterBufferH263 {
3745*54e60f84SAndroid Build Coastguard Worker     VASurfaceID reference_picture;
3746*54e60f84SAndroid Build Coastguard Worker     VASurfaceID reconstructed_picture;
3747*54e60f84SAndroid Build Coastguard Worker     VABufferID coded_buf;
3748*54e60f84SAndroid Build Coastguard Worker     uint16_t picture_width;
3749*54e60f84SAndroid Build Coastguard Worker     uint16_t picture_height;
3750*54e60f84SAndroid Build Coastguard Worker     VAEncPictureType picture_type;
3751*54e60f84SAndroid Build Coastguard Worker 
3752*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
3753*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
3754*54e60f84SAndroid Build Coastguard Worker } VAEncPictureParameterBufferH263;
3755*54e60f84SAndroid Build Coastguard Worker 
3756*54e60f84SAndroid Build Coastguard Worker /****************************
3757*54e60f84SAndroid Build Coastguard Worker  * MPEG-4 specific encode data structures
3758*54e60f84SAndroid Build Coastguard Worker  ****************************/
3759*54e60f84SAndroid Build Coastguard Worker 
3760*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncSequenceParameterBufferMPEG4 {
3761*54e60f84SAndroid Build Coastguard Worker     uint8_t profile_and_level_indication;
3762*54e60f84SAndroid Build Coastguard Worker     uint32_t intra_period;
3763*54e60f84SAndroid Build Coastguard Worker     uint32_t video_object_layer_width;
3764*54e60f84SAndroid Build Coastguard Worker     uint32_t video_object_layer_height;
3765*54e60f84SAndroid Build Coastguard Worker     uint32_t vop_time_increment_resolution;
3766*54e60f84SAndroid Build Coastguard Worker     uint32_t fixed_vop_rate;
3767*54e60f84SAndroid Build Coastguard Worker     uint32_t fixed_vop_time_increment;
3768*54e60f84SAndroid Build Coastguard Worker     uint32_t bits_per_second;
3769*54e60f84SAndroid Build Coastguard Worker     uint32_t frame_rate;
3770*54e60f84SAndroid Build Coastguard Worker     uint32_t initial_qp;
3771*54e60f84SAndroid Build Coastguard Worker     uint32_t min_qp;
3772*54e60f84SAndroid Build Coastguard Worker 
3773*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
3774*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
3775*54e60f84SAndroid Build Coastguard Worker } VAEncSequenceParameterBufferMPEG4;
3776*54e60f84SAndroid Build Coastguard Worker 
3777*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncPictureParameterBufferMPEG4 {
3778*54e60f84SAndroid Build Coastguard Worker     VASurfaceID reference_picture;
3779*54e60f84SAndroid Build Coastguard Worker     VASurfaceID reconstructed_picture;
3780*54e60f84SAndroid Build Coastguard Worker     VABufferID coded_buf;
3781*54e60f84SAndroid Build Coastguard Worker     uint16_t picture_width;
3782*54e60f84SAndroid Build Coastguard Worker     uint16_t picture_height;
3783*54e60f84SAndroid Build Coastguard Worker     uint32_t modulo_time_base; /* number of 1s */
3784*54e60f84SAndroid Build Coastguard Worker     uint32_t vop_time_increment;
3785*54e60f84SAndroid Build Coastguard Worker     VAEncPictureType picture_type;
3786*54e60f84SAndroid Build Coastguard Worker 
3787*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
3788*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
3789*54e60f84SAndroid Build Coastguard Worker } VAEncPictureParameterBufferMPEG4;
3790*54e60f84SAndroid Build Coastguard Worker 
3791*54e60f84SAndroid Build Coastguard Worker 
3792*54e60f84SAndroid Build Coastguard Worker 
3793*54e60f84SAndroid Build Coastguard Worker /** Buffer functions */
3794*54e60f84SAndroid Build Coastguard Worker 
3795*54e60f84SAndroid Build Coastguard Worker /**
3796*54e60f84SAndroid Build Coastguard Worker  * Creates a buffer for "num_elements" elements of "size" bytes and
3797*54e60f84SAndroid Build Coastguard Worker  * initalize with "data".
3798*54e60f84SAndroid Build Coastguard Worker  * if "data" is null, then the contents of the buffer data store
3799*54e60f84SAndroid Build Coastguard Worker  * are undefined.
3800*54e60f84SAndroid Build Coastguard Worker  * Basically there are two ways to get buffer data to the server side. One is
3801*54e60f84SAndroid Build Coastguard Worker  * to call vaCreateBuffer() with a non-null "data", which results the data being
3802*54e60f84SAndroid Build Coastguard Worker  * copied to the data store on the server side.  A different method that
3803*54e60f84SAndroid Build Coastguard Worker  * eliminates this copy is to pass null as "data" when calling vaCreateBuffer(),
3804*54e60f84SAndroid Build Coastguard Worker  * and then use vaMapBuffer() to map the data store from the server side to the
3805*54e60f84SAndroid Build Coastguard Worker  * client address space for access.
3806*54e60f84SAndroid Build Coastguard Worker  * The user must call vaDestroyBuffer() to destroy a buffer.
3807*54e60f84SAndroid Build Coastguard Worker  *  Note: image buffers are created by the library, not the client. Please see
3808*54e60f84SAndroid Build Coastguard Worker  *        vaCreateImage on how image buffers are managed.
3809*54e60f84SAndroid Build Coastguard Worker  */
3810*54e60f84SAndroid Build Coastguard Worker VAStatus vaCreateBuffer(
3811*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
3812*54e60f84SAndroid Build Coastguard Worker     VAContextID context,
3813*54e60f84SAndroid Build Coastguard Worker     VABufferType type,  /* in */
3814*54e60f84SAndroid Build Coastguard Worker     unsigned int size,  /* in */
3815*54e60f84SAndroid Build Coastguard Worker     unsigned int num_elements, /* in */
3816*54e60f84SAndroid Build Coastguard Worker     void *data,     /* in */
3817*54e60f84SAndroid Build Coastguard Worker     VABufferID *buf_id  /* out */
3818*54e60f84SAndroid Build Coastguard Worker );
3819*54e60f84SAndroid Build Coastguard Worker 
3820*54e60f84SAndroid Build Coastguard Worker /**
3821*54e60f84SAndroid Build Coastguard Worker  * Create a buffer for given width & height get unit_size, pitch, buf_id for 2D buffer
3822*54e60f84SAndroid Build Coastguard Worker  * for permb qp buffer, it will return unit_size for one MB or LCU and the pitch for alignments
3823*54e60f84SAndroid Build Coastguard Worker  * can call vaMapBuffer with this Buffer ID to get virtual address.
3824*54e60f84SAndroid Build Coastguard Worker  * e.g. AVC 1080P encode, 1920x1088, the size in MB is 120x68,but inside driver,
3825*54e60f84SAndroid Build Coastguard Worker  * maybe it should align with 256, and one byte present one Qp.so, call the function.
3826*54e60f84SAndroid Build Coastguard Worker  * then get unit_size = 1, pitch = 256. call vaMapBuffer to get the virtual address (pBuf).
3827*54e60f84SAndroid Build Coastguard Worker  * then read write the memory like 2D. the size is 256x68, application can only use 120x68
3828*54e60f84SAndroid Build Coastguard Worker  * pBuf + 256 is the start of next line.
3829*54e60f84SAndroid Build Coastguard Worker  * different driver implementation maybe return different unit_size and pitch
3830*54e60f84SAndroid Build Coastguard Worker  */
3831*54e60f84SAndroid Build Coastguard Worker VAStatus vaCreateBuffer2(
3832*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
3833*54e60f84SAndroid Build Coastguard Worker     VAContextID context,
3834*54e60f84SAndroid Build Coastguard Worker     VABufferType type,
3835*54e60f84SAndroid Build Coastguard Worker     unsigned int width,
3836*54e60f84SAndroid Build Coastguard Worker     unsigned int height,
3837*54e60f84SAndroid Build Coastguard Worker     unsigned int *unit_size,
3838*54e60f84SAndroid Build Coastguard Worker     unsigned int *pitch,
3839*54e60f84SAndroid Build Coastguard Worker     VABufferID *buf_id
3840*54e60f84SAndroid Build Coastguard Worker );
3841*54e60f84SAndroid Build Coastguard Worker 
3842*54e60f84SAndroid Build Coastguard Worker /**
3843*54e60f84SAndroid Build Coastguard Worker  * Convey to the server how many valid elements are in the buffer.
3844*54e60f84SAndroid Build Coastguard Worker  * e.g. if multiple slice parameters are being held in a single buffer,
3845*54e60f84SAndroid Build Coastguard Worker  * this will communicate to the server the number of slice parameters
3846*54e60f84SAndroid Build Coastguard Worker  * that are valid in the buffer.
3847*54e60f84SAndroid Build Coastguard Worker  */
3848*54e60f84SAndroid Build Coastguard Worker VAStatus vaBufferSetNumElements(
3849*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
3850*54e60f84SAndroid Build Coastguard Worker     VABufferID buf_id,  /* in */
3851*54e60f84SAndroid Build Coastguard Worker     unsigned int num_elements /* in */
3852*54e60f84SAndroid Build Coastguard Worker );
3853*54e60f84SAndroid Build Coastguard Worker 
3854*54e60f84SAndroid Build Coastguard Worker 
3855*54e60f84SAndroid Build Coastguard Worker /**
3856*54e60f84SAndroid Build Coastguard Worker  * device independent data structure for codedbuffer
3857*54e60f84SAndroid Build Coastguard Worker  */
3858*54e60f84SAndroid Build Coastguard Worker 
3859*54e60f84SAndroid Build Coastguard Worker /*
3860*54e60f84SAndroid Build Coastguard Worker  * FICTURE_AVE_QP(bit7-0): The average Qp value used during this frame
3861*54e60f84SAndroid Build Coastguard Worker  * LARGE_SLICE(bit8):At least one slice in the current frame was large
3862*54e60f84SAndroid Build Coastguard Worker  *              enough for the encoder to attempt to limit its size.
3863*54e60f84SAndroid Build Coastguard Worker  * SLICE_OVERFLOW(bit9): At least one slice in the current frame has
3864*54e60f84SAndroid Build Coastguard Worker  *              exceeded the maximum slice size specified.
3865*54e60f84SAndroid Build Coastguard Worker  * BITRATE_OVERFLOW(bit10): The peak bitrate was exceeded for this frame.
3866*54e60f84SAndroid Build Coastguard Worker  * BITRATE_HIGH(bit11): The frame size got within the safety margin of the maximum size (VCM only)
3867*54e60f84SAndroid Build Coastguard Worker  * AIR_MB_OVER_THRESHOLD: the number of MBs adapted to Intra MB
3868*54e60f84SAndroid Build Coastguard Worker  */
3869*54e60f84SAndroid Build Coastguard Worker #define VA_CODED_BUF_STATUS_PICTURE_AVE_QP_MASK         0xff
3870*54e60f84SAndroid Build Coastguard Worker #define VA_CODED_BUF_STATUS_LARGE_SLICE_MASK            0x100
3871*54e60f84SAndroid Build Coastguard Worker #define VA_CODED_BUF_STATUS_SLICE_OVERFLOW_MASK         0x200
3872*54e60f84SAndroid Build Coastguard Worker #define VA_CODED_BUF_STATUS_BITRATE_OVERFLOW        0x400
3873*54e60f84SAndroid Build Coastguard Worker #define VA_CODED_BUF_STATUS_BITRATE_HIGH        0x800
3874*54e60f84SAndroid Build Coastguard Worker /**
3875*54e60f84SAndroid Build Coastguard Worker  * \brief The frame has exceeded the maximum requested size.
3876*54e60f84SAndroid Build Coastguard Worker  *
3877*54e60f84SAndroid Build Coastguard Worker  * This flag indicates that the encoded frame size exceeds the value
3878*54e60f84SAndroid Build Coastguard Worker  * specified through a misc parameter buffer of type
3879*54e60f84SAndroid Build Coastguard Worker  * #VAEncMiscParameterTypeMaxFrameSize.
3880*54e60f84SAndroid Build Coastguard Worker  */
3881*54e60f84SAndroid Build Coastguard Worker #define VA_CODED_BUF_STATUS_FRAME_SIZE_OVERFLOW         0x1000
3882*54e60f84SAndroid Build Coastguard Worker /**
3883*54e60f84SAndroid Build Coastguard Worker  * \brief the bitstream is bad or corrupt.
3884*54e60f84SAndroid Build Coastguard Worker  */
3885*54e60f84SAndroid Build Coastguard Worker #define VA_CODED_BUF_STATUS_BAD_BITSTREAM               0x8000
3886*54e60f84SAndroid Build Coastguard Worker #define VA_CODED_BUF_STATUS_AIR_MB_OVER_THRESHOLD   0xff0000
3887*54e60f84SAndroid Build Coastguard Worker 
3888*54e60f84SAndroid Build Coastguard Worker /**
3889*54e60f84SAndroid Build Coastguard Worker  * \brief The coded buffer segment status contains frame encoding passes number
3890*54e60f84SAndroid Build Coastguard Worker  *
3891*54e60f84SAndroid Build Coastguard Worker  * This is the mask to get the number of encoding passes from the coded
3892*54e60f84SAndroid Build Coastguard Worker  * buffer segment status.
3893*54e60f84SAndroid Build Coastguard Worker  * NUMBER_PASS(bit24~bit27): the number for encoding passes executed for the coded frame.
3894*54e60f84SAndroid Build Coastguard Worker  *
3895*54e60f84SAndroid Build Coastguard Worker  */
3896*54e60f84SAndroid Build Coastguard Worker #define VA_CODED_BUF_STATUS_NUMBER_PASSES_MASK          0xf000000
3897*54e60f84SAndroid Build Coastguard Worker 
3898*54e60f84SAndroid Build Coastguard Worker /**
3899*54e60f84SAndroid Build Coastguard Worker  * \brief The coded buffer segment contains a single NAL unit.
3900*54e60f84SAndroid Build Coastguard Worker  *
3901*54e60f84SAndroid Build Coastguard Worker  * This flag indicates that the coded buffer segment contains a
3902*54e60f84SAndroid Build Coastguard Worker  * single NAL unit. This flag might be useful to the user for
3903*54e60f84SAndroid Build Coastguard Worker  * processing the coded buffer.
3904*54e60f84SAndroid Build Coastguard Worker  */
3905*54e60f84SAndroid Build Coastguard Worker #define VA_CODED_BUF_STATUS_SINGLE_NALU                 0x10000000
3906*54e60f84SAndroid Build Coastguard Worker 
3907*54e60f84SAndroid Build Coastguard Worker /**
3908*54e60f84SAndroid Build Coastguard Worker  * \brief Coded buffer segment.
3909*54e60f84SAndroid Build Coastguard Worker  *
3910*54e60f84SAndroid Build Coastguard Worker  * #VACodedBufferSegment is an element of a linked list describing
3911*54e60f84SAndroid Build Coastguard Worker  * some information on the coded buffer. The coded buffer segment
3912*54e60f84SAndroid Build Coastguard Worker  * could contain either a single NAL unit, or more than one NAL unit.
3913*54e60f84SAndroid Build Coastguard Worker  * It is recommended (but not required) to return a single NAL unit
3914*54e60f84SAndroid Build Coastguard Worker  * in a coded buffer segment, and the implementation should set the
3915*54e60f84SAndroid Build Coastguard Worker  * VA_CODED_BUF_STATUS_SINGLE_NALU status flag if that is the case.
3916*54e60f84SAndroid Build Coastguard Worker  */
3917*54e60f84SAndroid Build Coastguard Worker typedef  struct _VACodedBufferSegment  {
3918*54e60f84SAndroid Build Coastguard Worker     /**
3919*54e60f84SAndroid Build Coastguard Worker      * \brief Size of the data buffer in this segment (in bytes).
3920*54e60f84SAndroid Build Coastguard Worker      */
3921*54e60f84SAndroid Build Coastguard Worker     uint32_t        size;
3922*54e60f84SAndroid Build Coastguard Worker     /** \brief Bit offset into the data buffer where the video data starts. */
3923*54e60f84SAndroid Build Coastguard Worker     uint32_t        bit_offset;
3924*54e60f84SAndroid Build Coastguard Worker     /** \brief Status set by the driver. See \c VA_CODED_BUF_STATUS_*. */
3925*54e60f84SAndroid Build Coastguard Worker     uint32_t        status;
3926*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved for future use. */
3927*54e60f84SAndroid Build Coastguard Worker     uint32_t        reserved;
3928*54e60f84SAndroid Build Coastguard Worker     /** \brief Pointer to the start of the data buffer. */
3929*54e60f84SAndroid Build Coastguard Worker     void               *buf;
3930*54e60f84SAndroid Build Coastguard Worker     /**
3931*54e60f84SAndroid Build Coastguard Worker      * \brief Pointer to the next #VACodedBufferSegment element,
3932*54e60f84SAndroid Build Coastguard Worker      * or \c NULL if there is none.
3933*54e60f84SAndroid Build Coastguard Worker      */
3934*54e60f84SAndroid Build Coastguard Worker     void               *next;
3935*54e60f84SAndroid Build Coastguard Worker 
3936*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
3937*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
3938*54e60f84SAndroid Build Coastguard Worker } VACodedBufferSegment;
3939*54e60f84SAndroid Build Coastguard Worker 
3940*54e60f84SAndroid Build Coastguard Worker /**
3941*54e60f84SAndroid Build Coastguard Worker  * Map data store of the buffer into the client's address space
3942*54e60f84SAndroid Build Coastguard Worker  * vaCreateBuffer() needs to be called with "data" set to NULL before
3943*54e60f84SAndroid Build Coastguard Worker  * calling vaMapBuffer()
3944*54e60f84SAndroid Build Coastguard Worker  *
3945*54e60f84SAndroid Build Coastguard Worker  * if buffer type is VAEncCodedBufferType, pbuf points to link-list of
3946*54e60f84SAndroid Build Coastguard Worker  * VACodedBufferSegment, and the list is terminated if "next" is NULL
3947*54e60f84SAndroid Build Coastguard Worker  */
3948*54e60f84SAndroid Build Coastguard Worker VAStatus vaMapBuffer(
3949*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
3950*54e60f84SAndroid Build Coastguard Worker     VABufferID buf_id,  /* in */
3951*54e60f84SAndroid Build Coastguard Worker     void **pbuf     /* out */
3952*54e60f84SAndroid Build Coastguard Worker );
3953*54e60f84SAndroid Build Coastguard Worker 
3954*54e60f84SAndroid Build Coastguard Worker /**
3955*54e60f84SAndroid Build Coastguard Worker  * Map data store of the buffer into the client's address space
3956*54e60f84SAndroid Build Coastguard Worker  * this interface could be used to convey the operation hint
3957*54e60f84SAndroid Build Coastguard Worker  * backend driver could use these hint to optimize the implementations
3958*54e60f84SAndroid Build Coastguard Worker  */
3959*54e60f84SAndroid Build Coastguard Worker 
3960*54e60f84SAndroid Build Coastguard Worker /** \brief VA_MAPBUFFER_FLAG_DEFAULT is used when there are no flag specified
3961*54e60f84SAndroid Build Coastguard Worker  * same as VA_MAPBUFFER_FLAG_READ | VA_MAPBUFFER_FLAG_WRITE.
3962*54e60f84SAndroid Build Coastguard Worker  */
3963*54e60f84SAndroid Build Coastguard Worker #define VA_MAPBUFFER_FLAG_DEFAULT 0
3964*54e60f84SAndroid Build Coastguard Worker /** \brief application will read the surface after map */
3965*54e60f84SAndroid Build Coastguard Worker #define VA_MAPBUFFER_FLAG_READ    1
3966*54e60f84SAndroid Build Coastguard Worker /** \brief application will write the surface after map */
3967*54e60f84SAndroid Build Coastguard Worker #define VA_MAPBUFFER_FLAG_WRITE   2
3968*54e60f84SAndroid Build Coastguard Worker 
3969*54e60f84SAndroid Build Coastguard Worker VAStatus vaMapBuffer2(
3970*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
3971*54e60f84SAndroid Build Coastguard Worker     VABufferID buf_id,  /* in */
3972*54e60f84SAndroid Build Coastguard Worker     void **pbuf,        /* out */
3973*54e60f84SAndroid Build Coastguard Worker     uint32_t flags      /* in */
3974*54e60f84SAndroid Build Coastguard Worker );
3975*54e60f84SAndroid Build Coastguard Worker 
3976*54e60f84SAndroid Build Coastguard Worker /**
3977*54e60f84SAndroid Build Coastguard Worker  * After client making changes to a mapped data store, it needs to
3978*54e60f84SAndroid Build Coastguard Worker  * "Unmap" it to let the server know that the data is ready to be
3979*54e60f84SAndroid Build Coastguard Worker  * consumed by the server
3980*54e60f84SAndroid Build Coastguard Worker  */
3981*54e60f84SAndroid Build Coastguard Worker VAStatus vaUnmapBuffer(
3982*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
3983*54e60f84SAndroid Build Coastguard Worker     VABufferID buf_id   /* in */
3984*54e60f84SAndroid Build Coastguard Worker );
3985*54e60f84SAndroid Build Coastguard Worker 
3986*54e60f84SAndroid Build Coastguard Worker /**
3987*54e60f84SAndroid Build Coastguard Worker  * After this call, the buffer is deleted and this buffer_id is no longer valid
3988*54e60f84SAndroid Build Coastguard Worker  *
3989*54e60f84SAndroid Build Coastguard Worker  * A buffer can be re-used and sent to the server by another Begin/Render/End
3990*54e60f84SAndroid Build Coastguard Worker  * sequence if vaDestroyBuffer() is not called with this buffer.
3991*54e60f84SAndroid Build Coastguard Worker  *
3992*54e60f84SAndroid Build Coastguard Worker  * Note re-using a shared buffer (e.g. a slice data buffer) between the host and the
3993*54e60f84SAndroid Build Coastguard Worker  * hardware accelerator can result in performance dropping.
3994*54e60f84SAndroid Build Coastguard Worker  */
3995*54e60f84SAndroid Build Coastguard Worker VAStatus vaDestroyBuffer(
3996*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
3997*54e60f84SAndroid Build Coastguard Worker     VABufferID buffer_id
3998*54e60f84SAndroid Build Coastguard Worker );
3999*54e60f84SAndroid Build Coastguard Worker 
4000*54e60f84SAndroid Build Coastguard Worker /** \brief VA buffer information */
4001*54e60f84SAndroid Build Coastguard Worker typedef struct {
4002*54e60f84SAndroid Build Coastguard Worker     /** \brief Buffer handle */
4003*54e60f84SAndroid Build Coastguard Worker     uintptr_t           handle;
4004*54e60f84SAndroid Build Coastguard Worker     /** \brief Buffer type (See \ref VABufferType). */
4005*54e60f84SAndroid Build Coastguard Worker     uint32_t            type;
4006*54e60f84SAndroid Build Coastguard Worker     /**
4007*54e60f84SAndroid Build Coastguard Worker      * \brief Buffer memory type (See \ref VASurfaceAttribMemoryType).
4008*54e60f84SAndroid Build Coastguard Worker      *
4009*54e60f84SAndroid Build Coastguard Worker      * On input to vaAcquireBufferHandle(), this field can serve as a hint
4010*54e60f84SAndroid Build Coastguard Worker      * to specify the set of memory types the caller is interested in.
4011*54e60f84SAndroid Build Coastguard Worker      * On successful return from vaAcquireBufferHandle(), the field is
4012*54e60f84SAndroid Build Coastguard Worker      * updated with the best matching memory type.
4013*54e60f84SAndroid Build Coastguard Worker      */
4014*54e60f84SAndroid Build Coastguard Worker     uint32_t            mem_type;
4015*54e60f84SAndroid Build Coastguard Worker     /** \brief Size of the underlying buffer. */
4016*54e60f84SAndroid Build Coastguard Worker     size_t              mem_size;
4017*54e60f84SAndroid Build Coastguard Worker 
4018*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
4019*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
4020*54e60f84SAndroid Build Coastguard Worker } VABufferInfo;
4021*54e60f84SAndroid Build Coastguard Worker 
4022*54e60f84SAndroid Build Coastguard Worker /**
4023*54e60f84SAndroid Build Coastguard Worker  * \brief Acquires buffer handle for external API usage
4024*54e60f84SAndroid Build Coastguard Worker  *
4025*54e60f84SAndroid Build Coastguard Worker  * Locks the VA buffer object \ref buf_id for external API usage like
4026*54e60f84SAndroid Build Coastguard Worker  * EGL or OpenCL (OCL). This function is a synchronization point. This
4027*54e60f84SAndroid Build Coastguard Worker  * means that any pending operation is guaranteed to be completed
4028*54e60f84SAndroid Build Coastguard Worker  * prior to returning from the function.
4029*54e60f84SAndroid Build Coastguard Worker  *
4030*54e60f84SAndroid Build Coastguard Worker  * If the referenced VA buffer object is the backing store of a VA
4031*54e60f84SAndroid Build Coastguard Worker  * surface, then this function acts as if vaSyncSurface() on the
4032*54e60f84SAndroid Build Coastguard Worker  * parent surface was called first.
4033*54e60f84SAndroid Build Coastguard Worker  *
4034*54e60f84SAndroid Build Coastguard Worker  * The \ref VABufferInfo argument shall be zero'ed on input. On
4035*54e60f84SAndroid Build Coastguard Worker  * successful output, the data structure is filled in with all the
4036*54e60f84SAndroid Build Coastguard Worker  * necessary buffer level implementation details like handle, type,
4037*54e60f84SAndroid Build Coastguard Worker  * memory type and memory size.
4038*54e60f84SAndroid Build Coastguard Worker  *
4039*54e60f84SAndroid Build Coastguard Worker  * Note: the external API implementation, or the application, can
4040*54e60f84SAndroid Build Coastguard Worker  * express the memory types it is interested in by filling in the \ref
4041*54e60f84SAndroid Build Coastguard Worker  * mem_type field accordingly. On successful output, the memory type
4042*54e60f84SAndroid Build Coastguard Worker  * that fits best the request and that was used is updated in the \ref
4043*54e60f84SAndroid Build Coastguard Worker  * VABufferInfo data structure. If none of the supplied memory types
4044*54e60f84SAndroid Build Coastguard Worker  * is supported, then a \ref VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE
4045*54e60f84SAndroid Build Coastguard Worker  * error is returned.
4046*54e60f84SAndroid Build Coastguard Worker  *
4047*54e60f84SAndroid Build Coastguard Worker  * The \ref VABufferInfo data is valid until vaReleaseBufferHandle()
4048*54e60f84SAndroid Build Coastguard Worker  * is called. Besides, no additional operation is allowed on any of
4049*54e60f84SAndroid Build Coastguard Worker  * the buffer parent object until vaReleaseBufferHandle() is called.
4050*54e60f84SAndroid Build Coastguard Worker  * e.g. decoding into a VA surface backed with the supplied VA buffer
4051*54e60f84SAndroid Build Coastguard Worker  * object \ref buf_id would fail with a \ref VA_STATUS_ERROR_SURFACE_BUSY
4052*54e60f84SAndroid Build Coastguard Worker  * error.
4053*54e60f84SAndroid Build Coastguard Worker  *
4054*54e60f84SAndroid Build Coastguard Worker  * Possible errors:
4055*54e60f84SAndroid Build Coastguard Worker  * - \ref VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation
4056*54e60f84SAndroid Build Coastguard Worker  *   does not support this interface
4057*54e60f84SAndroid Build Coastguard Worker  * - \ref VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied
4058*54e60f84SAndroid Build Coastguard Worker  * - \ref VA_STATUS_ERROR_INVALID_BUFFER: an invalid buffer was supplied
4059*54e60f84SAndroid Build Coastguard Worker  * - \ref VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE: the implementation
4060*54e60f84SAndroid Build Coastguard Worker  *   does not support exporting buffers of the specified type
4061*54e60f84SAndroid Build Coastguard Worker  * - \ref VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE: none of the requested
4062*54e60f84SAndroid Build Coastguard Worker  *   memory types in \ref VABufferInfo.mem_type was supported
4063*54e60f84SAndroid Build Coastguard Worker  *
4064*54e60f84SAndroid Build Coastguard Worker  * @param[in] dpy               the VA display
4065*54e60f84SAndroid Build Coastguard Worker  * @param[in] buf_id            the VA buffer
4066*54e60f84SAndroid Build Coastguard Worker  * @param[in,out] buf_info      the associated VA buffer information
4067*54e60f84SAndroid Build Coastguard Worker  * @return VA_STATUS_SUCCESS if successful
4068*54e60f84SAndroid Build Coastguard Worker  */
4069*54e60f84SAndroid Build Coastguard Worker VAStatus
4070*54e60f84SAndroid Build Coastguard Worker vaAcquireBufferHandle(VADisplay dpy, VABufferID buf_id, VABufferInfo *buf_info);
4071*54e60f84SAndroid Build Coastguard Worker 
4072*54e60f84SAndroid Build Coastguard Worker /**
4073*54e60f84SAndroid Build Coastguard Worker  * \brief Releases buffer after usage from external API
4074*54e60f84SAndroid Build Coastguard Worker  *
4075*54e60f84SAndroid Build Coastguard Worker  * Unlocks the VA buffer object \ref buf_id from external API usage like
4076*54e60f84SAndroid Build Coastguard Worker  * EGL or OpenCL (OCL). This function is a synchronization point. This
4077*54e60f84SAndroid Build Coastguard Worker  * means that any pending operation is guaranteed to be completed
4078*54e60f84SAndroid Build Coastguard Worker  * prior to returning from the function.
4079*54e60f84SAndroid Build Coastguard Worker  *
4080*54e60f84SAndroid Build Coastguard Worker  * The \ref VABufferInfo argument shall point to the original data
4081*54e60f84SAndroid Build Coastguard Worker  * structure that was obtained from vaAcquireBufferHandle(), unaltered.
4082*54e60f84SAndroid Build Coastguard Worker  * This is necessary so that the VA driver implementation could
4083*54e60f84SAndroid Build Coastguard Worker  * deallocate any resources that were needed.
4084*54e60f84SAndroid Build Coastguard Worker  *
4085*54e60f84SAndroid Build Coastguard Worker  * In any case, returning from this function invalidates any contents
4086*54e60f84SAndroid Build Coastguard Worker  * in \ref VABufferInfo. i.e. the underlyng buffer handle is no longer
4087*54e60f84SAndroid Build Coastguard Worker  * valid. Therefore, VA driver implementations are free to reset this
4088*54e60f84SAndroid Build Coastguard Worker  * data structure to safe defaults.
4089*54e60f84SAndroid Build Coastguard Worker  *
4090*54e60f84SAndroid Build Coastguard Worker  * Possible errors:
4091*54e60f84SAndroid Build Coastguard Worker  * - \ref VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation
4092*54e60f84SAndroid Build Coastguard Worker  *   does not support this interface
4093*54e60f84SAndroid Build Coastguard Worker  * - \ref VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied
4094*54e60f84SAndroid Build Coastguard Worker  * - \ref VA_STATUS_ERROR_INVALID_BUFFER: an invalid buffer was supplied
4095*54e60f84SAndroid Build Coastguard Worker  * - \ref VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE: the implementation
4096*54e60f84SAndroid Build Coastguard Worker  *   does not support exporting buffers of the specified type
4097*54e60f84SAndroid Build Coastguard Worker  *
4098*54e60f84SAndroid Build Coastguard Worker  * @param[in] dpy               the VA display
4099*54e60f84SAndroid Build Coastguard Worker  * @param[in] buf_id            the VA buffer
4100*54e60f84SAndroid Build Coastguard Worker  * @return VA_STATUS_SUCCESS if successful
4101*54e60f84SAndroid Build Coastguard Worker  */
4102*54e60f84SAndroid Build Coastguard Worker VAStatus
4103*54e60f84SAndroid Build Coastguard Worker vaReleaseBufferHandle(VADisplay dpy, VABufferID buf_id);
4104*54e60f84SAndroid Build Coastguard Worker 
4105*54e60f84SAndroid Build Coastguard Worker /** @name vaExportSurfaceHandle() flags
4106*54e60f84SAndroid Build Coastguard Worker  *
4107*54e60f84SAndroid Build Coastguard Worker  * @{
4108*54e60f84SAndroid Build Coastguard Worker  */
4109*54e60f84SAndroid Build Coastguard Worker /** Export surface to be read by external API. */
4110*54e60f84SAndroid Build Coastguard Worker #define VA_EXPORT_SURFACE_READ_ONLY        0x0001
4111*54e60f84SAndroid Build Coastguard Worker /** Export surface to be written by external API. */
4112*54e60f84SAndroid Build Coastguard Worker #define VA_EXPORT_SURFACE_WRITE_ONLY       0x0002
4113*54e60f84SAndroid Build Coastguard Worker /** Export surface to be both read and written by external API. */
4114*54e60f84SAndroid Build Coastguard Worker #define VA_EXPORT_SURFACE_READ_WRITE       0x0003
4115*54e60f84SAndroid Build Coastguard Worker /** Export surface with separate layers.
4116*54e60f84SAndroid Build Coastguard Worker  *
4117*54e60f84SAndroid Build Coastguard Worker  * For example, NV12 surfaces should be exported as two separate
4118*54e60f84SAndroid Build Coastguard Worker  * planes for luma and chroma.
4119*54e60f84SAndroid Build Coastguard Worker  */
4120*54e60f84SAndroid Build Coastguard Worker #define VA_EXPORT_SURFACE_SEPARATE_LAYERS  0x0004
4121*54e60f84SAndroid Build Coastguard Worker /** Export surface with composed layers.
4122*54e60f84SAndroid Build Coastguard Worker  *
4123*54e60f84SAndroid Build Coastguard Worker  * For example, NV12 surfaces should be exported as a single NV12
4124*54e60f84SAndroid Build Coastguard Worker  * composed object.
4125*54e60f84SAndroid Build Coastguard Worker  */
4126*54e60f84SAndroid Build Coastguard Worker #define VA_EXPORT_SURFACE_COMPOSED_LAYERS  0x0008
4127*54e60f84SAndroid Build Coastguard Worker 
4128*54e60f84SAndroid Build Coastguard Worker /** @} */
4129*54e60f84SAndroid Build Coastguard Worker 
4130*54e60f84SAndroid Build Coastguard Worker /**
4131*54e60f84SAndroid Build Coastguard Worker  * \brief Export a handle to a surface for use with an external API
4132*54e60f84SAndroid Build Coastguard Worker  *
4133*54e60f84SAndroid Build Coastguard Worker  * The exported handles are owned by the caller, and the caller is
4134*54e60f84SAndroid Build Coastguard Worker  * responsible for freeing them when no longer needed (e.g. by closing
4135*54e60f84SAndroid Build Coastguard Worker  * DRM PRIME file descriptors).
4136*54e60f84SAndroid Build Coastguard Worker  *
4137*54e60f84SAndroid Build Coastguard Worker  * This does not perform any synchronisation.  If the contents of the
4138*54e60f84SAndroid Build Coastguard Worker  * surface will be read, vaSyncSurface() must be called before doing so.
4139*54e60f84SAndroid Build Coastguard Worker  * If the contents of the surface are written, then all operations must
4140*54e60f84SAndroid Build Coastguard Worker  * be completed externally before using the surface again by via VA-API
4141*54e60f84SAndroid Build Coastguard Worker  * functions.
4142*54e60f84SAndroid Build Coastguard Worker  *
4143*54e60f84SAndroid Build Coastguard Worker  * @param[in] dpy          VA display.
4144*54e60f84SAndroid Build Coastguard Worker  * @param[in] surface_id   Surface to export.
4145*54e60f84SAndroid Build Coastguard Worker  * @param[in] mem_type     Memory type to export to.
4146*54e60f84SAndroid Build Coastguard Worker  * @param[in] flags        Combination of flags to apply
4147*54e60f84SAndroid Build Coastguard Worker  *   (VA_EXPORT_SURFACE_*).
4148*54e60f84SAndroid Build Coastguard Worker  * @param[out] descriptor  Pointer to the descriptor structure to fill
4149*54e60f84SAndroid Build Coastguard Worker  *   with the handle details.  The type of this structure depends on
4150*54e60f84SAndroid Build Coastguard Worker  *   the value of mem_type.
4151*54e60f84SAndroid Build Coastguard Worker  *
4152*54e60f84SAndroid Build Coastguard Worker  * @return Status code:
4153*54e60f84SAndroid Build Coastguard Worker  * - VA_STATUS_SUCCESS:    Success.
4154*54e60f84SAndroid Build Coastguard Worker  * - VA_STATUS_ERROR_INVALID_DISPLAY:  The display is not valid.
4155*54e60f84SAndroid Build Coastguard Worker  * - VA_STATUS_ERROR_UNIMPLEMENTED:  The driver does not implement
4156*54e60f84SAndroid Build Coastguard Worker  *     this interface.
4157*54e60f84SAndroid Build Coastguard Worker  * - VA_STATUS_ERROR_INVALID_SURFACE:  The surface is not valid, or
4158*54e60f84SAndroid Build Coastguard Worker  *     the surface is not exportable in the specified way.
4159*54e60f84SAndroid Build Coastguard Worker  * - VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE:  The driver does not
4160*54e60f84SAndroid Build Coastguard Worker  *     support exporting surfaces to the specified memory type.
4161*54e60f84SAndroid Build Coastguard Worker  */
4162*54e60f84SAndroid Build Coastguard Worker VAStatus vaExportSurfaceHandle(VADisplay dpy,
4163*54e60f84SAndroid Build Coastguard Worker                                VASurfaceID surface_id,
4164*54e60f84SAndroid Build Coastguard Worker                                uint32_t mem_type, uint32_t flags,
4165*54e60f84SAndroid Build Coastguard Worker                                void *descriptor);
4166*54e60f84SAndroid Build Coastguard Worker 
4167*54e60f84SAndroid Build Coastguard Worker /**
4168*54e60f84SAndroid Build Coastguard Worker  * Render (Video Decode/Encode/Processing) Pictures
4169*54e60f84SAndroid Build Coastguard Worker  *
4170*54e60f84SAndroid Build Coastguard Worker  * A picture represents either a frame or a field.
4171*54e60f84SAndroid Build Coastguard Worker  *
4172*54e60f84SAndroid Build Coastguard Worker  * The Begin/Render/End sequence sends the video decode/encode/processing buffers
4173*54e60f84SAndroid Build Coastguard Worker  * to the server
4174*54e60f84SAndroid Build Coastguard Worker  */
4175*54e60f84SAndroid Build Coastguard Worker 
4176*54e60f84SAndroid Build Coastguard Worker /**
4177*54e60f84SAndroid Build Coastguard Worker  * Get ready for a video pipeline
4178*54e60f84SAndroid Build Coastguard Worker  * - decode a picture to a target surface
4179*54e60f84SAndroid Build Coastguard Worker  * - encode a picture from a target surface
4180*54e60f84SAndroid Build Coastguard Worker  * - process a picture to a target surface
4181*54e60f84SAndroid Build Coastguard Worker  */
4182*54e60f84SAndroid Build Coastguard Worker VAStatus vaBeginPicture(
4183*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
4184*54e60f84SAndroid Build Coastguard Worker     VAContextID context,
4185*54e60f84SAndroid Build Coastguard Worker     VASurfaceID render_target
4186*54e60f84SAndroid Build Coastguard Worker );
4187*54e60f84SAndroid Build Coastguard Worker 
4188*54e60f84SAndroid Build Coastguard Worker /**
4189*54e60f84SAndroid Build Coastguard Worker  * Send video decode, encode or processing buffers to the server.
4190*54e60f84SAndroid Build Coastguard Worker  */
4191*54e60f84SAndroid Build Coastguard Worker VAStatus vaRenderPicture(
4192*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
4193*54e60f84SAndroid Build Coastguard Worker     VAContextID context,
4194*54e60f84SAndroid Build Coastguard Worker     VABufferID *buffers,
4195*54e60f84SAndroid Build Coastguard Worker     int num_buffers
4196*54e60f84SAndroid Build Coastguard Worker );
4197*54e60f84SAndroid Build Coastguard Worker 
4198*54e60f84SAndroid Build Coastguard Worker /**
4199*54e60f84SAndroid Build Coastguard Worker  * Make the end of rendering for a picture.
4200*54e60f84SAndroid Build Coastguard Worker  * The server should start processing all pending operations for this
4201*54e60f84SAndroid Build Coastguard Worker  * surface. This call is non-blocking. The client can start another
4202*54e60f84SAndroid Build Coastguard Worker  * Begin/Render/End sequence on a different render target.
4203*54e60f84SAndroid Build Coastguard Worker  * if VAContextID used in this function previously successfully passed
4204*54e60f84SAndroid Build Coastguard Worker  * vaMFAddContext call, real processing will be started during vaMFSubmit
4205*54e60f84SAndroid Build Coastguard Worker  */
4206*54e60f84SAndroid Build Coastguard Worker VAStatus vaEndPicture(
4207*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
4208*54e60f84SAndroid Build Coastguard Worker     VAContextID context
4209*54e60f84SAndroid Build Coastguard Worker );
4210*54e60f84SAndroid Build Coastguard Worker 
4211*54e60f84SAndroid Build Coastguard Worker /**
4212*54e60f84SAndroid Build Coastguard Worker  * Make the end of rendering for a pictures in contexts passed with submission.
4213*54e60f84SAndroid Build Coastguard Worker  * The server should start processing all pending operations for contexts.
4214*54e60f84SAndroid Build Coastguard Worker  * All contexts passed should be associated through vaMFAddContext
4215*54e60f84SAndroid Build Coastguard Worker  * and call sequence Begin/Render/End performed.
4216*54e60f84SAndroid Build Coastguard Worker  * This call is non-blocking. The client can start another
4217*54e60f84SAndroid Build Coastguard Worker  * Begin/Render/End/vaMFSubmit sequence on a different render targets.
4218*54e60f84SAndroid Build Coastguard Worker  * Return values:
4219*54e60f84SAndroid Build Coastguard Worker  * VA_STATUS_SUCCESS - operation successful, context was removed.
4220*54e60f84SAndroid Build Coastguard Worker  * VA_STATUS_ERROR_INVALID_CONTEXT - mf_context or one of contexts are invalid
4221*54e60f84SAndroid Build Coastguard Worker  * due to mf_context not created or one of contexts not assotiated with mf_context
4222*54e60f84SAndroid Build Coastguard Worker  * through vaAddContext.
4223*54e60f84SAndroid Build Coastguard Worker  * VA_STATUS_ERROR_INVALID_PARAMETER - one of context has not submitted it's frame
4224*54e60f84SAndroid Build Coastguard Worker  * through vaBeginPicture vaRenderPicture vaEndPicture call sequence.
4225*54e60f84SAndroid Build Coastguard Worker  * dpy: display
4226*54e60f84SAndroid Build Coastguard Worker  * mf_context: Multi-Frame context
4227*54e60f84SAndroid Build Coastguard Worker  * contexts: list of contexts submitting their tasks for multi-frame operation.
4228*54e60f84SAndroid Build Coastguard Worker  * num_contexts: number of passed contexts.
4229*54e60f84SAndroid Build Coastguard Worker  */
4230*54e60f84SAndroid Build Coastguard Worker VAStatus vaMFSubmit(
4231*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
4232*54e60f84SAndroid Build Coastguard Worker     VAMFContextID mf_context,
4233*54e60f84SAndroid Build Coastguard Worker     VAContextID * contexts,
4234*54e60f84SAndroid Build Coastguard Worker     int num_contexts
4235*54e60f84SAndroid Build Coastguard Worker );
4236*54e60f84SAndroid Build Coastguard Worker 
4237*54e60f84SAndroid Build Coastguard Worker /*
4238*54e60f84SAndroid Build Coastguard Worker 
4239*54e60f84SAndroid Build Coastguard Worker Synchronization
4240*54e60f84SAndroid Build Coastguard Worker 
4241*54e60f84SAndroid Build Coastguard Worker */
4242*54e60f84SAndroid Build Coastguard Worker 
4243*54e60f84SAndroid Build Coastguard Worker /**
4244*54e60f84SAndroid Build Coastguard Worker  * This function blocks until all pending operations on the render target
4245*54e60f84SAndroid Build Coastguard Worker  * have been completed.  Upon return it is safe to use the render target for a
4246*54e60f84SAndroid Build Coastguard Worker  * different picture.
4247*54e60f84SAndroid Build Coastguard Worker  */
4248*54e60f84SAndroid Build Coastguard Worker VAStatus vaSyncSurface(
4249*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
4250*54e60f84SAndroid Build Coastguard Worker     VASurfaceID render_target
4251*54e60f84SAndroid Build Coastguard Worker );
4252*54e60f84SAndroid Build Coastguard Worker 
4253*54e60f84SAndroid Build Coastguard Worker /** \brief Indicates an infinite timeout. */
4254*54e60f84SAndroid Build Coastguard Worker #define VA_TIMEOUT_INFINITE 0xFFFFFFFFFFFFFFFF
4255*54e60f84SAndroid Build Coastguard Worker 
4256*54e60f84SAndroid Build Coastguard Worker /**
4257*54e60f84SAndroid Build Coastguard Worker  * \brief Synchronizes pending operations associated with the supplied surface.
4258*54e60f84SAndroid Build Coastguard Worker  *
4259*54e60f84SAndroid Build Coastguard Worker  * This function blocks during specified timeout (in nanoseconds) until
4260*54e60f84SAndroid Build Coastguard Worker  * all pending operations on the render target have been completed.
4261*54e60f84SAndroid Build Coastguard Worker  * If timeout is zero, the function returns immediately.
4262*54e60f84SAndroid Build Coastguard Worker  *
4263*54e60f84SAndroid Build Coastguard Worker  * Possible errors:
4264*54e60f84SAndroid Build Coastguard Worker  * - \ref VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation
4265*54e60f84SAndroid Build Coastguard Worker  *   does not support this interface
4266*54e60f84SAndroid Build Coastguard Worker  * - \ref VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied
4267*54e60f84SAndroid Build Coastguard Worker  * - \ref VA_STATUS_ERROR_INVALID_SURFACE: an invalid surface was supplied
4268*54e60f84SAndroid Build Coastguard Worker  * - \ref VA_STATUS_ERROR_TIMEDOUT: synchronization is still in progress,
4269*54e60f84SAndroid Build Coastguard Worker  *   client should call the function again to complete synchronization
4270*54e60f84SAndroid Build Coastguard Worker  *
4271*54e60f84SAndroid Build Coastguard Worker  * @param[in] dpy         the VA display
4272*54e60f84SAndroid Build Coastguard Worker  * @param[in] surface     the surface for which synchronization is performed
4273*54e60f84SAndroid Build Coastguard Worker  * @param[in] timeout_ns  the timeout in nanoseconds
4274*54e60f84SAndroid Build Coastguard Worker  *
4275*54e60f84SAndroid Build Coastguard Worker  */
4276*54e60f84SAndroid Build Coastguard Worker VAStatus vaSyncSurface2(
4277*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
4278*54e60f84SAndroid Build Coastguard Worker     VASurfaceID surface,
4279*54e60f84SAndroid Build Coastguard Worker     uint64_t timeout_ns
4280*54e60f84SAndroid Build Coastguard Worker );
4281*54e60f84SAndroid Build Coastguard Worker 
4282*54e60f84SAndroid Build Coastguard Worker typedef enum {
4283*54e60f84SAndroid Build Coastguard Worker     VASurfaceRendering  = 1, /* Rendering in progress */
4284*54e60f84SAndroid Build Coastguard Worker     VASurfaceDisplaying = 2, /* Displaying in progress (not safe to render into it) */
4285*54e60f84SAndroid Build Coastguard Worker     /* this status is useful if surface is used as the source */
4286*54e60f84SAndroid Build Coastguard Worker     /* of an overlay */
4287*54e60f84SAndroid Build Coastguard Worker     VASurfaceReady  = 4, /* not being rendered or displayed */
4288*54e60f84SAndroid Build Coastguard Worker     VASurfaceSkipped    = 8  /* Indicate a skipped frame during encode */
4289*54e60f84SAndroid Build Coastguard Worker } VASurfaceStatus;
4290*54e60f84SAndroid Build Coastguard Worker 
4291*54e60f84SAndroid Build Coastguard Worker /**
4292*54e60f84SAndroid Build Coastguard Worker  * Find out any pending ops on the render target
4293*54e60f84SAndroid Build Coastguard Worker  */
4294*54e60f84SAndroid Build Coastguard Worker VAStatus vaQuerySurfaceStatus(
4295*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
4296*54e60f84SAndroid Build Coastguard Worker     VASurfaceID render_target,
4297*54e60f84SAndroid Build Coastguard Worker     VASurfaceStatus *status /* out */
4298*54e60f84SAndroid Build Coastguard Worker );
4299*54e60f84SAndroid Build Coastguard Worker 
4300*54e60f84SAndroid Build Coastguard Worker typedef enum {
4301*54e60f84SAndroid Build Coastguard Worker     VADecodeSliceMissing            = 0,
4302*54e60f84SAndroid Build Coastguard Worker     VADecodeMBError                 = 1,
4303*54e60f84SAndroid Build Coastguard Worker     VADecodeReset                   = 2,
4304*54e60f84SAndroid Build Coastguard Worker } VADecodeErrorType;
4305*54e60f84SAndroid Build Coastguard Worker 
4306*54e60f84SAndroid Build Coastguard Worker /**
4307*54e60f84SAndroid Build Coastguard Worker  * Client calls vaQuerySurfaceError with VA_STATUS_ERROR_DECODING_ERROR, server side returns
4308*54e60f84SAndroid Build Coastguard Worker  * an array of structure VASurfaceDecodeMBErrors, and the array is terminated by setting status=-1
4309*54e60f84SAndroid Build Coastguard Worker */
4310*54e60f84SAndroid Build Coastguard Worker typedef struct _VASurfaceDecodeMBErrors {
4311*54e60f84SAndroid Build Coastguard Worker     int32_t status; /* 1 if hardware has returned detailed info below, -1 means this record is invalid */
4312*54e60f84SAndroid Build Coastguard Worker     uint32_t start_mb; /* start mb address with errors */
4313*54e60f84SAndroid Build Coastguard Worker     uint32_t end_mb;  /* end mb address with errors */
4314*54e60f84SAndroid Build Coastguard Worker     VADecodeErrorType decode_error_type;
4315*54e60f84SAndroid Build Coastguard Worker     uint32_t num_mb;   /* number of mbs with errors */
4316*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
4317*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW - 1];
4318*54e60f84SAndroid Build Coastguard Worker } VASurfaceDecodeMBErrors;
4319*54e60f84SAndroid Build Coastguard Worker 
4320*54e60f84SAndroid Build Coastguard Worker /**
4321*54e60f84SAndroid Build Coastguard Worker  * After the application gets VA_STATUS_ERROR_DECODING_ERROR after calling vaSyncSurface(),
4322*54e60f84SAndroid Build Coastguard Worker  * it can call vaQuerySurfaceError to find out further details on the particular error.
4323*54e60f84SAndroid Build Coastguard Worker  * VA_STATUS_ERROR_DECODING_ERROR should be passed in as "error_status".
4324*54e60f84SAndroid Build Coastguard Worker  *
4325*54e60f84SAndroid Build Coastguard Worker  * After the applications get VA_STATUS_HW_BUSY or VA_STATUS_SUCCESSFULL from vaSyncSurface(),
4326*54e60f84SAndroid Build Coastguard Worker  * it still can call vaQuerySurfaceError to find out further details to know if has real hw reset
4327*54e60f84SAndroid Build Coastguard Worker  * happened on this surface since umd and kmd could recover the context from reset with success in sometimes.
4328*54e60f84SAndroid Build Coastguard Worker  * VA_STATUS_HW_BUSY or VA_STATUS_SUCCESSFULL also could be passed in as "error_status".
4329*54e60f84SAndroid Build Coastguard Worker  *
4330*54e60f84SAndroid Build Coastguard Worker  * Upon the return, error_info will point to an array of _VASurfaceDecodeMBErrors structure,
4331*54e60f84SAndroid Build Coastguard Worker  * which is allocated and filled by libVA with detailed information on the VADecodeErrorType.
4332*54e60f84SAndroid Build Coastguard Worker  * The array is terminated if "status==-1" is detected.
4333*54e60f84SAndroid Build Coastguard Worker  */
4334*54e60f84SAndroid Build Coastguard Worker VAStatus vaQuerySurfaceError(
4335*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
4336*54e60f84SAndroid Build Coastguard Worker     VASurfaceID surface,
4337*54e60f84SAndroid Build Coastguard Worker     VAStatus error_status,
4338*54e60f84SAndroid Build Coastguard Worker     void **error_info
4339*54e60f84SAndroid Build Coastguard Worker );
4340*54e60f84SAndroid Build Coastguard Worker 
4341*54e60f84SAndroid Build Coastguard Worker /**
4342*54e60f84SAndroid Build Coastguard Worker  * \brief Synchronizes pending operations associated with the supplied buffer.
4343*54e60f84SAndroid Build Coastguard Worker  *
4344*54e60f84SAndroid Build Coastguard Worker  * This function blocks during specified timeout (in nanoseconds) until
4345*54e60f84SAndroid Build Coastguard Worker  * all pending operations on the supplied buffer have been completed.
4346*54e60f84SAndroid Build Coastguard Worker  * If timeout is zero, the function returns immediately.
4347*54e60f84SAndroid Build Coastguard Worker  *
4348*54e60f84SAndroid Build Coastguard Worker  * Possible errors:
4349*54e60f84SAndroid Build Coastguard Worker  * - \ref VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation
4350*54e60f84SAndroid Build Coastguard Worker  *   does not support this interface
4351*54e60f84SAndroid Build Coastguard Worker  * - \ref VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied
4352*54e60f84SAndroid Build Coastguard Worker  * - \ref VA_STATUS_ERROR_INVALID_BUFFER: an invalid buffer was supplied
4353*54e60f84SAndroid Build Coastguard Worker  * - \ref VA_STATUS_ERROR_TIMEDOUT: synchronization is still in progress,
4354*54e60f84SAndroid Build Coastguard Worker  *   client should call the function again to complete synchronization
4355*54e60f84SAndroid Build Coastguard Worker  *
4356*54e60f84SAndroid Build Coastguard Worker  * @param[in] dpy         the VA display
4357*54e60f84SAndroid Build Coastguard Worker  * @param[in] buf_id      the buffer for which synchronization is performed
4358*54e60f84SAndroid Build Coastguard Worker  * @param[in] timeout_ns  the timeout in nanoseconds
4359*54e60f84SAndroid Build Coastguard Worker  *
4360*54e60f84SAndroid Build Coastguard Worker  */
4361*54e60f84SAndroid Build Coastguard Worker VAStatus vaSyncBuffer(
4362*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
4363*54e60f84SAndroid Build Coastguard Worker     VABufferID buf_id,
4364*54e60f84SAndroid Build Coastguard Worker     uint64_t timeout_ns
4365*54e60f84SAndroid Build Coastguard Worker );
4366*54e60f84SAndroid Build Coastguard Worker 
4367*54e60f84SAndroid Build Coastguard Worker /**
4368*54e60f84SAndroid Build Coastguard Worker  * Notes about synchronization interfaces:
4369*54e60f84SAndroid Build Coastguard Worker  * vaSyncSurface:
4370*54e60f84SAndroid Build Coastguard Worker  * 1. Allows to synchronize output surface (i.e. from decoding or VP)
4371*54e60f84SAndroid Build Coastguard Worker  * 2. Allows to synchronize all bitstreams being encoded from the given input surface (1->N pipelines).
4372*54e60f84SAndroid Build Coastguard Worker  *
4373*54e60f84SAndroid Build Coastguard Worker  * vaSyncSurface2:
4374*54e60f84SAndroid Build Coastguard Worker  * 1. The same as vaSyncSurface but allows to specify a timeout
4375*54e60f84SAndroid Build Coastguard Worker  *
4376*54e60f84SAndroid Build Coastguard Worker  * vaSyncBuffer:
4377*54e60f84SAndroid Build Coastguard Worker  * 1. Allows to synchronize output buffer (e.g. bitstream from encoding).
4378*54e60f84SAndroid Build Coastguard Worker  *    Comparing to vaSyncSurface this function synchronizes given bitstream only.
4379*54e60f84SAndroid Build Coastguard Worker  */
4380*54e60f84SAndroid Build Coastguard Worker 
4381*54e60f84SAndroid Build Coastguard Worker /**
4382*54e60f84SAndroid Build Coastguard Worker  * Images and Subpictures
4383*54e60f84SAndroid Build Coastguard Worker  * VAImage is used to either get the surface data to client memory, or
4384*54e60f84SAndroid Build Coastguard Worker  * to copy image data in client memory to a surface.
4385*54e60f84SAndroid Build Coastguard Worker  * Both images, subpictures and surfaces follow the same 2D coordinate system where origin
4386*54e60f84SAndroid Build Coastguard Worker  * is at the upper left corner with positive X to the right and positive Y down
4387*54e60f84SAndroid Build Coastguard Worker  */
4388*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC(ch0, ch1, ch2, ch3) \
4389*54e60f84SAndroid Build Coastguard Worker     ((unsigned long)(unsigned char) (ch0) | ((unsigned long)(unsigned char) (ch1) << 8) | \
4390*54e60f84SAndroid Build Coastguard Worker     ((unsigned long)(unsigned char) (ch2) << 16) | ((unsigned long)(unsigned char) (ch3) << 24 ))
4391*54e60f84SAndroid Build Coastguard Worker 
4392*54e60f84SAndroid Build Coastguard Worker /* Pre-defined fourcc codes. */
4393*54e60f84SAndroid Build Coastguard Worker 
4394*54e60f84SAndroid Build Coastguard Worker /** NV12: two-plane 8-bit YUV 4:2:0.
4395*54e60f84SAndroid Build Coastguard Worker  * The first plane contains Y, the second plane contains U and V in pairs of bytes.
4396*54e60f84SAndroid Build Coastguard Worker  */
4397*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_NV12      0x3231564E
4398*54e60f84SAndroid Build Coastguard Worker /** NV21: two-plane 8-bit YUV 4:2:0.
4399*54e60f84SAndroid Build Coastguard Worker  * Same as NV12, but with U and V swapped.
4400*54e60f84SAndroid Build Coastguard Worker  */
4401*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_NV21      0x3132564E
4402*54e60f84SAndroid Build Coastguard Worker 
4403*54e60f84SAndroid Build Coastguard Worker /** AI44: packed 4-bit YA.
4404*54e60f84SAndroid Build Coastguard Worker  *
4405*54e60f84SAndroid Build Coastguard Worker  * The bottom half of each byte contains luma, the top half contains alpha.
4406*54e60f84SAndroid Build Coastguard Worker  */
4407*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_AI44      0x34344149
4408*54e60f84SAndroid Build Coastguard Worker 
4409*54e60f84SAndroid Build Coastguard Worker /** RGBA: packed 8-bit RGBA.
4410*54e60f84SAndroid Build Coastguard Worker  *
4411*54e60f84SAndroid Build Coastguard Worker  * Four bytes per pixel: red, green, blue, alpha.
4412*54e60f84SAndroid Build Coastguard Worker  */
4413*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_RGBA      0x41424752
4414*54e60f84SAndroid Build Coastguard Worker /** RGBX: packed 8-bit RGB.
4415*54e60f84SAndroid Build Coastguard Worker  *
4416*54e60f84SAndroid Build Coastguard Worker  * Four bytes per pixel: red, green, blue, unspecified.
4417*54e60f84SAndroid Build Coastguard Worker  */
4418*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_RGBX      0x58424752
4419*54e60f84SAndroid Build Coastguard Worker /** BGRA: packed 8-bit RGBA.
4420*54e60f84SAndroid Build Coastguard Worker  *
4421*54e60f84SAndroid Build Coastguard Worker  * Four bytes per pixel: blue, green, red, alpha.
4422*54e60f84SAndroid Build Coastguard Worker  */
4423*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_BGRA      0x41524742
4424*54e60f84SAndroid Build Coastguard Worker /** BGRX: packed 8-bit RGB.
4425*54e60f84SAndroid Build Coastguard Worker  *
4426*54e60f84SAndroid Build Coastguard Worker  * Four bytes per pixel: blue, green, red, unspecified.
4427*54e60f84SAndroid Build Coastguard Worker  */
4428*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_BGRX      0x58524742
4429*54e60f84SAndroid Build Coastguard Worker /** ARGB: packed 8-bit RGBA.
4430*54e60f84SAndroid Build Coastguard Worker  *
4431*54e60f84SAndroid Build Coastguard Worker  * Four bytes per pixel: alpha, red, green, blue.
4432*54e60f84SAndroid Build Coastguard Worker  */
4433*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_ARGB      0x42475241
4434*54e60f84SAndroid Build Coastguard Worker /** XRGB: packed 8-bit RGB.
4435*54e60f84SAndroid Build Coastguard Worker  *
4436*54e60f84SAndroid Build Coastguard Worker  * Four bytes per pixel: unspecified, red, green, blue.
4437*54e60f84SAndroid Build Coastguard Worker  */
4438*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_XRGB      0x42475258
4439*54e60f84SAndroid Build Coastguard Worker /** ABGR: packed 8-bit RGBA.
4440*54e60f84SAndroid Build Coastguard Worker  *
4441*54e60f84SAndroid Build Coastguard Worker  * Four bytes per pixel: alpha, blue, green, red.
4442*54e60f84SAndroid Build Coastguard Worker  */
4443*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_ABGR          0x52474241
4444*54e60f84SAndroid Build Coastguard Worker /** XBGR: packed 8-bit RGB.
4445*54e60f84SAndroid Build Coastguard Worker  *
4446*54e60f84SAndroid Build Coastguard Worker  * Four bytes per pixel: unspecified, blue, green, red.
4447*54e60f84SAndroid Build Coastguard Worker  */
4448*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_XBGR          0x52474258
4449*54e60f84SAndroid Build Coastguard Worker 
4450*54e60f84SAndroid Build Coastguard Worker /** UYUV: packed 8-bit YUV 4:2:2.
4451*54e60f84SAndroid Build Coastguard Worker  *
4452*54e60f84SAndroid Build Coastguard Worker  * Four bytes per pair of pixels: U, Y, U, V.
4453*54e60f84SAndroid Build Coastguard Worker  */
4454*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_UYVY          0x59565955
4455*54e60f84SAndroid Build Coastguard Worker /** YUY2: packed 8-bit YUV 4:2:2.
4456*54e60f84SAndroid Build Coastguard Worker  *
4457*54e60f84SAndroid Build Coastguard Worker  * Four bytes per pair of pixels: Y, U, Y, V.
4458*54e60f84SAndroid Build Coastguard Worker  */
4459*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_YUY2          0x32595559
4460*54e60f84SAndroid Build Coastguard Worker /** AYUV: packed 8-bit YUVA 4:4:4.
4461*54e60f84SAndroid Build Coastguard Worker  *
4462*54e60f84SAndroid Build Coastguard Worker  * Four bytes per pixel: A, Y, U, V.
4463*54e60f84SAndroid Build Coastguard Worker  */
4464*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_AYUV          0x56555941
4465*54e60f84SAndroid Build Coastguard Worker /** NV11: two-plane 8-bit YUV 4:1:1.
4466*54e60f84SAndroid Build Coastguard Worker  *
4467*54e60f84SAndroid Build Coastguard Worker  * The first plane contains Y, the second plane contains U and V in pairs of bytes.
4468*54e60f84SAndroid Build Coastguard Worker  */
4469*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_NV11          0x3131564e
4470*54e60f84SAndroid Build Coastguard Worker /** YV12: three-plane 8-bit YUV 4:2:0.
4471*54e60f84SAndroid Build Coastguard Worker  *
4472*54e60f84SAndroid Build Coastguard Worker  * The three planes contain Y, V and U respectively.
4473*54e60f84SAndroid Build Coastguard Worker  */
4474*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_YV12          0x32315659
4475*54e60f84SAndroid Build Coastguard Worker /** P208: two-plane 8-bit YUV 4:2:2.
4476*54e60f84SAndroid Build Coastguard Worker  *
4477*54e60f84SAndroid Build Coastguard Worker  * The first plane contains Y, the second plane contains U and V in pairs of bytes.
4478*54e60f84SAndroid Build Coastguard Worker  */
4479*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_P208          0x38303250
4480*54e60f84SAndroid Build Coastguard Worker /** I420: three-plane 8-bit YUV 4:2:0.
4481*54e60f84SAndroid Build Coastguard Worker  *
4482*54e60f84SAndroid Build Coastguard Worker  * The three planes contain Y, U and V respectively.
4483*54e60f84SAndroid Build Coastguard Worker  */
4484*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_I420          0x30323449
4485*54e60f84SAndroid Build Coastguard Worker /** YV24: three-plane 8-bit YUV 4:4:4.
4486*54e60f84SAndroid Build Coastguard Worker  *
4487*54e60f84SAndroid Build Coastguard Worker  * The three planes contain Y, V and U respectively.
4488*54e60f84SAndroid Build Coastguard Worker  */
4489*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_YV24          0x34325659
4490*54e60f84SAndroid Build Coastguard Worker /** YV32: four-plane 8-bit YUVA 4:4:4
4491*54e60f84SAndroid Build Coastguard Worker  *
4492*54e60f84SAndroid Build Coastguard Worker  * The four planes contain Y, V, U and A respectively.
4493*54e60f84SAndroid Build Coastguard Worker  */
4494*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_YV32          0x32335659
4495*54e60f84SAndroid Build Coastguard Worker /** Y800: 8-bit greyscale.
4496*54e60f84SAndroid Build Coastguard Worker  */
4497*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_Y800          0x30303859
4498*54e60f84SAndroid Build Coastguard Worker /** IMC3: three-plane 8-bit YUV 4:2:0.
4499*54e60f84SAndroid Build Coastguard Worker  *
4500*54e60f84SAndroid Build Coastguard Worker  * Equivalent to YV12, but with the additional constraint that the pitch of all three planes
4501*54e60f84SAndroid Build Coastguard Worker  * must be the same.
4502*54e60f84SAndroid Build Coastguard Worker  */
4503*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_IMC3          0x33434D49
4504*54e60f84SAndroid Build Coastguard Worker /** 411P: three-plane 8-bit YUV 4:1:1.
4505*54e60f84SAndroid Build Coastguard Worker  *
4506*54e60f84SAndroid Build Coastguard Worker  * The three planes contain Y, U and V respectively.
4507*54e60f84SAndroid Build Coastguard Worker  */
4508*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_411P          0x50313134
4509*54e60f84SAndroid Build Coastguard Worker /** 411R: three-plane 8-bit YUV.
4510*54e60f84SAndroid Build Coastguard Worker  *
4511*54e60f84SAndroid Build Coastguard Worker  * The subsampling is the transpose of 4:1:1 - full chroma appears on every fourth line.
4512*54e60f84SAndroid Build Coastguard Worker  * The three planes contain Y, U and V respectively.
4513*54e60f84SAndroid Build Coastguard Worker  */
4514*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_411R          0x52313134
4515*54e60f84SAndroid Build Coastguard Worker /** 422H: three-plane 8-bit YUV 4:2:2.
4516*54e60f84SAndroid Build Coastguard Worker  *
4517*54e60f84SAndroid Build Coastguard Worker  * The three planes contain Y, U and V respectively.
4518*54e60f84SAndroid Build Coastguard Worker  */
4519*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_422H          0x48323234
4520*54e60f84SAndroid Build Coastguard Worker /** 422V: three-plane 8-bit YUV 4:4:0.
4521*54e60f84SAndroid Build Coastguard Worker  *
4522*54e60f84SAndroid Build Coastguard Worker  * The three planes contain Y, U and V respectively.
4523*54e60f84SAndroid Build Coastguard Worker  */
4524*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_422V          0x56323234
4525*54e60f84SAndroid Build Coastguard Worker /** 444P: three-plane 8-bit YUV 4:4:4.
4526*54e60f84SAndroid Build Coastguard Worker  *
4527*54e60f84SAndroid Build Coastguard Worker  * The three planes contain Y, U and V respectively.
4528*54e60f84SAndroid Build Coastguard Worker  */
4529*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_444P          0x50343434
4530*54e60f84SAndroid Build Coastguard Worker 
4531*54e60f84SAndroid Build Coastguard Worker /** RGBP: three-plane 8-bit RGB.
4532*54e60f84SAndroid Build Coastguard Worker  *
4533*54e60f84SAndroid Build Coastguard Worker  * The three planes contain red, green and blue respectively.
4534*54e60f84SAndroid Build Coastguard Worker  */
4535*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_RGBP          0x50424752
4536*54e60f84SAndroid Build Coastguard Worker /** BGRP: three-plane 8-bit RGB.
4537*54e60f84SAndroid Build Coastguard Worker  *
4538*54e60f84SAndroid Build Coastguard Worker  * The three planes contain blue, green and red respectively.
4539*54e60f84SAndroid Build Coastguard Worker  */
4540*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_BGRP          0x50524742
4541*54e60f84SAndroid Build Coastguard Worker /** RG16: packed 5/6-bit RGB.
4542*54e60f84SAndroid Build Coastguard Worker  *
4543*54e60f84SAndroid Build Coastguard Worker  * Each pixel is a two-byte little-endian value.
4544*54e60f84SAndroid Build Coastguard Worker  * Red, green and blue are found in bits 15:11, 10:5, 4:0 respectively.
4545*54e60f84SAndroid Build Coastguard Worker  */
4546*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_RGB565        0x36314752
4547*54e60f84SAndroid Build Coastguard Worker /** BG16: packed 5/6-bit RGB.
4548*54e60f84SAndroid Build Coastguard Worker  *
4549*54e60f84SAndroid Build Coastguard Worker  * Each pixel is a two-byte little-endian value.
4550*54e60f84SAndroid Build Coastguard Worker  * Blue, green and red are found in bits 15:11, 10:5, 4:0 respectively.
4551*54e60f84SAndroid Build Coastguard Worker  */
4552*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_BGR565        0x36314742
4553*54e60f84SAndroid Build Coastguard Worker 
4554*54e60f84SAndroid Build Coastguard Worker /** Y210: packed 10-bit YUV 4:2:2.
4555*54e60f84SAndroid Build Coastguard Worker  *
4556*54e60f84SAndroid Build Coastguard Worker  * Eight bytes represent a pair of pixels.  Each sample is a two-byte little-endian value,
4557*54e60f84SAndroid Build Coastguard Worker  * with the bottom six bits ignored.  The samples are in the order Y, U, Y, V.
4558*54e60f84SAndroid Build Coastguard Worker  */
4559*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_Y210          0x30313259
4560*54e60f84SAndroid Build Coastguard Worker /** Y212: packed 12-bit YUV 4:2:2.
4561*54e60f84SAndroid Build Coastguard Worker  *
4562*54e60f84SAndroid Build Coastguard Worker  * Eight bytes represent a pair of pixels.  Each sample is a two-byte little-endian value.
4563*54e60f84SAndroid Build Coastguard Worker  * The samples are in the order Y, U, Y, V.
4564*54e60f84SAndroid Build Coastguard Worker  */
4565*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_Y212          0x32313259
4566*54e60f84SAndroid Build Coastguard Worker /** Y216: packed 16-bit YUV 4:2:2.
4567*54e60f84SAndroid Build Coastguard Worker  *
4568*54e60f84SAndroid Build Coastguard Worker  * Eight bytes represent a pair of pixels.  Each sample is a two-byte little-endian value.
4569*54e60f84SAndroid Build Coastguard Worker  * The samples are in the order Y, U, Y, V.
4570*54e60f84SAndroid Build Coastguard Worker  */
4571*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_Y216          0x36313259
4572*54e60f84SAndroid Build Coastguard Worker /** Y410: packed 10-bit YUVA 4:4:4.
4573*54e60f84SAndroid Build Coastguard Worker  *
4574*54e60f84SAndroid Build Coastguard Worker  * Each pixel is a four-byte little-endian value.
4575*54e60f84SAndroid Build Coastguard Worker  * A, V, Y, U are found in bits 31:30, 29:20, 19:10, 9:0 respectively.
4576*54e60f84SAndroid Build Coastguard Worker  */
4577*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_Y410          0x30313459
4578*54e60f84SAndroid Build Coastguard Worker /** Y412 packed 12-bit YUVA 4:4:4.
4579*54e60f84SAndroid Build Coastguard Worker  *
4580*54e60f84SAndroid Build Coastguard Worker  * Each pixel is a set of four samples, each of which is a two-byte little-endian value.
4581*54e60f84SAndroid Build Coastguard Worker  * The samples are in the order A, V, Y, U.
4582*54e60f84SAndroid Build Coastguard Worker  */
4583*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_Y412          0x32313459
4584*54e60f84SAndroid Build Coastguard Worker /** Y416: packed 16-bit YUVA 4:4:4.
4585*54e60f84SAndroid Build Coastguard Worker  *
4586*54e60f84SAndroid Build Coastguard Worker  * Each pixel is a set of four samples, each of which is a two-byte little-endian value.
4587*54e60f84SAndroid Build Coastguard Worker  * The samples are in the order A, V, Y, U.
4588*54e60f84SAndroid Build Coastguard Worker  */
4589*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_Y416          0x36313459
4590*54e60f84SAndroid Build Coastguard Worker 
4591*54e60f84SAndroid Build Coastguard Worker /** YV16: three-plane 8-bit YUV 4:2:2.
4592*54e60f84SAndroid Build Coastguard Worker  *
4593*54e60f84SAndroid Build Coastguard Worker  * The three planes contain Y, V and U respectively.
4594*54e60f84SAndroid Build Coastguard Worker  */
4595*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_YV16          0x36315659
4596*54e60f84SAndroid Build Coastguard Worker /** P010: two-plane 10-bit YUV 4:2:0.
4597*54e60f84SAndroid Build Coastguard Worker  *
4598*54e60f84SAndroid Build Coastguard Worker  * Each sample is a two-byte little-endian value with the bottom six bits ignored.
4599*54e60f84SAndroid Build Coastguard Worker  * The first plane contains Y, the second plane contains U and V in pairs of samples.
4600*54e60f84SAndroid Build Coastguard Worker  */
4601*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_P010          0x30313050
4602*54e60f84SAndroid Build Coastguard Worker /** P012: two-plane 12-bit YUV 4:2:0.
4603*54e60f84SAndroid Build Coastguard Worker  *
4604*54e60f84SAndroid Build Coastguard Worker  * Each sample is a two-byte little-endian value with the bottom four bits ignored.
4605*54e60f84SAndroid Build Coastguard Worker  * The first plane contains Y, the second plane contains U and V in pairs of samples.
4606*54e60f84SAndroid Build Coastguard Worker  */
4607*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_P012          0x32313050
4608*54e60f84SAndroid Build Coastguard Worker /** P016: two-plane 16-bit YUV 4:2:0.
4609*54e60f84SAndroid Build Coastguard Worker  *
4610*54e60f84SAndroid Build Coastguard Worker  * Each sample is a two-byte little-endian value.  The first plane contains Y, the second
4611*54e60f84SAndroid Build Coastguard Worker  * plane contains U and V in pairs of samples.
4612*54e60f84SAndroid Build Coastguard Worker  */
4613*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_P016          0x36313050
4614*54e60f84SAndroid Build Coastguard Worker 
4615*54e60f84SAndroid Build Coastguard Worker /** I010: three-plane 10-bit YUV 4:2:0.
4616*54e60f84SAndroid Build Coastguard Worker  *
4617*54e60f84SAndroid Build Coastguard Worker  * Each sample is a two-byte little-endian value with the top six bits ignored.
4618*54e60f84SAndroid Build Coastguard Worker  * The three planes contain Y, V and U respectively.
4619*54e60f84SAndroid Build Coastguard Worker  */
4620*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_I010          0x30313049
4621*54e60f84SAndroid Build Coastguard Worker 
4622*54e60f84SAndroid Build Coastguard Worker /** IYUV: three-plane 8-bit YUV 4:2:0.
4623*54e60f84SAndroid Build Coastguard Worker  *
4624*54e60f84SAndroid Build Coastguard Worker  * @deprecated Use I420 instead.
4625*54e60f84SAndroid Build Coastguard Worker  */
4626*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_IYUV          0x56555949
4627*54e60f84SAndroid Build Coastguard Worker /**
4628*54e60f84SAndroid Build Coastguard Worker  * 10-bit Pixel RGB formats.
4629*54e60f84SAndroid Build Coastguard Worker  */
4630*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_A2R10G10B10   0x30335241 /* VA_FOURCC('A','R','3','0') */
4631*54e60f84SAndroid Build Coastguard Worker /**
4632*54e60f84SAndroid Build Coastguard Worker  * 10-bit Pixel BGR formats.
4633*54e60f84SAndroid Build Coastguard Worker  */
4634*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_A2B10G10R10   0x30334241 /* VA_FOURCC('A','B','3','0') */
4635*54e60f84SAndroid Build Coastguard Worker /**
4636*54e60f84SAndroid Build Coastguard Worker  * 10-bit Pixel RGB formats without alpha.
4637*54e60f84SAndroid Build Coastguard Worker  */
4638*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_X2R10G10B10   0x30335258 /* VA_FOURCC('X','R','3','0') */
4639*54e60f84SAndroid Build Coastguard Worker /**
4640*54e60f84SAndroid Build Coastguard Worker  * 10-bit Pixel BGR formats without alpha.
4641*54e60f84SAndroid Build Coastguard Worker  */
4642*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_X2B10G10R10   0x30334258 /* VA_FOURCC('X','B','3','0') */
4643*54e60f84SAndroid Build Coastguard Worker 
4644*54e60f84SAndroid Build Coastguard Worker /** Y8: 8-bit greyscale.
4645*54e60f84SAndroid Build Coastguard Worker  *
4646*54e60f84SAndroid Build Coastguard Worker  * Only a single sample, 8 bit Y plane for monochrome images
4647*54e60f84SAndroid Build Coastguard Worker  */
4648*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_Y8            0x20203859
4649*54e60f84SAndroid Build Coastguard Worker /** Y16: 16-bit greyscale.
4650*54e60f84SAndroid Build Coastguard Worker  *
4651*54e60f84SAndroid Build Coastguard Worker  * Only a single sample, 16 bit Y plane for monochrome images
4652*54e60f84SAndroid Build Coastguard Worker  */
4653*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_Y16           0x20363159
4654*54e60f84SAndroid Build Coastguard Worker /** VYUV: packed 8-bit YUV 4:2:2.
4655*54e60f84SAndroid Build Coastguard Worker  *
4656*54e60f84SAndroid Build Coastguard Worker  * Four bytes per pair of pixels: V, Y, U, V.
4657*54e60f84SAndroid Build Coastguard Worker  */
4658*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_VYUY          0x59555956
4659*54e60f84SAndroid Build Coastguard Worker /** YVYU: packed 8-bit YUV 4:2:2.
4660*54e60f84SAndroid Build Coastguard Worker  *
4661*54e60f84SAndroid Build Coastguard Worker  * Four bytes per pair of pixels: Y, V, Y, U.
4662*54e60f84SAndroid Build Coastguard Worker  */
4663*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_YVYU          0x55595659
4664*54e60f84SAndroid Build Coastguard Worker /** AGRB64: three-plane 16-bit ARGB 16:16:16:16
4665*54e60f84SAndroid Build Coastguard Worker  *
4666*54e60f84SAndroid Build Coastguard Worker  * The four planes contain: alpha, red, green, blue respectively.
4667*54e60f84SAndroid Build Coastguard Worker  */
4668*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_ARGB64        0x34475241
4669*54e60f84SAndroid Build Coastguard Worker /** ABGR64: three-plane 16-bit ABGR 16:16:16:16
4670*54e60f84SAndroid Build Coastguard Worker  *
4671*54e60f84SAndroid Build Coastguard Worker  * The four planes contain: alpha, blue, green, red respectively.
4672*54e60f84SAndroid Build Coastguard Worker  */
4673*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_ABGR64        0x34474241
4674*54e60f84SAndroid Build Coastguard Worker /** XYUV: packed 8-bit YUVX 4:4:4.
4675*54e60f84SAndroid Build Coastguard Worker  *
4676*54e60f84SAndroid Build Coastguard Worker  * Four bytes per pixel: X, Y, U, V.
4677*54e60f84SAndroid Build Coastguard Worker  */
4678*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_XYUV          0x56555958
4679*54e60f84SAndroid Build Coastguard Worker /** Q416: three-plane 16-bit YUV 4:4:4.
4680*54e60f84SAndroid Build Coastguard Worker  *
4681*54e60f84SAndroid Build Coastguard Worker  * The three planes contain Y, U and V respectively.
4682*54e60f84SAndroid Build Coastguard Worker  */
4683*54e60f84SAndroid Build Coastguard Worker #define VA_FOURCC_Q416          0x36313451
4684*54e60f84SAndroid Build Coastguard Worker 
4685*54e60f84SAndroid Build Coastguard Worker /* byte order */
4686*54e60f84SAndroid Build Coastguard Worker #define VA_LSB_FIRST        1
4687*54e60f84SAndroid Build Coastguard Worker #define VA_MSB_FIRST        2
4688*54e60f84SAndroid Build Coastguard Worker 
4689*54e60f84SAndroid Build Coastguard Worker typedef struct _VAImageFormat {
4690*54e60f84SAndroid Build Coastguard Worker     uint32_t    fourcc;
4691*54e60f84SAndroid Build Coastguard Worker     uint32_t    byte_order; /* VA_LSB_FIRST, VA_MSB_FIRST */
4692*54e60f84SAndroid Build Coastguard Worker     uint32_t    bits_per_pixel;
4693*54e60f84SAndroid Build Coastguard Worker     /* for RGB formats */
4694*54e60f84SAndroid Build Coastguard Worker     uint32_t    depth; /* significant bits per pixel */
4695*54e60f84SAndroid Build Coastguard Worker     uint32_t    red_mask;
4696*54e60f84SAndroid Build Coastguard Worker     uint32_t    green_mask;
4697*54e60f84SAndroid Build Coastguard Worker     uint32_t    blue_mask;
4698*54e60f84SAndroid Build Coastguard Worker     uint32_t    alpha_mask;
4699*54e60f84SAndroid Build Coastguard Worker 
4700*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
4701*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
4702*54e60f84SAndroid Build Coastguard Worker } VAImageFormat;
4703*54e60f84SAndroid Build Coastguard Worker 
4704*54e60f84SAndroid Build Coastguard Worker typedef VAGenericID VAImageID;
4705*54e60f84SAndroid Build Coastguard Worker 
4706*54e60f84SAndroid Build Coastguard Worker typedef struct _VAImage {
4707*54e60f84SAndroid Build Coastguard Worker     VAImageID       image_id; /* uniquely identify this image */
4708*54e60f84SAndroid Build Coastguard Worker     VAImageFormat   format;
4709*54e60f84SAndroid Build Coastguard Worker     VABufferID      buf;    /* image data buffer */
4710*54e60f84SAndroid Build Coastguard Worker     /*
4711*54e60f84SAndroid Build Coastguard Worker      * Image data will be stored in a buffer of type VAImageBufferType to facilitate
4712*54e60f84SAndroid Build Coastguard Worker      * data store on the server side for optimal performance. The buffer will be
4713*54e60f84SAndroid Build Coastguard Worker      * created by the CreateImage function, and proper storage allocated based on the image
4714*54e60f84SAndroid Build Coastguard Worker      * size and format. This buffer is managed by the library implementation, and
4715*54e60f84SAndroid Build Coastguard Worker      * accessed by the client through the buffer Map/Unmap functions.
4716*54e60f84SAndroid Build Coastguard Worker      */
4717*54e60f84SAndroid Build Coastguard Worker     uint16_t    width;
4718*54e60f84SAndroid Build Coastguard Worker     uint16_t    height;
4719*54e60f84SAndroid Build Coastguard Worker     uint32_t    data_size;
4720*54e60f84SAndroid Build Coastguard Worker     uint32_t    num_planes; /* can not be greater than 3 */
4721*54e60f84SAndroid Build Coastguard Worker     /*
4722*54e60f84SAndroid Build Coastguard Worker      * An array indicating the scanline pitch in bytes for each plane.
4723*54e60f84SAndroid Build Coastguard Worker      * Each plane may have a different pitch. Maximum 3 planes for planar formats
4724*54e60f84SAndroid Build Coastguard Worker      */
4725*54e60f84SAndroid Build Coastguard Worker     uint32_t    pitches[3];
4726*54e60f84SAndroid Build Coastguard Worker     /*
4727*54e60f84SAndroid Build Coastguard Worker      * An array indicating the byte offset from the beginning of the image data
4728*54e60f84SAndroid Build Coastguard Worker      * to the start of each plane.
4729*54e60f84SAndroid Build Coastguard Worker      */
4730*54e60f84SAndroid Build Coastguard Worker     uint32_t    offsets[3];
4731*54e60f84SAndroid Build Coastguard Worker 
4732*54e60f84SAndroid Build Coastguard Worker     /* The following fields are only needed for paletted formats */
4733*54e60f84SAndroid Build Coastguard Worker     int32_t num_palette_entries;   /* set to zero for non-palette images */
4734*54e60f84SAndroid Build Coastguard Worker     /*
4735*54e60f84SAndroid Build Coastguard Worker      * Each component is one byte and entry_bytes indicates the number of components in
4736*54e60f84SAndroid Build Coastguard Worker      * each entry (eg. 3 for YUV palette entries). set to zero for non-palette images
4737*54e60f84SAndroid Build Coastguard Worker      */
4738*54e60f84SAndroid Build Coastguard Worker     int32_t entry_bytes;
4739*54e60f84SAndroid Build Coastguard Worker     /*
4740*54e60f84SAndroid Build Coastguard Worker      * An array of ascii characters describing the order of the components within the bytes.
4741*54e60f84SAndroid Build Coastguard Worker      * Only entry_bytes characters of the string are used.
4742*54e60f84SAndroid Build Coastguard Worker      */
4743*54e60f84SAndroid Build Coastguard Worker     int8_t component_order[4];
4744*54e60f84SAndroid Build Coastguard Worker 
4745*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
4746*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
4747*54e60f84SAndroid Build Coastguard Worker } VAImage;
4748*54e60f84SAndroid Build Coastguard Worker 
4749*54e60f84SAndroid Build Coastguard Worker /** Get maximum number of image formats supported by the implementation */
4750*54e60f84SAndroid Build Coastguard Worker int vaMaxNumImageFormats(
4751*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy
4752*54e60f84SAndroid Build Coastguard Worker );
4753*54e60f84SAndroid Build Coastguard Worker 
4754*54e60f84SAndroid Build Coastguard Worker /**
4755*54e60f84SAndroid Build Coastguard Worker  * Query supported image formats
4756*54e60f84SAndroid Build Coastguard Worker  * The caller must provide a "format_list" array that can hold at
4757*54e60f84SAndroid Build Coastguard Worker  * least vaMaxNumImageFormats() entries. The actual number of formats
4758*54e60f84SAndroid Build Coastguard Worker  * returned in "format_list" is returned in "num_formats".
4759*54e60f84SAndroid Build Coastguard Worker  */
4760*54e60f84SAndroid Build Coastguard Worker VAStatus vaQueryImageFormats(
4761*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
4762*54e60f84SAndroid Build Coastguard Worker     VAImageFormat *format_list, /* out */
4763*54e60f84SAndroid Build Coastguard Worker     int *num_formats        /* out */
4764*54e60f84SAndroid Build Coastguard Worker );
4765*54e60f84SAndroid Build Coastguard Worker 
4766*54e60f84SAndroid Build Coastguard Worker /**
4767*54e60f84SAndroid Build Coastguard Worker  * Create a VAImage structure
4768*54e60f84SAndroid Build Coastguard Worker  * The width and height fields returned in the VAImage structure may get
4769*54e60f84SAndroid Build Coastguard Worker  * enlarged for some YUV formats. Upon return from this function,
4770*54e60f84SAndroid Build Coastguard Worker  * image->buf has been created and proper storage allocated by the library.
4771*54e60f84SAndroid Build Coastguard Worker  * The client can access the image through the Map/Unmap calls.
4772*54e60f84SAndroid Build Coastguard Worker  */
4773*54e60f84SAndroid Build Coastguard Worker VAStatus vaCreateImage(
4774*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
4775*54e60f84SAndroid Build Coastguard Worker     VAImageFormat *format,
4776*54e60f84SAndroid Build Coastguard Worker     int width,
4777*54e60f84SAndroid Build Coastguard Worker     int height,
4778*54e60f84SAndroid Build Coastguard Worker     VAImage *image  /* out */
4779*54e60f84SAndroid Build Coastguard Worker );
4780*54e60f84SAndroid Build Coastguard Worker 
4781*54e60f84SAndroid Build Coastguard Worker /**
4782*54e60f84SAndroid Build Coastguard Worker  * Should call DestroyImage before destroying the surface it is bound to
4783*54e60f84SAndroid Build Coastguard Worker  */
4784*54e60f84SAndroid Build Coastguard Worker VAStatus vaDestroyImage(
4785*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
4786*54e60f84SAndroid Build Coastguard Worker     VAImageID image
4787*54e60f84SAndroid Build Coastguard Worker );
4788*54e60f84SAndroid Build Coastguard Worker 
4789*54e60f84SAndroid Build Coastguard Worker VAStatus vaSetImagePalette(
4790*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
4791*54e60f84SAndroid Build Coastguard Worker     VAImageID image,
4792*54e60f84SAndroid Build Coastguard Worker     /*
4793*54e60f84SAndroid Build Coastguard Worker      * pointer to an array holding the palette data.  The size of the array is
4794*54e60f84SAndroid Build Coastguard Worker      * num_palette_entries * entry_bytes in size.  The order of the components
4795*54e60f84SAndroid Build Coastguard Worker      * in the palette is described by the component_order in VAImage struct
4796*54e60f84SAndroid Build Coastguard Worker      */
4797*54e60f84SAndroid Build Coastguard Worker     unsigned char *palette
4798*54e60f84SAndroid Build Coastguard Worker );
4799*54e60f84SAndroid Build Coastguard Worker 
4800*54e60f84SAndroid Build Coastguard Worker /**
4801*54e60f84SAndroid Build Coastguard Worker  * Retrive surface data into a VAImage
4802*54e60f84SAndroid Build Coastguard Worker  * Image must be in a format supported by the implementation
4803*54e60f84SAndroid Build Coastguard Worker  */
4804*54e60f84SAndroid Build Coastguard Worker VAStatus vaGetImage(
4805*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
4806*54e60f84SAndroid Build Coastguard Worker     VASurfaceID surface,
4807*54e60f84SAndroid Build Coastguard Worker     int x,  /* coordinates of the upper left source pixel */
4808*54e60f84SAndroid Build Coastguard Worker     int y,
4809*54e60f84SAndroid Build Coastguard Worker     unsigned int width, /* width and height of the region */
4810*54e60f84SAndroid Build Coastguard Worker     unsigned int height,
4811*54e60f84SAndroid Build Coastguard Worker     VAImageID image
4812*54e60f84SAndroid Build Coastguard Worker );
4813*54e60f84SAndroid Build Coastguard Worker 
4814*54e60f84SAndroid Build Coastguard Worker /**
4815*54e60f84SAndroid Build Coastguard Worker  * Copy data from a VAImage to a surface
4816*54e60f84SAndroid Build Coastguard Worker  * Image must be in a format supported by the implementation
4817*54e60f84SAndroid Build Coastguard Worker  * Returns a VA_STATUS_ERROR_SURFACE_BUSY if the surface
4818*54e60f84SAndroid Build Coastguard Worker  * shouldn't be rendered into when this is called
4819*54e60f84SAndroid Build Coastguard Worker  */
4820*54e60f84SAndroid Build Coastguard Worker VAStatus vaPutImage(
4821*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
4822*54e60f84SAndroid Build Coastguard Worker     VASurfaceID surface,
4823*54e60f84SAndroid Build Coastguard Worker     VAImageID image,
4824*54e60f84SAndroid Build Coastguard Worker     int src_x,
4825*54e60f84SAndroid Build Coastguard Worker     int src_y,
4826*54e60f84SAndroid Build Coastguard Worker     unsigned int src_width,
4827*54e60f84SAndroid Build Coastguard Worker     unsigned int src_height,
4828*54e60f84SAndroid Build Coastguard Worker     int dest_x,
4829*54e60f84SAndroid Build Coastguard Worker     int dest_y,
4830*54e60f84SAndroid Build Coastguard Worker     unsigned int dest_width,
4831*54e60f84SAndroid Build Coastguard Worker     unsigned int dest_height
4832*54e60f84SAndroid Build Coastguard Worker );
4833*54e60f84SAndroid Build Coastguard Worker 
4834*54e60f84SAndroid Build Coastguard Worker /**
4835*54e60f84SAndroid Build Coastguard Worker  * Derive an VAImage from an existing surface.
4836*54e60f84SAndroid Build Coastguard Worker  * This interface will derive a VAImage and corresponding image buffer from
4837*54e60f84SAndroid Build Coastguard Worker  * an existing VA Surface. The image buffer can then be mapped/unmapped for
4838*54e60f84SAndroid Build Coastguard Worker  * direct CPU access. This operation is only possible on implementations with
4839*54e60f84SAndroid Build Coastguard Worker  * direct rendering capabilities and internal surface formats that can be
4840*54e60f84SAndroid Build Coastguard Worker  * represented with a VAImage. When the operation is not possible this interface
4841*54e60f84SAndroid Build Coastguard Worker  * will return VA_STATUS_ERROR_OPERATION_FAILED. Clients should then fall back
4842*54e60f84SAndroid Build Coastguard Worker  * to using vaCreateImage + vaPutImage to accomplish the same task in an
4843*54e60f84SAndroid Build Coastguard Worker  * indirect manner.
4844*54e60f84SAndroid Build Coastguard Worker  *
4845*54e60f84SAndroid Build Coastguard Worker  * Implementations should only return success when the resulting image buffer
4846*54e60f84SAndroid Build Coastguard Worker  * would be useable with vaMap/Unmap.
4847*54e60f84SAndroid Build Coastguard Worker  *
4848*54e60f84SAndroid Build Coastguard Worker  * When directly accessing a surface special care must be taken to insure
4849*54e60f84SAndroid Build Coastguard Worker  * proper synchronization with the graphics hardware. Clients should call
4850*54e60f84SAndroid Build Coastguard Worker  * vaQuerySurfaceStatus to insure that a surface is not the target of concurrent
4851*54e60f84SAndroid Build Coastguard Worker  * rendering or currently being displayed by an overlay.
4852*54e60f84SAndroid Build Coastguard Worker  *
4853*54e60f84SAndroid Build Coastguard Worker  * Additionally nothing about the contents of a surface should be assumed
4854*54e60f84SAndroid Build Coastguard Worker  * following a vaPutSurface. Implementations are free to modify the surface for
4855*54e60f84SAndroid Build Coastguard Worker  * scaling or subpicture blending within a call to vaPutImage.
4856*54e60f84SAndroid Build Coastguard Worker  *
4857*54e60f84SAndroid Build Coastguard Worker  * Calls to vaPutImage or vaGetImage using the same surface from which the image
4858*54e60f84SAndroid Build Coastguard Worker  * has been derived will return VA_STATUS_ERROR_SURFACE_BUSY. vaPutImage or
4859*54e60f84SAndroid Build Coastguard Worker  * vaGetImage with other surfaces is supported.
4860*54e60f84SAndroid Build Coastguard Worker  *
4861*54e60f84SAndroid Build Coastguard Worker  * An image created with vaDeriveImage should be freed with vaDestroyImage. The
4862*54e60f84SAndroid Build Coastguard Worker  * image and image buffer structures will be destroyed; however, the underlying
4863*54e60f84SAndroid Build Coastguard Worker  * surface will remain unchanged until freed with vaDestroySurfaces.
4864*54e60f84SAndroid Build Coastguard Worker  */
4865*54e60f84SAndroid Build Coastguard Worker VAStatus vaDeriveImage(
4866*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
4867*54e60f84SAndroid Build Coastguard Worker     VASurfaceID surface,
4868*54e60f84SAndroid Build Coastguard Worker     VAImage *image  /* out */
4869*54e60f84SAndroid Build Coastguard Worker );
4870*54e60f84SAndroid Build Coastguard Worker 
4871*54e60f84SAndroid Build Coastguard Worker /**
4872*54e60f84SAndroid Build Coastguard Worker  * Subpictures
4873*54e60f84SAndroid Build Coastguard Worker  * Subpicture is a special type of image that can be blended
4874*54e60f84SAndroid Build Coastguard Worker  * with a surface during vaPutSurface(). Subpicture can be used to render
4875*54e60f84SAndroid Build Coastguard Worker  * DVD sub-titles or closed captioning text etc.
4876*54e60f84SAndroid Build Coastguard Worker  */
4877*54e60f84SAndroid Build Coastguard Worker 
4878*54e60f84SAndroid Build Coastguard Worker typedef VAGenericID VASubpictureID;
4879*54e60f84SAndroid Build Coastguard Worker 
4880*54e60f84SAndroid Build Coastguard Worker /** Get maximum number of subpicture formats supported by the implementation */
4881*54e60f84SAndroid Build Coastguard Worker int vaMaxNumSubpictureFormats(
4882*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy
4883*54e60f84SAndroid Build Coastguard Worker );
4884*54e60f84SAndroid Build Coastguard Worker 
4885*54e60f84SAndroid Build Coastguard Worker /** flags for subpictures */
4886*54e60f84SAndroid Build Coastguard Worker #define VA_SUBPICTURE_CHROMA_KEYING         0x0001
4887*54e60f84SAndroid Build Coastguard Worker #define VA_SUBPICTURE_GLOBAL_ALPHA          0x0002
4888*54e60f84SAndroid Build Coastguard Worker #define VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD   0x0004
4889*54e60f84SAndroid Build Coastguard Worker /**
4890*54e60f84SAndroid Build Coastguard Worker  * Query supported subpicture formats
4891*54e60f84SAndroid Build Coastguard Worker  * The caller must provide a "format_list" array that can hold at
4892*54e60f84SAndroid Build Coastguard Worker  * least vaMaxNumSubpictureFormats() entries. The flags arrary holds the flag
4893*54e60f84SAndroid Build Coastguard Worker  * for each format to indicate additional capabilities for that format. The actual
4894*54e60f84SAndroid Build Coastguard Worker  * number of formats returned in "format_list" is returned in "num_formats".
4895*54e60f84SAndroid Build Coastguard Worker  *  flags: returned value to indicate addtional capabilities
4896*54e60f84SAndroid Build Coastguard Worker  *         VA_SUBPICTURE_CHROMA_KEYING - supports chroma-keying
4897*54e60f84SAndroid Build Coastguard Worker  *         VA_SUBPICTURE_GLOBAL_ALPHA - supports global alpha
4898*54e60f84SAndroid Build Coastguard Worker  *     VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD - supports unscaled screen relative subpictures for On Screen Display
4899*54e60f84SAndroid Build Coastguard Worker  */
4900*54e60f84SAndroid Build Coastguard Worker 
4901*54e60f84SAndroid Build Coastguard Worker VAStatus vaQuerySubpictureFormats(
4902*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
4903*54e60f84SAndroid Build Coastguard Worker     VAImageFormat *format_list, /* out */
4904*54e60f84SAndroid Build Coastguard Worker     unsigned int *flags,    /* out */
4905*54e60f84SAndroid Build Coastguard Worker     unsigned int *num_formats   /* out */
4906*54e60f84SAndroid Build Coastguard Worker );
4907*54e60f84SAndroid Build Coastguard Worker 
4908*54e60f84SAndroid Build Coastguard Worker /**
4909*54e60f84SAndroid Build Coastguard Worker  * Subpictures are created with an image associated.
4910*54e60f84SAndroid Build Coastguard Worker  */
4911*54e60f84SAndroid Build Coastguard Worker VAStatus vaCreateSubpicture(
4912*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
4913*54e60f84SAndroid Build Coastguard Worker     VAImageID image,
4914*54e60f84SAndroid Build Coastguard Worker     VASubpictureID *subpicture  /* out */
4915*54e60f84SAndroid Build Coastguard Worker );
4916*54e60f84SAndroid Build Coastguard Worker 
4917*54e60f84SAndroid Build Coastguard Worker /**
4918*54e60f84SAndroid Build Coastguard Worker  * Destroy the subpicture before destroying the image it is assocated to
4919*54e60f84SAndroid Build Coastguard Worker  */
4920*54e60f84SAndroid Build Coastguard Worker VAStatus vaDestroySubpicture(
4921*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
4922*54e60f84SAndroid Build Coastguard Worker     VASubpictureID subpicture
4923*54e60f84SAndroid Build Coastguard Worker );
4924*54e60f84SAndroid Build Coastguard Worker 
4925*54e60f84SAndroid Build Coastguard Worker /**
4926*54e60f84SAndroid Build Coastguard Worker  * Bind an image to the subpicture. This image will now be associated with
4927*54e60f84SAndroid Build Coastguard Worker  * the subpicture instead of the one at creation.
4928*54e60f84SAndroid Build Coastguard Worker  */
4929*54e60f84SAndroid Build Coastguard Worker VAStatus vaSetSubpictureImage(
4930*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
4931*54e60f84SAndroid Build Coastguard Worker     VASubpictureID subpicture,
4932*54e60f84SAndroid Build Coastguard Worker     VAImageID image
4933*54e60f84SAndroid Build Coastguard Worker );
4934*54e60f84SAndroid Build Coastguard Worker 
4935*54e60f84SAndroid Build Coastguard Worker /**
4936*54e60f84SAndroid Build Coastguard Worker  * If chromakey is enabled, then the area where the source value falls within
4937*54e60f84SAndroid Build Coastguard Worker  * the chromakey [min, max] range is transparent
4938*54e60f84SAndroid Build Coastguard Worker  * The chromakey component format is the following:
4939*54e60f84SAndroid Build Coastguard Worker  *  For RGB: [0:7] Red [8:15] Blue [16:23] Green
4940*54e60f84SAndroid Build Coastguard Worker  *  For YUV: [0:7] V [8:15] U [16:23] Y
4941*54e60f84SAndroid Build Coastguard Worker  * The chromakey mask can be used to mask out certain components for chromakey
4942*54e60f84SAndroid Build Coastguard Worker  * comparision
4943*54e60f84SAndroid Build Coastguard Worker  */
4944*54e60f84SAndroid Build Coastguard Worker VAStatus vaSetSubpictureChromakey(
4945*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
4946*54e60f84SAndroid Build Coastguard Worker     VASubpictureID subpicture,
4947*54e60f84SAndroid Build Coastguard Worker     unsigned int chromakey_min,
4948*54e60f84SAndroid Build Coastguard Worker     unsigned int chromakey_max,
4949*54e60f84SAndroid Build Coastguard Worker     unsigned int chromakey_mask
4950*54e60f84SAndroid Build Coastguard Worker );
4951*54e60f84SAndroid Build Coastguard Worker 
4952*54e60f84SAndroid Build Coastguard Worker /**
4953*54e60f84SAndroid Build Coastguard Worker  * Global alpha value is between 0 and 1. A value of 1 means fully opaque and
4954*54e60f84SAndroid Build Coastguard Worker  * a value of 0 means fully transparent. If per-pixel alpha is also specified then
4955*54e60f84SAndroid Build Coastguard Worker  * the overall alpha is per-pixel alpha multiplied by the global alpha
4956*54e60f84SAndroid Build Coastguard Worker  */
4957*54e60f84SAndroid Build Coastguard Worker VAStatus vaSetSubpictureGlobalAlpha(
4958*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
4959*54e60f84SAndroid Build Coastguard Worker     VASubpictureID subpicture,
4960*54e60f84SAndroid Build Coastguard Worker     float global_alpha
4961*54e60f84SAndroid Build Coastguard Worker );
4962*54e60f84SAndroid Build Coastguard Worker 
4963*54e60f84SAndroid Build Coastguard Worker /**
4964*54e60f84SAndroid Build Coastguard Worker  * vaAssociateSubpicture associates the subpicture with target_surfaces.
4965*54e60f84SAndroid Build Coastguard Worker  * It defines the region mapping between the subpicture and the target
4966*54e60f84SAndroid Build Coastguard Worker  * surfaces through source and destination rectangles (with the same width and height).
4967*54e60f84SAndroid Build Coastguard Worker  * Both will be displayed at the next call to vaPutSurface.  Additional
4968*54e60f84SAndroid Build Coastguard Worker  * associations before the call to vaPutSurface simply overrides the association.
4969*54e60f84SAndroid Build Coastguard Worker  */
4970*54e60f84SAndroid Build Coastguard Worker VAStatus vaAssociateSubpicture(
4971*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
4972*54e60f84SAndroid Build Coastguard Worker     VASubpictureID subpicture,
4973*54e60f84SAndroid Build Coastguard Worker     VASurfaceID *target_surfaces,
4974*54e60f84SAndroid Build Coastguard Worker     int num_surfaces,
4975*54e60f84SAndroid Build Coastguard Worker     int16_t src_x, /* upper left offset in subpicture */
4976*54e60f84SAndroid Build Coastguard Worker     int16_t src_y,
4977*54e60f84SAndroid Build Coastguard Worker     uint16_t src_width,
4978*54e60f84SAndroid Build Coastguard Worker     uint16_t src_height,
4979*54e60f84SAndroid Build Coastguard Worker     int16_t dest_x, /* upper left offset in surface */
4980*54e60f84SAndroid Build Coastguard Worker     int16_t dest_y,
4981*54e60f84SAndroid Build Coastguard Worker     uint16_t dest_width,
4982*54e60f84SAndroid Build Coastguard Worker     uint16_t dest_height,
4983*54e60f84SAndroid Build Coastguard Worker     /*
4984*54e60f84SAndroid Build Coastguard Worker      * whether to enable chroma-keying, global-alpha, or screen relative mode
4985*54e60f84SAndroid Build Coastguard Worker      * see VA_SUBPICTURE_XXX values
4986*54e60f84SAndroid Build Coastguard Worker      */
4987*54e60f84SAndroid Build Coastguard Worker     uint32_t flags
4988*54e60f84SAndroid Build Coastguard Worker );
4989*54e60f84SAndroid Build Coastguard Worker 
4990*54e60f84SAndroid Build Coastguard Worker /**
4991*54e60f84SAndroid Build Coastguard Worker  * vaDeassociateSubpicture removes the association of the subpicture with target_surfaces.
4992*54e60f84SAndroid Build Coastguard Worker  */
4993*54e60f84SAndroid Build Coastguard Worker VAStatus vaDeassociateSubpicture(
4994*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
4995*54e60f84SAndroid Build Coastguard Worker     VASubpictureID subpicture,
4996*54e60f84SAndroid Build Coastguard Worker     VASurfaceID *target_surfaces,
4997*54e60f84SAndroid Build Coastguard Worker     int num_surfaces
4998*54e60f84SAndroid Build Coastguard Worker );
4999*54e60f84SAndroid Build Coastguard Worker 
5000*54e60f84SAndroid Build Coastguard Worker /**
5001*54e60f84SAndroid Build Coastguard Worker  * Display attributes
5002*54e60f84SAndroid Build Coastguard Worker  * Display attributes are used to control things such as contrast, hue, saturation,
5003*54e60f84SAndroid Build Coastguard Worker  * brightness etc. in the rendering process.  The application can query what
5004*54e60f84SAndroid Build Coastguard Worker  * attributes are supported by the driver, and then set the appropriate attributes
5005*54e60f84SAndroid Build Coastguard Worker  * before calling vaPutSurface()
5006*54e60f84SAndroid Build Coastguard Worker  *
5007*54e60f84SAndroid Build Coastguard Worker  * Display attributes can also be used to query/set platform or display adaptor (vaDisplay)
5008*54e60f84SAndroid Build Coastguard Worker  * related information. These attributes do not depend on vaConfig, and could not be used
5009*54e60f84SAndroid Build Coastguard Worker  * for vaPutSurface. Application can use vaQueryDisplayAttributes/vaGetDisplayAttributes
5010*54e60f84SAndroid Build Coastguard Worker  * at anytime after vaInitialize, but (for settable attributes) vaSetDisplayAttributes should be
5011*54e60f84SAndroid Build Coastguard Worker  * called after vaInitialize and before any other function call.
5012*54e60f84SAndroid Build Coastguard Worker  *
5013*54e60f84SAndroid Build Coastguard Worker  * To distinguish these two types of display attributes, display adaptor related attributes
5014*54e60f84SAndroid Build Coastguard Worker  * should be marked as "HW attribute" in the description.
5015*54e60f84SAndroid Build Coastguard Worker  */
5016*54e60f84SAndroid Build Coastguard Worker 
5017*54e60f84SAndroid Build Coastguard Worker /* PowerVR IEP Lite attributes */
5018*54e60f84SAndroid Build Coastguard Worker typedef enum {
5019*54e60f84SAndroid Build Coastguard Worker     VADISPLAYATTRIB_BLE_OFF              = 0x00,
5020*54e60f84SAndroid Build Coastguard Worker     VADISPLAYATTRIB_BLE_LOW,
5021*54e60f84SAndroid Build Coastguard Worker     VADISPLAYATTRIB_BLE_MEDIUM,
5022*54e60f84SAndroid Build Coastguard Worker     VADISPLAYATTRIB_BLE_HIGH,
5023*54e60f84SAndroid Build Coastguard Worker     VADISPLAYATTRIB_BLE_NONE,
5024*54e60f84SAndroid Build Coastguard Worker } VADisplayAttribBLEMode;
5025*54e60f84SAndroid Build Coastguard Worker 
5026*54e60f84SAndroid Build Coastguard Worker /** attribute value for VADisplayAttribRotation   */
5027*54e60f84SAndroid Build Coastguard Worker #define VA_ROTATION_NONE        0x00000000
5028*54e60f84SAndroid Build Coastguard Worker #define VA_ROTATION_90          0x00000001
5029*54e60f84SAndroid Build Coastguard Worker #define VA_ROTATION_180         0x00000002
5030*54e60f84SAndroid Build Coastguard Worker #define VA_ROTATION_270         0x00000003
5031*54e60f84SAndroid Build Coastguard Worker /**@}*/
5032*54e60f84SAndroid Build Coastguard Worker 
5033*54e60f84SAndroid Build Coastguard Worker /**
5034*54e60f84SAndroid Build Coastguard Worker  * @name Mirroring directions
5035*54e60f84SAndroid Build Coastguard Worker  *
5036*54e60f84SAndroid Build Coastguard Worker  * Those values could be used for VADisplayAttribMirror attribute or
5037*54e60f84SAndroid Build Coastguard Worker  * VAProcPipelineParameterBuffer::mirror_state.
5038*54e60f84SAndroid Build Coastguard Worker 
5039*54e60f84SAndroid Build Coastguard Worker  */
5040*54e60f84SAndroid Build Coastguard Worker /**@{*/
5041*54e60f84SAndroid Build Coastguard Worker /** \brief No Mirroring. */
5042*54e60f84SAndroid Build Coastguard Worker #define VA_MIRROR_NONE              0x00000000
5043*54e60f84SAndroid Build Coastguard Worker /** \brief Horizontal Mirroring. */
5044*54e60f84SAndroid Build Coastguard Worker #define VA_MIRROR_HORIZONTAL        0x00000001
5045*54e60f84SAndroid Build Coastguard Worker /** \brief Vertical Mirroring. */
5046*54e60f84SAndroid Build Coastguard Worker #define VA_MIRROR_VERTICAL          0x00000002
5047*54e60f84SAndroid Build Coastguard Worker /**@}*/
5048*54e60f84SAndroid Build Coastguard Worker 
5049*54e60f84SAndroid Build Coastguard Worker /** attribute value for VADisplayAttribOutOfLoopDeblock */
5050*54e60f84SAndroid Build Coastguard Worker #define VA_OOL_DEBLOCKING_FALSE 0x00000000
5051*54e60f84SAndroid Build Coastguard Worker #define VA_OOL_DEBLOCKING_TRUE  0x00000001
5052*54e60f84SAndroid Build Coastguard Worker 
5053*54e60f84SAndroid Build Coastguard Worker /** Render mode */
5054*54e60f84SAndroid Build Coastguard Worker #define VA_RENDER_MODE_UNDEFINED           0
5055*54e60f84SAndroid Build Coastguard Worker #define VA_RENDER_MODE_LOCAL_OVERLAY       1
5056*54e60f84SAndroid Build Coastguard Worker #define VA_RENDER_MODE_LOCAL_GPU           2
5057*54e60f84SAndroid Build Coastguard Worker #define VA_RENDER_MODE_EXTERNAL_OVERLAY    4
5058*54e60f84SAndroid Build Coastguard Worker #define VA_RENDER_MODE_EXTERNAL_GPU        8
5059*54e60f84SAndroid Build Coastguard Worker 
5060*54e60f84SAndroid Build Coastguard Worker /** Render device */
5061*54e60f84SAndroid Build Coastguard Worker #define VA_RENDER_DEVICE_UNDEFINED  0
5062*54e60f84SAndroid Build Coastguard Worker #define VA_RENDER_DEVICE_LOCAL      1
5063*54e60f84SAndroid Build Coastguard Worker #define VA_RENDER_DEVICE_EXTERNAL   2
5064*54e60f84SAndroid Build Coastguard Worker 
5065*54e60f84SAndroid Build Coastguard Worker /**\brief sub device info
5066*54e60f84SAndroid Build Coastguard Worker  * Sub-device is the concept basing on the "device" behind "vaDisplay".
5067*54e60f84SAndroid Build Coastguard Worker  * If a device could be divided to several sub devices, the task of
5068*54e60f84SAndroid Build Coastguard Worker  * decode/encode/vpp could be assigned on one sub-device. So, application
5069*54e60f84SAndroid Build Coastguard Worker  * could choose the sub device before any other operations. After that,
5070*54e60f84SAndroid Build Coastguard Worker  * all of the task execution/resource allocation will be dispatched to
5071*54e60f84SAndroid Build Coastguard Worker  * the sub device. If application does not choose the sub device, driver
5072*54e60f84SAndroid Build Coastguard Worker  * will assign one as default.
5073*54e60f84SAndroid Build Coastguard Worker  *
5074*54e60f84SAndroid Build Coastguard Worker  * If the value == VA_ATTRIB_NOT_SUPPORTED, it mean that the attribute
5075*54e60f84SAndroid Build Coastguard Worker  * is unsupport or UNKNOWN.
5076*54e60f84SAndroid Build Coastguard Worker  */
5077*54e60f84SAndroid Build Coastguard Worker 
5078*54e60f84SAndroid Build Coastguard Worker typedef union _VADisplayAttribValSubDevice {
5079*54e60f84SAndroid Build Coastguard Worker     struct {
5080*54e60f84SAndroid Build Coastguard Worker         /** \brief current sub device index, read - write */
5081*54e60f84SAndroid Build Coastguard Worker         uint32_t current_sub_device     : 4;
5082*54e60f84SAndroid Build Coastguard Worker         /** \brief sub devices count, read - only */
5083*54e60f84SAndroid Build Coastguard Worker         uint32_t sub_device_count       : 4;
5084*54e60f84SAndroid Build Coastguard Worker         /** \brief reserved bits for future, must be zero*/
5085*54e60f84SAndroid Build Coastguard Worker         uint32_t reserved               : 8;
5086*54e60f84SAndroid Build Coastguard Worker         /** \brief bit mask to indicate which sub_device is available, read only
5087*54e60f84SAndroid Build Coastguard Worker          * \code
5088*54e60f84SAndroid Build Coastguard Worker          * VADisplayAttribValSubDevice reg;
5089*54e60f84SAndroid Build Coastguard Worker          * VADisplayAttribute reg_attr;
5090*54e60f84SAndroid Build Coastguard Worker          * reg_attr.type = VADisplayAttribSubDevice;
5091*54e60f84SAndroid Build Coastguard Worker          * vaGetDisplayAttributes(dpy, &reg_attr, 1);
5092*54e60f84SAndroid Build Coastguard Worker          * reg.value = reg_attr.value;
5093*54e60f84SAndroid Build Coastguard Worker          *
5094*54e60f84SAndroid Build Coastguard Worker          * for(int i = 0; i < reg.bits.sub_device_count; i ++ ){
5095*54e60f84SAndroid Build Coastguard Worker          *    if((1<<i) & reg.bits.sub_device_mask){
5096*54e60f84SAndroid Build Coastguard Worker          *        printf("sub device  %d can be selected", i);
5097*54e60f84SAndroid Build Coastguard Worker          *    }
5098*54e60f84SAndroid Build Coastguard Worker          *}
5099*54e60f84SAndroid Build Coastguard Worker          * \endcode
5100*54e60f84SAndroid Build Coastguard Worker          */
5101*54e60f84SAndroid Build Coastguard Worker         uint32_t sub_device_mask       : 16;
5102*54e60f84SAndroid Build Coastguard Worker     } bits;
5103*54e60f84SAndroid Build Coastguard Worker     uint32_t value;
5104*54e60f84SAndroid Build Coastguard Worker } VADisplayAttribValSubDevice;
5105*54e60f84SAndroid Build Coastguard Worker 
5106*54e60f84SAndroid Build Coastguard Worker /** Currently defined display attribute types */
5107*54e60f84SAndroid Build Coastguard Worker typedef enum {
5108*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribBrightness       = 0,
5109*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribContrast     = 1,
5110*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribHue          = 2,
5111*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribSaturation       = 3,
5112*54e60f84SAndroid Build Coastguard Worker     /* client can specifiy a background color for the target window
5113*54e60f84SAndroid Build Coastguard Worker      * the new feature of video conference,
5114*54e60f84SAndroid Build Coastguard Worker      * the uncovered area of the surface is filled by this color
5115*54e60f84SAndroid Build Coastguard Worker      * also it will blend with the decoded video color
5116*54e60f84SAndroid Build Coastguard Worker      */
5117*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribBackgroundColor      = 4,
5118*54e60f84SAndroid Build Coastguard Worker     /*
5119*54e60f84SAndroid Build Coastguard Worker      * this is a gettable only attribute. For some implementations that use the
5120*54e60f84SAndroid Build Coastguard Worker      * hardware overlay, after PutSurface is called, the surface can not be
5121*54e60f84SAndroid Build Coastguard Worker      * re-used until after the subsequent PutSurface call. If this is the case
5122*54e60f84SAndroid Build Coastguard Worker      * then the value for this attribute will be set to 1 so that the client
5123*54e60f84SAndroid Build Coastguard Worker      * will not attempt to re-use the surface right after returning from a call
5124*54e60f84SAndroid Build Coastguard Worker      * to PutSurface.
5125*54e60f84SAndroid Build Coastguard Worker      *
5126*54e60f84SAndroid Build Coastguard Worker      * Don't use it, use flag VASurfaceDisplaying of vaQuerySurfaceStatus since
5127*54e60f84SAndroid Build Coastguard Worker      * driver may use overlay or GPU alternatively
5128*54e60f84SAndroid Build Coastguard Worker      */
5129*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribDirectSurface       = 5,
5130*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribRotation            = 6,
5131*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribOutofLoopDeblock    = 7,
5132*54e60f84SAndroid Build Coastguard Worker 
5133*54e60f84SAndroid Build Coastguard Worker     /* PowerVR IEP Lite specific attributes */
5134*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribBLEBlackMode        = 8,
5135*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribBLEWhiteMode        = 9,
5136*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribBlueStretch         = 10,
5137*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribSkinColorCorrection = 11,
5138*54e60f84SAndroid Build Coastguard Worker     /*
5139*54e60f84SAndroid Build Coastguard Worker      * For type VADisplayAttribCSCMatrix, "value" field is a pointer to the color
5140*54e60f84SAndroid Build Coastguard Worker      * conversion matrix. Each element in the matrix is float-point
5141*54e60f84SAndroid Build Coastguard Worker      */
5142*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribCSCMatrix           = 12,
5143*54e60f84SAndroid Build Coastguard Worker     /* specify the constant color used to blend with video surface
5144*54e60f84SAndroid Build Coastguard Worker      * Cd = Cv*Cc*Ac + Cb *(1 - Ac) C means the constant RGB
5145*54e60f84SAndroid Build Coastguard Worker      *      d: the final color to overwrite into the frame buffer
5146*54e60f84SAndroid Build Coastguard Worker      *      v: decoded video after color conversion,
5147*54e60f84SAndroid Build Coastguard Worker      *      c: video color specified by VADisplayAttribBlendColor
5148*54e60f84SAndroid Build Coastguard Worker      *      b: background color of the drawable
5149*54e60f84SAndroid Build Coastguard Worker      */
5150*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribBlendColor          = 13,
5151*54e60f84SAndroid Build Coastguard Worker     /*
5152*54e60f84SAndroid Build Coastguard Worker      * Indicate driver to skip painting color key or not.
5153*54e60f84SAndroid Build Coastguard Worker      * only applicable if the render is overlay
5154*54e60f84SAndroid Build Coastguard Worker      */
5155*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribOverlayAutoPaintColorKey   = 14,
5156*54e60f84SAndroid Build Coastguard Worker     /*
5157*54e60f84SAndroid Build Coastguard Worker      * customized overlay color key, the format is RGB888
5158*54e60f84SAndroid Build Coastguard Worker      * [23:16] = Red, [15:08] = Green, [07:00] = Blue.
5159*54e60f84SAndroid Build Coastguard Worker      */
5160*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribOverlayColorKey  = 15,
5161*54e60f84SAndroid Build Coastguard Worker     /*
5162*54e60f84SAndroid Build Coastguard Worker      * The hint for the implementation of vaPutSurface
5163*54e60f84SAndroid Build Coastguard Worker      * normally, the driver could use an overlay or GPU to render the surface on the screen
5164*54e60f84SAndroid Build Coastguard Worker      * this flag provides APP the flexibity to switch the render dynamically
5165*54e60f84SAndroid Build Coastguard Worker      */
5166*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribRenderMode           = 16,
5167*54e60f84SAndroid Build Coastguard Worker     /*
5168*54e60f84SAndroid Build Coastguard Worker      * specify if vaPutSurface needs to render into specified monitors
5169*54e60f84SAndroid Build Coastguard Worker      * one example is that one external monitor (e.g. HDMI) is enabled,
5170*54e60f84SAndroid Build Coastguard Worker      * but the window manager is not aware of it, and there is no associated drawable
5171*54e60f84SAndroid Build Coastguard Worker      */
5172*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribRenderDevice        = 17,
5173*54e60f84SAndroid Build Coastguard Worker     /*
5174*54e60f84SAndroid Build Coastguard Worker      * specify vaPutSurface render area if there is no drawable on the monitor
5175*54e60f84SAndroid Build Coastguard Worker      */
5176*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribRenderRect          = 18,
5177*54e60f84SAndroid Build Coastguard Worker     /*
5178*54e60f84SAndroid Build Coastguard Worker      * HW attribute, read/write, specify the sub device configure
5179*54e60f84SAndroid Build Coastguard Worker      */
5180*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribSubDevice           = 19,
5181*54e60f84SAndroid Build Coastguard Worker     /*
5182*54e60f84SAndroid Build Coastguard Worker      * HW attribute. read only. specify whether vaCopy support on current HW
5183*54e60f84SAndroid Build Coastguard Worker      * The value of each bit should equal to 1 << VA_EXEC_MODE_XXX to represent
5184*54e60f84SAndroid Build Coastguard Worker      * modes of vaCopy
5185*54e60f84SAndroid Build Coastguard Worker      */
5186*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribCopy                 = 20,
5187*54e60f84SAndroid Build Coastguard Worker     /*
5188*54e60f84SAndroid Build Coastguard Worker      * HW attribute. read only. retrieve the device information from backend driver
5189*54e60f84SAndroid Build Coastguard Worker      * the value should be combined with vendor ID << 16 | device ID
5190*54e60f84SAndroid Build Coastguard Worker      */
5191*54e60f84SAndroid Build Coastguard Worker     VADisplayPCIID                      = 21,
5192*54e60f84SAndroid Build Coastguard Worker } VADisplayAttribType;
5193*54e60f84SAndroid Build Coastguard Worker 
5194*54e60f84SAndroid Build Coastguard Worker /* flags for VADisplayAttribute */
5195*54e60f84SAndroid Build Coastguard Worker #define VA_DISPLAY_ATTRIB_NOT_SUPPORTED 0x0000
5196*54e60f84SAndroid Build Coastguard Worker #define VA_DISPLAY_ATTRIB_GETTABLE  0x0001
5197*54e60f84SAndroid Build Coastguard Worker #define VA_DISPLAY_ATTRIB_SETTABLE  0x0002
5198*54e60f84SAndroid Build Coastguard Worker 
5199*54e60f84SAndroid Build Coastguard Worker typedef struct _VADisplayAttribute {
5200*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribType type;
5201*54e60f84SAndroid Build Coastguard Worker     int32_t min_value;
5202*54e60f84SAndroid Build Coastguard Worker     int32_t max_value;
5203*54e60f84SAndroid Build Coastguard Worker     int32_t value;  /* used by the set/get attribute functions */
5204*54e60f84SAndroid Build Coastguard Worker     /* flags can be VA_DISPLAY_ATTRIB_GETTABLE or VA_DISPLAY_ATTRIB_SETTABLE or OR'd together */
5205*54e60f84SAndroid Build Coastguard Worker     uint32_t flags;
5206*54e60f84SAndroid Build Coastguard Worker 
5207*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
5208*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
5209*54e60f84SAndroid Build Coastguard Worker } VADisplayAttribute;
5210*54e60f84SAndroid Build Coastguard Worker 
5211*54e60f84SAndroid Build Coastguard Worker /** Get maximum number of display attributs supported by the implementation */
5212*54e60f84SAndroid Build Coastguard Worker int vaMaxNumDisplayAttributes(
5213*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy
5214*54e60f84SAndroid Build Coastguard Worker );
5215*54e60f84SAndroid Build Coastguard Worker 
5216*54e60f84SAndroid Build Coastguard Worker /**
5217*54e60f84SAndroid Build Coastguard Worker  * Query display attributes
5218*54e60f84SAndroid Build Coastguard Worker  * The caller must provide a "attr_list" array that can hold at
5219*54e60f84SAndroid Build Coastguard Worker  * least vaMaxNumDisplayAttributes() entries. The actual number of attributes
5220*54e60f84SAndroid Build Coastguard Worker  * returned in "attr_list" is returned in "num_attributes".
5221*54e60f84SAndroid Build Coastguard Worker  */
5222*54e60f84SAndroid Build Coastguard Worker VAStatus vaQueryDisplayAttributes(
5223*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
5224*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribute *attr_list,  /* out */
5225*54e60f84SAndroid Build Coastguard Worker     int *num_attributes         /* out */
5226*54e60f84SAndroid Build Coastguard Worker );
5227*54e60f84SAndroid Build Coastguard Worker 
5228*54e60f84SAndroid Build Coastguard Worker /**
5229*54e60f84SAndroid Build Coastguard Worker  * Get display attributes
5230*54e60f84SAndroid Build Coastguard Worker  * This function returns the current attribute values in "attr_list".
5231*54e60f84SAndroid Build Coastguard Worker  * Only attributes returned with VA_DISPLAY_ATTRIB_GETTABLE set in the "flags" field
5232*54e60f84SAndroid Build Coastguard Worker  * from vaQueryDisplayAttributes() can have their values retrieved.
5233*54e60f84SAndroid Build Coastguard Worker  */
5234*54e60f84SAndroid Build Coastguard Worker VAStatus vaGetDisplayAttributes(
5235*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
5236*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribute *attr_list,  /* in/out */
5237*54e60f84SAndroid Build Coastguard Worker     int num_attributes
5238*54e60f84SAndroid Build Coastguard Worker );
5239*54e60f84SAndroid Build Coastguard Worker 
5240*54e60f84SAndroid Build Coastguard Worker /**
5241*54e60f84SAndroid Build Coastguard Worker  * Set display attributes
5242*54e60f84SAndroid Build Coastguard Worker  * Only attributes returned with VA_DISPLAY_ATTRIB_SETTABLE set in the "flags" field
5243*54e60f84SAndroid Build Coastguard Worker  * from vaQueryDisplayAttributes() can be set.  If the attribute is not settable or
5244*54e60f84SAndroid Build Coastguard Worker  * the value is out of range, the function returns VA_STATUS_ERROR_ATTR_NOT_SUPPORTED
5245*54e60f84SAndroid Build Coastguard Worker  */
5246*54e60f84SAndroid Build Coastguard Worker VAStatus vaSetDisplayAttributes(
5247*54e60f84SAndroid Build Coastguard Worker     VADisplay dpy,
5248*54e60f84SAndroid Build Coastguard Worker     VADisplayAttribute *attr_list,
5249*54e60f84SAndroid Build Coastguard Worker     int num_attributes
5250*54e60f84SAndroid Build Coastguard Worker );
5251*54e60f84SAndroid Build Coastguard Worker 
5252*54e60f84SAndroid Build Coastguard Worker /****************************
5253*54e60f84SAndroid Build Coastguard Worker  * HEVC data structures
5254*54e60f84SAndroid Build Coastguard Worker  ****************************/
5255*54e60f84SAndroid Build Coastguard Worker /**
5256*54e60f84SAndroid Build Coastguard Worker  * \brief Description of picture properties of those in DPB surfaces.
5257*54e60f84SAndroid Build Coastguard Worker  *
5258*54e60f84SAndroid Build Coastguard Worker  * If only progressive scan is supported, each surface contains one whole
5259*54e60f84SAndroid Build Coastguard Worker  * frame picture.
5260*54e60f84SAndroid Build Coastguard Worker  * Otherwise, each surface contains two fields of whole picture.
5261*54e60f84SAndroid Build Coastguard Worker  * In this case, two entries of ReferenceFrames[] may share same picture_id
5262*54e60f84SAndroid Build Coastguard Worker  * value.
5263*54e60f84SAndroid Build Coastguard Worker  */
5264*54e60f84SAndroid Build Coastguard Worker typedef struct _VAPictureHEVC {
5265*54e60f84SAndroid Build Coastguard Worker     /** \brief reconstructed picture buffer surface index
5266*54e60f84SAndroid Build Coastguard Worker      * invalid when taking value VA_INVALID_SURFACE.
5267*54e60f84SAndroid Build Coastguard Worker      */
5268*54e60f84SAndroid Build Coastguard Worker     VASurfaceID             picture_id;
5269*54e60f84SAndroid Build Coastguard Worker     /** \brief picture order count.
5270*54e60f84SAndroid Build Coastguard Worker      * in HEVC, POCs for top and bottom fields of same picture should
5271*54e60f84SAndroid Build Coastguard Worker      * take different values.
5272*54e60f84SAndroid Build Coastguard Worker      */
5273*54e60f84SAndroid Build Coastguard Worker     int32_t                 pic_order_cnt;
5274*54e60f84SAndroid Build Coastguard Worker     /* described below */
5275*54e60f84SAndroid Build Coastguard Worker     uint32_t                flags;
5276*54e60f84SAndroid Build Coastguard Worker 
5277*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
5278*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
5279*54e60f84SAndroid Build Coastguard Worker } VAPictureHEVC;
5280*54e60f84SAndroid Build Coastguard Worker 
5281*54e60f84SAndroid Build Coastguard Worker /* flags in VAPictureHEVC could be OR of the following */
5282*54e60f84SAndroid Build Coastguard Worker #define VA_PICTURE_HEVC_INVALID                 0x00000001
5283*54e60f84SAndroid Build Coastguard Worker /** \brief indication of interlace scan picture.
5284*54e60f84SAndroid Build Coastguard Worker  * should take same value for all the pictures in sequence.
5285*54e60f84SAndroid Build Coastguard Worker  */
5286*54e60f84SAndroid Build Coastguard Worker #define VA_PICTURE_HEVC_FIELD_PIC               0x00000002
5287*54e60f84SAndroid Build Coastguard Worker /** \brief polarity of the field picture.
5288*54e60f84SAndroid Build Coastguard Worker  * top field takes even lines of buffer surface.
5289*54e60f84SAndroid Build Coastguard Worker  * bottom field takes odd lines of buffer surface.
5290*54e60f84SAndroid Build Coastguard Worker  */
5291*54e60f84SAndroid Build Coastguard Worker #define VA_PICTURE_HEVC_BOTTOM_FIELD            0x00000004
5292*54e60f84SAndroid Build Coastguard Worker /** \brief Long term reference picture */
5293*54e60f84SAndroid Build Coastguard Worker #define VA_PICTURE_HEVC_LONG_TERM_REFERENCE     0x00000008
5294*54e60f84SAndroid Build Coastguard Worker /**
5295*54e60f84SAndroid Build Coastguard Worker  * VA_PICTURE_HEVC_RPS_ST_CURR_BEFORE, VA_PICTURE_HEVC_RPS_ST_CURR_AFTER
5296*54e60f84SAndroid Build Coastguard Worker  * and VA_PICTURE_HEVC_RPS_LT_CURR of any picture in ReferenceFrames[] should
5297*54e60f84SAndroid Build Coastguard Worker  * be exclusive. No more than one of them can be set for any picture.
5298*54e60f84SAndroid Build Coastguard Worker  * Sum of NumPocStCurrBefore, NumPocStCurrAfter and NumPocLtCurr
5299*54e60f84SAndroid Build Coastguard Worker  * equals NumPocTotalCurr, which should be equal to or smaller than 8.
5300*54e60f84SAndroid Build Coastguard Worker  * Application should provide valid values for both short format and long format.
5301*54e60f84SAndroid Build Coastguard Worker  * The pictures in DPB with any of these three flags turned on are referred by
5302*54e60f84SAndroid Build Coastguard Worker  * the current picture.
5303*54e60f84SAndroid Build Coastguard Worker  */
5304*54e60f84SAndroid Build Coastguard Worker /** \brief RefPicSetStCurrBefore of HEVC spec variable
5305*54e60f84SAndroid Build Coastguard Worker  * Number of ReferenceFrames[] entries with this bit set equals
5306*54e60f84SAndroid Build Coastguard Worker  * NumPocStCurrBefore.
5307*54e60f84SAndroid Build Coastguard Worker  */
5308*54e60f84SAndroid Build Coastguard Worker #define VA_PICTURE_HEVC_RPS_ST_CURR_BEFORE      0x00000010
5309*54e60f84SAndroid Build Coastguard Worker /** \brief RefPicSetStCurrAfter of HEVC spec variable
5310*54e60f84SAndroid Build Coastguard Worker  * Number of ReferenceFrames[] entries with this bit set equals
5311*54e60f84SAndroid Build Coastguard Worker  * NumPocStCurrAfter.
5312*54e60f84SAndroid Build Coastguard Worker  */
5313*54e60f84SAndroid Build Coastguard Worker #define VA_PICTURE_HEVC_RPS_ST_CURR_AFTER       0x00000020
5314*54e60f84SAndroid Build Coastguard Worker /** \brief RefPicSetLtCurr of HEVC spec variable
5315*54e60f84SAndroid Build Coastguard Worker  * Number of ReferenceFrames[] entries with this bit set equals
5316*54e60f84SAndroid Build Coastguard Worker  * NumPocLtCurr.
5317*54e60f84SAndroid Build Coastguard Worker  */
5318*54e60f84SAndroid Build Coastguard Worker #define VA_PICTURE_HEVC_RPS_LT_CURR             0x00000040
5319*54e60f84SAndroid Build Coastguard Worker 
5320*54e60f84SAndroid Build Coastguard Worker /****************************
5321*54e60f84SAndroid Build Coastguard Worker  * VVC data structures
5322*54e60f84SAndroid Build Coastguard Worker  ****************************/
5323*54e60f84SAndroid Build Coastguard Worker /**
5324*54e60f84SAndroid Build Coastguard Worker  * \brief Description of picture properties of those in DPB surfaces.
5325*54e60f84SAndroid Build Coastguard Worker  *
5326*54e60f84SAndroid Build Coastguard Worker  * Only progressive scan is supported, each surface contains one whole
5327*54e60f84SAndroid Build Coastguard Worker  * frame picture.
5328*54e60f84SAndroid Build Coastguard Worker  */
5329*54e60f84SAndroid Build Coastguard Worker 
5330*54e60f84SAndroid Build Coastguard Worker typedef struct _VAPictureVVC {
5331*54e60f84SAndroid Build Coastguard Worker     /** \brief reconstructed picture buffer surface index
5332*54e60f84SAndroid Build Coastguard Worker      * invalid when taking value VA_INVALID_SURFACE.
5333*54e60f84SAndroid Build Coastguard Worker      */
5334*54e60f84SAndroid Build Coastguard Worker     VASurfaceID             picture_id;
5335*54e60f84SAndroid Build Coastguard Worker 
5336*54e60f84SAndroid Build Coastguard Worker     /** \brief picture order count. */
5337*54e60f84SAndroid Build Coastguard Worker     int32_t                 pic_order_cnt;
5338*54e60f84SAndroid Build Coastguard Worker 
5339*54e60f84SAndroid Build Coastguard Worker     /* described below */
5340*54e60f84SAndroid Build Coastguard Worker     uint32_t                flags;
5341*54e60f84SAndroid Build Coastguard Worker 
5342*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
5343*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
5344*54e60f84SAndroid Build Coastguard Worker } VAPictureVVC;
5345*54e60f84SAndroid Build Coastguard Worker 
5346*54e60f84SAndroid Build Coastguard Worker /* flags in VAPictureVVC could be OR of the following */
5347*54e60f84SAndroid Build Coastguard Worker #define VA_PICTURE_VVC_INVALID                  0x00000001
5348*54e60f84SAndroid Build Coastguard Worker /** \brief Long term reference picture */
5349*54e60f84SAndroid Build Coastguard Worker #define VA_PICTURE_VVC_LONG_TERM_REFERENCE      0x00000002
5350*54e60f84SAndroid Build Coastguard Worker /** \brief Unavailable reference picture
5351*54e60f84SAndroid Build Coastguard Worker  * This flag indicates the situation that the process of
5352*54e60f84SAndroid Build Coastguard Worker  * "generating unavailable reference pictures" (spec section 8.3.4)
5353*54e60f84SAndroid Build Coastguard Worker  * is required.
5354*54e60f84SAndroid Build Coastguard Worker  */
5355*54e60f84SAndroid Build Coastguard Worker #define VA_PICTURE_VVC_UNAVAILABLE_REFERENCE    0x00000004
5356*54e60f84SAndroid Build Coastguard Worker 
5357*54e60f84SAndroid Build Coastguard Worker typedef enum {
5358*54e60f84SAndroid Build Coastguard Worker     VACopyObjectSurface = 0,
5359*54e60f84SAndroid Build Coastguard Worker     VACopyObjectBuffer  = 1,
5360*54e60f84SAndroid Build Coastguard Worker } VACopyObjectType;
5361*54e60f84SAndroid Build Coastguard Worker 
5362*54e60f84SAndroid Build Coastguard Worker typedef struct _VACopyObject {
5363*54e60f84SAndroid Build Coastguard Worker     VACopyObjectType  obj_type;    // type of object.
5364*54e60f84SAndroid Build Coastguard Worker     union {
5365*54e60f84SAndroid Build Coastguard Worker         VASurfaceID surface_id;
5366*54e60f84SAndroid Build Coastguard Worker         VABufferID  buffer_id;
5367*54e60f84SAndroid Build Coastguard Worker     } object;
5368*54e60f84SAndroid Build Coastguard Worker 
5369*54e60f84SAndroid Build Coastguard Worker     uint32_t    va_reserved[VA_PADDING_MEDIUM];
5370*54e60f84SAndroid Build Coastguard Worker } VACopyObject;
5371*54e60f84SAndroid Build Coastguard Worker 
5372*54e60f84SAndroid Build Coastguard Worker typedef union _VACopyOption {
5373*54e60f84SAndroid Build Coastguard Worker     struct {
5374*54e60f84SAndroid Build Coastguard Worker         /** \brief va copy synchronization, the value should be /c VA_EXEC_SYNC or /c VA_EXEC_ASYNC */
5375*54e60f84SAndroid Build Coastguard Worker         uint32_t va_copy_sync : 2;
5376*54e60f84SAndroid Build Coastguard Worker         /** \brief va copy mode, the value should be VA_EXEC_MODE_XXX */
5377*54e60f84SAndroid Build Coastguard Worker         uint32_t va_copy_mode : 4;
5378*54e60f84SAndroid Build Coastguard Worker         uint32_t reserved     : 26;
5379*54e60f84SAndroid Build Coastguard Worker     } bits;
5380*54e60f84SAndroid Build Coastguard Worker     uint32_t value;
5381*54e60f84SAndroid Build Coastguard Worker } VACopyOption;
5382*54e60f84SAndroid Build Coastguard Worker 
5383*54e60f84SAndroid Build Coastguard Worker /** \brief Copies an object.
5384*54e60f84SAndroid Build Coastguard Worker  *
5385*54e60f84SAndroid Build Coastguard Worker  * Copies specified object (surface or buffer). If non-blocking copy
5386*54e60f84SAndroid Build Coastguard Worker  * is requested (VA_COPY_NONBLOCK), then need vaSyncBuffer or vaSyncSurface/vaSyncSurface2
5387*54e60f84SAndroid Build Coastguard Worker  * to sync the destination object.
5388*54e60f84SAndroid Build Coastguard Worker  *
5389*54e60f84SAndroid Build Coastguard Worker  * @param[in] dpy               the VA display
5390*54e60f84SAndroid Build Coastguard Worker  * @param[in] dst               Destination object to copy to
5391*54e60f84SAndroid Build Coastguard Worker  * @param[in] src               Source object to copy from
5392*54e60f84SAndroid Build Coastguard Worker  * @param[in] option            VA copy option
5393*54e60f84SAndroid Build Coastguard Worker  * @return VA_STATUS_SUCCESS if successful
5394*54e60f84SAndroid Build Coastguard Worker  */
5395*54e60f84SAndroid Build Coastguard Worker VAStatus vaCopy(VADisplay dpy, VACopyObject * dst, VACopyObject * src, VACopyOption option);
5396*54e60f84SAndroid Build Coastguard Worker 
5397*54e60f84SAndroid Build Coastguard Worker #include <va/va_dec_hevc.h>
5398*54e60f84SAndroid Build Coastguard Worker #include <va/va_dec_jpeg.h>
5399*54e60f84SAndroid Build Coastguard Worker #include <va/va_dec_vp8.h>
5400*54e60f84SAndroid Build Coastguard Worker #include <va/va_dec_vp9.h>
5401*54e60f84SAndroid Build Coastguard Worker #include <va/va_dec_av1.h>
5402*54e60f84SAndroid Build Coastguard Worker #include <va/va_dec_vvc.h>
5403*54e60f84SAndroid Build Coastguard Worker #include <va/va_enc_hevc.h>
5404*54e60f84SAndroid Build Coastguard Worker #include <va/va_fei_hevc.h>
5405*54e60f84SAndroid Build Coastguard Worker #include <va/va_enc_h264.h>
5406*54e60f84SAndroid Build Coastguard Worker #include <va/va_enc_jpeg.h>
5407*54e60f84SAndroid Build Coastguard Worker #include <va/va_enc_mpeg2.h>
5408*54e60f84SAndroid Build Coastguard Worker #include <va/va_enc_vp8.h>
5409*54e60f84SAndroid Build Coastguard Worker #include <va/va_enc_vp9.h>
5410*54e60f84SAndroid Build Coastguard Worker #include <va/va_enc_av1.h>
5411*54e60f84SAndroid Build Coastguard Worker #include <va/va_fei.h>
5412*54e60f84SAndroid Build Coastguard Worker #include <va/va_fei_h264.h>
5413*54e60f84SAndroid Build Coastguard Worker #include <va/va_vpp.h>
5414*54e60f84SAndroid Build Coastguard Worker #include <va/va_prot.h>
5415*54e60f84SAndroid Build Coastguard Worker 
5416*54e60f84SAndroid Build Coastguard Worker /**@}*/
5417*54e60f84SAndroid Build Coastguard Worker 
5418*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus
5419*54e60f84SAndroid Build Coastguard Worker }
5420*54e60f84SAndroid Build Coastguard Worker #endif
5421*54e60f84SAndroid Build Coastguard Worker 
5422*54e60f84SAndroid Build Coastguard Worker #endif /* _VA_H_ */
5423