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, ®_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