va.h revision 35f195a578d0bec4a0aa84d6162eda7e3a4a4db9
186c93d9c46415cf7746351c502a3513f637e77e4root/* 286c93d9c46415cf7746351c502a3513f637e77e4root * Copyright (c) 2007-2009 Intel Corporation. All Rights Reserved. 386c93d9c46415cf7746351c502a3513f637e77e4root * 486c93d9c46415cf7746351c502a3513f637e77e4root * Permission is hereby granted, free of charge, to any person obtaining a 586c93d9c46415cf7746351c502a3513f637e77e4root * copy of this software and associated documentation files (the 686c93d9c46415cf7746351c502a3513f637e77e4root * "Software"), to deal in the Software without restriction, including 786c93d9c46415cf7746351c502a3513f637e77e4root * without limitation the rights to use, copy, modify, merge, publish, 886c93d9c46415cf7746351c502a3513f637e77e4root * distribute, sub license, and/or sell copies of the Software, and to 986c93d9c46415cf7746351c502a3513f637e77e4root * permit persons to whom the Software is furnished to do so, subject to 1086c93d9c46415cf7746351c502a3513f637e77e4root * the following conditions: 1186c93d9c46415cf7746351c502a3513f637e77e4root * 1286c93d9c46415cf7746351c502a3513f637e77e4root * The above copyright notice and this permission notice (including the 1386c93d9c46415cf7746351c502a3513f637e77e4root * next paragraph) shall be included in all copies or substantial portions 1486c93d9c46415cf7746351c502a3513f637e77e4root * of the Software. 1586c93d9c46415cf7746351c502a3513f637e77e4root * 1686c93d9c46415cf7746351c502a3513f637e77e4root * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 1786c93d9c46415cf7746351c502a3513f637e77e4root * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 1886c93d9c46415cf7746351c502a3513f637e77e4root * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 1986c93d9c46415cf7746351c502a3513f637e77e4root * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR 2086c93d9c46415cf7746351c502a3513f637e77e4root * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 2186c93d9c46415cf7746351c502a3513f637e77e4root * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 2286c93d9c46415cf7746351c502a3513f637e77e4root * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 2386c93d9c46415cf7746351c502a3513f637e77e4root */ 2486c93d9c46415cf7746351c502a3513f637e77e4root/* 2586c93d9c46415cf7746351c502a3513f637e77e4root * Video Acceleration (VA) API Specification 2686c93d9c46415cf7746351c502a3513f637e77e4root * 27409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan * Rev. 0.30 2886c93d9c46415cf7746351c502a3513f637e77e4root * <jonathan.bian@intel.com> 2986c93d9c46415cf7746351c502a3513f637e77e4root * 3086c93d9c46415cf7746351c502a3513f637e77e4root * Revision History: 3186c93d9c46415cf7746351c502a3513f637e77e4root * rev 0.10 (12/10/2006 Jonathan Bian) - Initial draft 3286c93d9c46415cf7746351c502a3513f637e77e4root * rev 0.11 (12/15/2006 Jonathan Bian) - Fixed some errors 3386c93d9c46415cf7746351c502a3513f637e77e4root * rev 0.12 (02/05/2007 Jonathan Bian) - Added VC-1 data structures for slice level decode 3486c93d9c46415cf7746351c502a3513f637e77e4root * rev 0.13 (02/28/2007 Jonathan Bian) - Added GetDisplay() 3586c93d9c46415cf7746351c502a3513f637e77e4root * rev 0.14 (04/13/2007 Jonathan Bian) - Fixed MPEG-2 PictureParameter structure, cleaned up a few funcs. 3686c93d9c46415cf7746351c502a3513f637e77e4root * rev 0.15 (04/20/2007 Jonathan Bian) - Overhauled buffer management 3786c93d9c46415cf7746351c502a3513f637e77e4root * rev 0.16 (05/02/2007 Jonathan Bian) - Added error codes and fixed some issues with configuration 3886c93d9c46415cf7746351c502a3513f637e77e4root * rev 0.17 (05/07/2007 Jonathan Bian) - Added H.264/AVC data structures for slice level decode. 3986c93d9c46415cf7746351c502a3513f637e77e4root * rev 0.18 (05/14/2007 Jonathan Bian) - Added data structures for MPEG-4 slice level decode 4086c93d9c46415cf7746351c502a3513f637e77e4root * and MPEG-2 motion compensation. 4186c93d9c46415cf7746351c502a3513f637e77e4root * rev 0.19 (08/06/2007 Jonathan Bian) - Removed extra type for bitplane data. 4286c93d9c46415cf7746351c502a3513f637e77e4root * rev 0.20 (08/08/2007 Jonathan Bian) - Added missing fields to VC-1 PictureParameter structure. 4386c93d9c46415cf7746351c502a3513f637e77e4root * rev 0.21 (08/20/2007 Jonathan Bian) - Added image and subpicture support. 4486c93d9c46415cf7746351c502a3513f637e77e4root * rev 0.22 (08/27/2007 Jonathan Bian) - Added support for chroma-keying and global alpha. 4586c93d9c46415cf7746351c502a3513f637e77e4root * rev 0.23 (09/11/2007 Jonathan Bian) - Fixed some issues with images and subpictures. 4686c93d9c46415cf7746351c502a3513f637e77e4root * rev 0.24 (09/18/2007 Jonathan Bian) - Added display attributes. 4786c93d9c46415cf7746351c502a3513f637e77e4root * rev 0.25 (10/18/2007 Jonathan Bian) - Changed to use IDs only for some types. 4886c93d9c46415cf7746351c502a3513f637e77e4root * rev 0.26 (11/07/2007 Waldo Bastian) - Change vaCreateBuffer semantics 4986c93d9c46415cf7746351c502a3513f637e77e4root * rev 0.27 (11/19/2007 Matt Sottek) - Added DeriveImage 5086c93d9c46415cf7746351c502a3513f637e77e4root * rev 0.28 (12/06/2007 Jonathan Bian) - Added new versions of PutImage and AssociateSubpicture 5186c93d9c46415cf7746351c502a3513f637e77e4root * to enable scaling 5286c93d9c46415cf7746351c502a3513f637e77e4root * rev 0.29 (02/07/2008 Jonathan Bian) - VC1 parameter fixes, 5386c93d9c46415cf7746351c502a3513f637e77e4root * added VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED 5486c93d9c46415cf7746351c502a3513f637e77e4root * rev 0.30 (03/01/2009 Jonathan Bian) - Added encoding support for H.264 BP and MPEG-4 SP and fixes 5586c93d9c46415cf7746351c502a3513f637e77e4root * for ISO C conformance. 5686c93d9c46415cf7746351c502a3513f637e77e4root * rev 0.31 (09/02/2009 Gwenole Beauchesne) - VC-1/H264 fields change for VDPAU and XvBA backend 5786c93d9c46415cf7746351c502a3513f637e77e4root * Application needs to relink with the new library. 5886c93d9c46415cf7746351c502a3513f637e77e4root * 59cceaa0568f77a7452857559614100b71fb36ee3awangkun * rev 0.31.1 (03/29/2009) - Data structure for JPEG encode 60cceaa0568f77a7452857559614100b71fb36ee3awangkun * rev 0.31.2 (01/13/2011 Anthony Pabon)- Added a flag to indicate Subpicture coordinates are screen 61cceaa0568f77a7452857559614100b71fb36ee3awangkun * screen relative rather than source video relative. 62cceaa0568f77a7452857559614100b71fb36ee3awangkun * rev 0.32.0 (01/13/2011 Xiang Haihao) - Add profile into VAPictureParameterBufferVC1 63cceaa0568f77a7452857559614100b71fb36ee3awangkun * update VAAPI to 0.32.0 64cceaa0568f77a7452857559614100b71fb36ee3awangkun * 6586c93d9c46415cf7746351c502a3513f637e77e4root * Acknowledgements: 6686c93d9c46415cf7746351c502a3513f637e77e4root * Some concepts borrowed from XvMC and XvImage. 6786c93d9c46415cf7746351c502a3513f637e77e4root * Waldo Bastian (Intel), Matt Sottek (Intel), Austin Yuan (Intel), and Gwenole Beauchesne (SDS) 6886c93d9c46415cf7746351c502a3513f637e77e4root * contributed to various aspects of the API. 6986c93d9c46415cf7746351c502a3513f637e77e4root */ 7086c93d9c46415cf7746351c502a3513f637e77e4root 714b672db6ee89c9846451bbab23cf18e93c4260b2hding/** 724b672db6ee89c9846451bbab23cf18e93c4260b2hding * \file va.h 734b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief The Core API 744b672db6ee89c9846451bbab23cf18e93c4260b2hding * 754b672db6ee89c9846451bbab23cf18e93c4260b2hding * This file contains the \ref api_core "Core API". 764b672db6ee89c9846451bbab23cf18e93c4260b2hding */ 774b672db6ee89c9846451bbab23cf18e93c4260b2hding 7886c93d9c46415cf7746351c502a3513f637e77e4root#ifndef _VA_H_ 7986c93d9c46415cf7746351c502a3513f637e77e4root#define _VA_H_ 8086c93d9c46415cf7746351c502a3513f637e77e4root 8186c93d9c46415cf7746351c502a3513f637e77e4root#include <va/va_version.h> 8286c93d9c46415cf7746351c502a3513f637e77e4root 8386c93d9c46415cf7746351c502a3513f637e77e4root#ifdef __cplusplus 8486c93d9c46415cf7746351c502a3513f637e77e4rootextern "C" { 8586c93d9c46415cf7746351c502a3513f637e77e4root#endif 8686c93d9c46415cf7746351c502a3513f637e77e4root 874b672db6ee89c9846451bbab23cf18e93c4260b2hding/** 884b672db6ee89c9846451bbab23cf18e93c4260b2hding * \mainpage Video Acceleration (VA) API 894b672db6ee89c9846451bbab23cf18e93c4260b2hding * 904b672db6ee89c9846451bbab23cf18e93c4260b2hding * \section intro Introduction 914b672db6ee89c9846451bbab23cf18e93c4260b2hding * 924b672db6ee89c9846451bbab23cf18e93c4260b2hding * The main motivation for VA-API (Video Acceleration API) is to 934b672db6ee89c9846451bbab23cf18e93c4260b2hding * enable hardware accelerated video decode and encode at various 944b672db6ee89c9846451bbab23cf18e93c4260b2hding * entry-points (VLD, IDCT, Motion Compensation etc.) for the 954b672db6ee89c9846451bbab23cf18e93c4260b2hding * prevailing coding standards today (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 964b672db6ee89c9846451bbab23cf18e93c4260b2hding * AVC/H.264, VC-1/VMW3, and JPEG). 974b672db6ee89c9846451bbab23cf18e93c4260b2hding * 984b672db6ee89c9846451bbab23cf18e93c4260b2hding * VA-API is split into several modules: 994b672db6ee89c9846451bbab23cf18e93c4260b2hding * - \ref api_core 1004b672db6ee89c9846451bbab23cf18e93c4260b2hding * - \ref api_enc_core 1014b672db6ee89c9846451bbab23cf18e93c4260b2hding * - \ref api_enc_h264 1024b672db6ee89c9846451bbab23cf18e93c4260b2hding * - \ref api_vpp 1034b672db6ee89c9846451bbab23cf18e93c4260b2hding */ 1044b672db6ee89c9846451bbab23cf18e93c4260b2hding 1054b672db6ee89c9846451bbab23cf18e93c4260b2hding/** 1064b672db6ee89c9846451bbab23cf18e93c4260b2hding * \defgroup api_core Core API 1074b672db6ee89c9846451bbab23cf18e93c4260b2hding * 1084b672db6ee89c9846451bbab23cf18e93c4260b2hding * @{ 1094b672db6ee89c9846451bbab23cf18e93c4260b2hding */ 1104b672db6ee89c9846451bbab23cf18e93c4260b2hding 11186c93d9c46415cf7746351c502a3513f637e77e4root/* 11286c93d9c46415cf7746351c502a3513f637e77e4rootOverview 11386c93d9c46415cf7746351c502a3513f637e77e4root 11486c93d9c46415cf7746351c502a3513f637e77e4rootThe VA API is intended to provide an interface between a video decode/encode/display 11586c93d9c46415cf7746351c502a3513f637e77e4rootapplication (client) and a hardware accelerator (server), to off-load 11686c93d9c46415cf7746351c502a3513f637e77e4rootvideo decode/encode/display operations from the host to the hardware accelerator at various 11786c93d9c46415cf7746351c502a3513f637e77e4rootentry-points. 11886c93d9c46415cf7746351c502a3513f637e77e4root 11986c93d9c46415cf7746351c502a3513f637e77e4rootThe basic operation steps are: 12086c93d9c46415cf7746351c502a3513f637e77e4root 12186c93d9c46415cf7746351c502a3513f637e77e4root- Negotiate a mutually acceptable configuration with the server to lock 12286c93d9c46415cf7746351c502a3513f637e77e4root down profile, entrypoints, and other attributes that will not change on 12386c93d9c46415cf7746351c502a3513f637e77e4root a frame-by-frame basis. 12486c93d9c46415cf7746351c502a3513f637e77e4root- Create a decode context which represents a "virtualized" hardware decode 12586c93d9c46415cf7746351c502a3513f637e77e4root device 12686c93d9c46415cf7746351c502a3513f637e77e4root- Get and fill decode buffers with picture level, slice level and macroblock 12786c93d9c46415cf7746351c502a3513f637e77e4root level data (depending on entrypoints) 12886c93d9c46415cf7746351c502a3513f637e77e4root- Pass the decode buffers to the server to decode the current frame 12986c93d9c46415cf7746351c502a3513f637e77e4root 13086c93d9c46415cf7746351c502a3513f637e77e4rootInitialization & Configuration Management 13186c93d9c46415cf7746351c502a3513f637e77e4root 13286c93d9c46415cf7746351c502a3513f637e77e4root- Find out supported profiles 13386c93d9c46415cf7746351c502a3513f637e77e4root- Find out entrypoints for a given profile 13486c93d9c46415cf7746351c502a3513f637e77e4root- Find out configuration attributes for a given profile/entrypoint pair 13586c93d9c46415cf7746351c502a3513f637e77e4root- Create a configuration for use by the decoder 13686c93d9c46415cf7746351c502a3513f637e77e4root 13786c93d9c46415cf7746351c502a3513f637e77e4root*/ 13886c93d9c46415cf7746351c502a3513f637e77e4root 13986c93d9c46415cf7746351c502a3513f637e77e4roottypedef void* VADisplay; /* window system dependent */ 14086c93d9c46415cf7746351c502a3513f637e77e4root 14186c93d9c46415cf7746351c502a3513f637e77e4roottypedef int VAStatus; /* Return status type from functions */ 14286c93d9c46415cf7746351c502a3513f637e77e4root/* Values for the return status */ 14386c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_SUCCESS 0x00000000 14486c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_OPERATION_FAILED 0x00000001 14586c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_ALLOCATION_FAILED 0x00000002 14686c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_INVALID_DISPLAY 0x00000003 14786c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_INVALID_CONFIG 0x00000004 14886c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_INVALID_CONTEXT 0x00000005 14986c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_INVALID_SURFACE 0x00000006 15086c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_INVALID_BUFFER 0x00000007 15186c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_INVALID_IMAGE 0x00000008 15286c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_INVALID_SUBPICTURE 0x00000009 15386c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_ATTR_NOT_SUPPORTED 0x0000000a 15486c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_MAX_NUM_EXCEEDED 0x0000000b 15586c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_UNSUPPORTED_PROFILE 0x0000000c 15686c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT 0x0000000d 15786c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT 0x0000000e 15886c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE 0x0000000f 15986c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_SURFACE_BUSY 0x00000010 16086c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_FLAG_NOT_SUPPORTED 0x00000011 16186c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_INVALID_PARAMETER 0x00000012 16286c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED 0x00000013 16386c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_UNIMPLEMENTED 0x00000014 16486c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_SURFACE_IN_DISPLAYING 0x00000015 165b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define VA_STATUS_ERROR_INVALID_IMAGE_FORMAT 0x00000016 1668712753e35351f9678345062e4144b0d1062de99Fei Jiang#define VA_STATUS_ERROR_DECODING_ERROR 0x00000017 1678712753e35351f9678345062e4144b0d1062de99Fei Jiang#define VA_STATUS_ERROR_ENCODING_ERROR 0x00000018 1684b672db6ee89c9846451bbab23cf18e93c4260b2hding/** 1694b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief An invalid/unsupported value was supplied. 1704b672db6ee89c9846451bbab23cf18e93c4260b2hding * 1714b672db6ee89c9846451bbab23cf18e93c4260b2hding * This is a catch-all error code for invalid or unsupported values. 1724b672db6ee89c9846451bbab23cf18e93c4260b2hding * e.g. value exceeding the valid range, invalid type in the context 1734b672db6ee89c9846451bbab23cf18e93c4260b2hding * of generic attribute values. 1744b672db6ee89c9846451bbab23cf18e93c4260b2hding */ 1754b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_STATUS_ERROR_INVALID_VALUE 0x00000019 1764b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief An unsupported filter was supplied. */ 1774b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_STATUS_ERROR_UNSUPPORTED_FILTER 0x00000020 1784b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief An invalid filter chain was supplied. */ 1794b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_STATUS_ERROR_INVALID_FILTER_CHAIN 0x00000021 1804b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Indicate HW busy (e.g. run multiple encoding simultaneously). */ 181409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_STATUS_ERROR_HW_BUSY 0x00000022 182409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan/** \brief An invalid blend state was supplied. */ 183409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_STATUS_ERROR_INVALID_BLEND_STATE 0x00000023 184409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_STATUS_ERROR_UNKNOWN 0xFFFFFFFF 18586c93d9c46415cf7746351c502a3513f637e77e4root 186b0fac498ca4863166252f1268fda83394db54153Fei Jiang/* De-interlacing flags for vaPutSurface() */ 187b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define VA_FRAME_PICTURE 0x00000000 188b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define VA_TOP_FIELD 0x00000001 189b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define VA_BOTTOM_FIELD 0x00000002 190b0fac498ca4863166252f1268fda83394db54153Fei Jiang 19121e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan/* 19221e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan * Enabled the positioning/cropping/blending feature: 19321e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan * 1, specify the video playback position in the isurface 19421e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan * 2, specify the cropping info for video playback 19521e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan * 3, encoded video will blend with background color 19621e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan */ 1979db743362981d6b35869fb038e1528e48366cc96Austin Yuan#define VA_ENABLE_BLEND 0x00000004 /* video area blend with the constant color */ 198901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang 199b0fac498ca4863166252f1268fda83394db54153Fei Jiang/* 200b0fac498ca4863166252f1268fda83394db54153Fei Jiang * Clears the drawable with background color. 201b0fac498ca4863166252f1268fda83394db54153Fei Jiang * for hardware overlay based implementation this flag 202b0fac498ca4863166252f1268fda83394db54153Fei Jiang * can be used to turn off the overlay 203b0fac498ca4863166252f1268fda83394db54153Fei Jiang */ 20421e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan#define VA_CLEAR_DRAWABLE 0x00000008 205b0fac498ca4863166252f1268fda83394db54153Fei Jiang 206b0fac498ca4863166252f1268fda83394db54153Fei Jiang/* Color space conversion flags for vaPutSurface() */ 207b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define VA_SRC_BT601 0x00000010 208b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define VA_SRC_BT709 0x00000020 209901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang#define VA_SRC_SMPTE_240 0x00000040 210901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang 211901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang/* Scaling flags for vaPutSurface() */ 212901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang#define VA_FILTER_SCALING_DEFAULT 0x00000000 213901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang#define VA_FILTER_SCALING_FAST 0x00000100 214901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang#define VA_FILTER_SCALING_HQ 0x00000200 215901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang#define VA_FILTER_SCALING_NL_ANAMORPHIC 0x00000300 216901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang#define VA_FILTER_SCALING_MASK 0x00000f00 217b0fac498ca4863166252f1268fda83394db54153Fei Jiang 21886c93d9c46415cf7746351c502a3513f637e77e4root/* 21986c93d9c46415cf7746351c502a3513f637e77e4root * Returns a short english description of error_status 22086c93d9c46415cf7746351c502a3513f637e77e4root */ 22186c93d9c46415cf7746351c502a3513f637e77e4rootconst char *vaErrorStr(VAStatus error_status); 22286c93d9c46415cf7746351c502a3513f637e77e4root 22386c93d9c46415cf7746351c502a3513f637e77e4root/* 22486c93d9c46415cf7746351c502a3513f637e77e4root * Initialization: 22586c93d9c46415cf7746351c502a3513f637e77e4root * A display must be obtained by calling vaGetDisplay() before calling 22686c93d9c46415cf7746351c502a3513f637e77e4root * vaInitialize() and other functions. This connects the API to the 22786c93d9c46415cf7746351c502a3513f637e77e4root * native window system. 22886c93d9c46415cf7746351c502a3513f637e77e4root * For X Windows, native_dpy would be from XOpenDisplay() 22986c93d9c46415cf7746351c502a3513f637e77e4root */ 230409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuantypedef void* VANativeDisplay; /* window system dependent */ 23186c93d9c46415cf7746351c502a3513f637e77e4root 232b0fac498ca4863166252f1268fda83394db54153Fei Jiangint vaDisplayIsValid(VADisplay dpy); 233b0fac498ca4863166252f1268fda83394db54153Fei Jiang 23486c93d9c46415cf7746351c502a3513f637e77e4root/* 23586c93d9c46415cf7746351c502a3513f637e77e4root * Initialize the library 23686c93d9c46415cf7746351c502a3513f637e77e4root */ 23786c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaInitialize ( 23886c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 23986c93d9c46415cf7746351c502a3513f637e77e4root int *major_version, /* out */ 24086c93d9c46415cf7746351c502a3513f637e77e4root int *minor_version /* out */ 24186c93d9c46415cf7746351c502a3513f637e77e4root); 24286c93d9c46415cf7746351c502a3513f637e77e4root 24386c93d9c46415cf7746351c502a3513f637e77e4root/* 24486c93d9c46415cf7746351c502a3513f637e77e4root * After this call, all library internal resources will be cleaned up 24586c93d9c46415cf7746351c502a3513f637e77e4root */ 24686c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaTerminate ( 24786c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy 24886c93d9c46415cf7746351c502a3513f637e77e4root); 24986c93d9c46415cf7746351c502a3513f637e77e4root 25086c93d9c46415cf7746351c502a3513f637e77e4root/* 25186c93d9c46415cf7746351c502a3513f637e77e4root * vaQueryVendorString returns a pointer to a zero-terminated string 25286c93d9c46415cf7746351c502a3513f637e77e4root * describing some aspects of the VA implemenation on a specific 25386c93d9c46415cf7746351c502a3513f637e77e4root * hardware accelerator. The format of the returned string is vendor 25486c93d9c46415cf7746351c502a3513f637e77e4root * specific and at the discretion of the implementer. 25586c93d9c46415cf7746351c502a3513f637e77e4root * e.g. for the Intel GMA500 implementation, an example would be: 25686c93d9c46415cf7746351c502a3513f637e77e4root * "Intel GMA500 - 2.0.0.32L.0005" 25786c93d9c46415cf7746351c502a3513f637e77e4root */ 25886c93d9c46415cf7746351c502a3513f637e77e4rootconst char *vaQueryVendorString ( 25986c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy 26086c93d9c46415cf7746351c502a3513f637e77e4root); 26186c93d9c46415cf7746351c502a3513f637e77e4root 26286c93d9c46415cf7746351c502a3513f637e77e4roottypedef int (*VAPrivFunc)(); 26386c93d9c46415cf7746351c502a3513f637e77e4root 26486c93d9c46415cf7746351c502a3513f637e77e4root/* 26586c93d9c46415cf7746351c502a3513f637e77e4root * Return a function pointer given a function name in the library. 26686c93d9c46415cf7746351c502a3513f637e77e4root * This allows private interfaces into the library 26786c93d9c46415cf7746351c502a3513f637e77e4root */ 26886c93d9c46415cf7746351c502a3513f637e77e4rootVAPrivFunc vaGetLibFunc ( 26986c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 27086c93d9c46415cf7746351c502a3513f637e77e4root const char *func 27186c93d9c46415cf7746351c502a3513f637e77e4root); 27286c93d9c46415cf7746351c502a3513f637e77e4root 27386c93d9c46415cf7746351c502a3513f637e77e4root/* Currently defined profiles */ 27486c93d9c46415cf7746351c502a3513f637e77e4roottypedef enum 27586c93d9c46415cf7746351c502a3513f637e77e4root{ 276409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan /** \brief Profile ID used for video processing. */ 277409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan VAProfileNone = -1, 27886c93d9c46415cf7746351c502a3513f637e77e4root VAProfileMPEG2Simple = 0, 27986c93d9c46415cf7746351c502a3513f637e77e4root VAProfileMPEG2Main = 1, 28086c93d9c46415cf7746351c502a3513f637e77e4root VAProfileMPEG4Simple = 2, 28186c93d9c46415cf7746351c502a3513f637e77e4root VAProfileMPEG4AdvancedSimple = 3, 28286c93d9c46415cf7746351c502a3513f637e77e4root VAProfileMPEG4Main = 4, 28386c93d9c46415cf7746351c502a3513f637e77e4root VAProfileH264Baseline = 5, 28486c93d9c46415cf7746351c502a3513f637e77e4root VAProfileH264Main = 6, 28586c93d9c46415cf7746351c502a3513f637e77e4root VAProfileH264High = 7, 28686c93d9c46415cf7746351c502a3513f637e77e4root VAProfileVC1Simple = 8, 28786c93d9c46415cf7746351c502a3513f637e77e4root VAProfileVC1Main = 9, 28886c93d9c46415cf7746351c502a3513f637e77e4root VAProfileVC1Advanced = 10, 289b0fac498ca4863166252f1268fda83394db54153Fei Jiang VAProfileH263Baseline = 11, 290409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan VAProfileJPEGBaseline = 12, 291409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan VAProfileH264ConstrainedBaseline = 13, 292409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan VAProfileH264MultiviewHigh = 14, 293409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan VAProfileH264StereoHigh = 15, 294409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan VAProfileVP8Version0_3 = 16, 2954b672db6ee89c9846451bbab23cf18e93c4260b2hding VAProfileMax 29686c93d9c46415cf7746351c502a3513f637e77e4root} VAProfile; 29786c93d9c46415cf7746351c502a3513f637e77e4root 29886c93d9c46415cf7746351c502a3513f637e77e4root/* 29986c93d9c46415cf7746351c502a3513f637e77e4root * Currently defined entrypoints 30086c93d9c46415cf7746351c502a3513f637e77e4root */ 30186c93d9c46415cf7746351c502a3513f637e77e4roottypedef enum 30286c93d9c46415cf7746351c502a3513f637e77e4root{ 30386c93d9c46415cf7746351c502a3513f637e77e4root VAEntrypointVLD = 1, 30486c93d9c46415cf7746351c502a3513f637e77e4root VAEntrypointIZZ = 2, 30586c93d9c46415cf7746351c502a3513f637e77e4root VAEntrypointIDCT = 3, 30686c93d9c46415cf7746351c502a3513f637e77e4root VAEntrypointMoComp = 4, 30786c93d9c46415cf7746351c502a3513f637e77e4root VAEntrypointDeblocking = 5, 308b0fac498ca4863166252f1268fda83394db54153Fei Jiang VAEntrypointEncSlice = 6, /* slice level encode */ 3094b672db6ee89c9846451bbab23cf18e93c4260b2hding VAEntrypointEncPicture = 7, /* pictuer encode, JPEG, etc */ 3104b672db6ee89c9846451bbab23cf18e93c4260b2hding VAEntrypointVideoProc = 10, /**< Video pre/post-processing. */ 3114b672db6ee89c9846451bbab23cf18e93c4260b2hding VAEntrypointMax 31286c93d9c46415cf7746351c502a3513f637e77e4root} VAEntrypoint; 31386c93d9c46415cf7746351c502a3513f637e77e4root 31486c93d9c46415cf7746351c502a3513f637e77e4root/* Currently defined configuration attribute types */ 31586c93d9c46415cf7746351c502a3513f637e77e4roottypedef enum 31686c93d9c46415cf7746351c502a3513f637e77e4root{ 31786c93d9c46415cf7746351c502a3513f637e77e4root VAConfigAttribRTFormat = 0, 31886c93d9c46415cf7746351c502a3513f637e77e4root VAConfigAttribSpatialResidual = 1, 31986c93d9c46415cf7746351c502a3513f637e77e4root VAConfigAttribSpatialClipping = 2, 32086c93d9c46415cf7746351c502a3513f637e77e4root VAConfigAttribIntraResidual = 3, 32186c93d9c46415cf7746351c502a3513f637e77e4root VAConfigAttribEncryption = 4, 3224b672db6ee89c9846451bbab23cf18e93c4260b2hding VAConfigAttribRateControl = 5, 3234b672db6ee89c9846451bbab23cf18e93c4260b2hding 324097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan /** @name Attributes for decoding */ 325097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan /**@{*/ 326097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan /** 327097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan * \brief Slice Decoding mode. Read/write. 328097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan * 329097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan * This attribute determines what mode the driver supports for slice 330097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan * decoding, through vaGetConfigAttributes(); and what mode the user 331097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan * will be providing to the driver, through vaCreateConfig(), if the 332097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan * driver supports those. If this attribute is not set by the user then 333097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan * it is assumed that VA_DEC_SLICE_MODE_NORMAL mode is used. 334097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan * 335097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan * See \c VA_DEC_SLICE_MODE_xxx for the list of slice decoding modes. 336097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan */ 337097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan VAConfigAttribDecSliceMode = 6, 338097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan 3394b672db6ee89c9846451bbab23cf18e93c4260b2hding /** @name Attributes for encoding */ 3404b672db6ee89c9846451bbab23cf18e93c4260b2hding /**@{*/ 3414b672db6ee89c9846451bbab23cf18e93c4260b2hding /** 3424b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief Packed headers mode. Read/write. 3434b672db6ee89c9846451bbab23cf18e93c4260b2hding * 3444b672db6ee89c9846451bbab23cf18e93c4260b2hding * This attribute determines what packed headers the driver supports, 3454b672db6ee89c9846451bbab23cf18e93c4260b2hding * through vaGetConfigAttributes(); and what packed headers the user 3464b672db6ee89c9846451bbab23cf18e93c4260b2hding * will be providing to the driver, through vaCreateConfig(), if the 3474b672db6ee89c9846451bbab23cf18e93c4260b2hding * driver supports those. 3484b672db6ee89c9846451bbab23cf18e93c4260b2hding * 3494b672db6ee89c9846451bbab23cf18e93c4260b2hding * See \c VA_ENC_PACKED_HEADER_xxx for the list of packed headers. 3504b672db6ee89c9846451bbab23cf18e93c4260b2hding */ 3514b672db6ee89c9846451bbab23cf18e93c4260b2hding VAConfigAttribEncPackedHeaders = 10, 3524b672db6ee89c9846451bbab23cf18e93c4260b2hding /** 3534b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief Interlaced mode. Read/write. 3544b672db6ee89c9846451bbab23cf18e93c4260b2hding * 3554b672db6ee89c9846451bbab23cf18e93c4260b2hding * This attribute determines what kind of interlaced encoding mode 3564b672db6ee89c9846451bbab23cf18e93c4260b2hding * the driver supports. 3574b672db6ee89c9846451bbab23cf18e93c4260b2hding * 3584b672db6ee89c9846451bbab23cf18e93c4260b2hding * See \c VA_ENC_INTERLACED_xxx for the list of interlaced modes. 3594b672db6ee89c9846451bbab23cf18e93c4260b2hding */ 3604b672db6ee89c9846451bbab23cf18e93c4260b2hding VAConfigAttribEncInterlaced = 11, 3614b672db6ee89c9846451bbab23cf18e93c4260b2hding /** 3624b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief Maximum number of reference frames. Read-only. 3634b672db6ee89c9846451bbab23cf18e93c4260b2hding * 3644b672db6ee89c9846451bbab23cf18e93c4260b2hding * This attribute determines the maximum number of reference 3654b672db6ee89c9846451bbab23cf18e93c4260b2hding * frames supported for encoding. 3664b672db6ee89c9846451bbab23cf18e93c4260b2hding * 3674b672db6ee89c9846451bbab23cf18e93c4260b2hding * Note: for H.264 encoding, the value represents the maximum number 3684b672db6ee89c9846451bbab23cf18e93c4260b2hding * of reference frames for both the reference picture list 0 (bottom 3694b672db6ee89c9846451bbab23cf18e93c4260b2hding * 16 bits) and the reference picture list 1 (top 16 bits). 3704b672db6ee89c9846451bbab23cf18e93c4260b2hding */ 3714b672db6ee89c9846451bbab23cf18e93c4260b2hding VAConfigAttribEncMaxRefFrames = 13, 3724b672db6ee89c9846451bbab23cf18e93c4260b2hding /** 3734b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief Maximum number of slices per frame. Read-only. 3744b672db6ee89c9846451bbab23cf18e93c4260b2hding * 3754b672db6ee89c9846451bbab23cf18e93c4260b2hding * This attribute determines the maximum number of slices the 3764b672db6ee89c9846451bbab23cf18e93c4260b2hding * driver can support to encode a single frame. 3774b672db6ee89c9846451bbab23cf18e93c4260b2hding */ 3784b672db6ee89c9846451bbab23cf18e93c4260b2hding VAConfigAttribEncMaxSlices = 14, 3794b672db6ee89c9846451bbab23cf18e93c4260b2hding /** 3804b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief Slice structure. Read-only. 3814b672db6ee89c9846451bbab23cf18e93c4260b2hding * 3824b672db6ee89c9846451bbab23cf18e93c4260b2hding * This attribute determines slice structures supported by the 3834b672db6ee89c9846451bbab23cf18e93c4260b2hding * driver for encoding. This attribute is a hint to the user so 3844b672db6ee89c9846451bbab23cf18e93c4260b2hding * that he can choose a suitable surface size and how to arrange 3854b672db6ee89c9846451bbab23cf18e93c4260b2hding * the encoding process of multiple slices per frame. 3864b672db6ee89c9846451bbab23cf18e93c4260b2hding * 3874b672db6ee89c9846451bbab23cf18e93c4260b2hding * More specifically, for H.264 encoding, this attribute 3884b672db6ee89c9846451bbab23cf18e93c4260b2hding * determines the range of accepted values to 3894b672db6ee89c9846451bbab23cf18e93c4260b2hding * VAEncSliceParameterBufferH264::macroblock_address and 3904b672db6ee89c9846451bbab23cf18e93c4260b2hding * VAEncSliceParameterBufferH264::num_macroblocks. 3914b672db6ee89c9846451bbab23cf18e93c4260b2hding * 3924b672db6ee89c9846451bbab23cf18e93c4260b2hding * See \c VA_ENC_SLICE_STRUCTURE_xxx for the supported slice 3934b672db6ee89c9846451bbab23cf18e93c4260b2hding * structure types. 3944b672db6ee89c9846451bbab23cf18e93c4260b2hding */ 3954b672db6ee89c9846451bbab23cf18e93c4260b2hding VAConfigAttribEncSliceStructure = 15, 3964b672db6ee89c9846451bbab23cf18e93c4260b2hding /** 3974b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief Macroblock information. Read-only. 3984b672db6ee89c9846451bbab23cf18e93c4260b2hding * 3994b672db6ee89c9846451bbab23cf18e93c4260b2hding * This attribute determines whether the driver supports extra 4004b672db6ee89c9846451bbab23cf18e93c4260b2hding * encoding information per-macroblock. e.g. QP. 4014b672db6ee89c9846451bbab23cf18e93c4260b2hding * 4024b672db6ee89c9846451bbab23cf18e93c4260b2hding * More specifically, for H.264 encoding, if the driver returns a non-zero 4034b672db6ee89c9846451bbab23cf18e93c4260b2hding * value for this attribute, this means the application can create 4044b672db6ee89c9846451bbab23cf18e93c4260b2hding * additional #VAEncMacroblockParameterBufferH264 buffers referenced 4054b672db6ee89c9846451bbab23cf18e93c4260b2hding * through VAEncSliceParameterBufferH264::macroblock_info. 4064b672db6ee89c9846451bbab23cf18e93c4260b2hding */ 4074b672db6ee89c9846451bbab23cf18e93c4260b2hding VAConfigAttribEncMacroblockInfo = 16, 4083ba486105912b27b566ccf65e2729231aa3f8a31Austin Yuan /** 4093ba486105912b27b566ccf65e2729231aa3f8a31Austin Yuan * \brief Auto reconstructed/reference frame management. Read/Write. 4103ba486105912b27b566ccf65e2729231aa3f8a31Austin Yuan * 4113ba486105912b27b566ccf65e2729231aa3f8a31Austin Yuan * This attribute determines whether the driver supports auto reconstructed 4123ba486105912b27b566ccf65e2729231aa3f8a31Austin Yuan * and reference management. 4133ba486105912b27b566ccf65e2729231aa3f8a31Austin Yuan * 4143ba486105912b27b566ccf65e2729231aa3f8a31Austin Yuan * If driver supports, and application sets it to true, application doesn't need 4153ba486105912b27b566ccf65e2729231aa3f8a31Austin Yuan * to set the reconstructed/reference frames information in #VAEncMacroblockParameterBufferH264 4163ba486105912b27b566ccf65e2729231aa3f8a31Austin Yuan * and #VAEncSliceParameterBufferH264. Driver will manage the reference frames internally 4173ba486105912b27b566ccf65e2729231aa3f8a31Austin Yuan * and choose the best reference frames. 4183ba486105912b27b566ccf65e2729231aa3f8a31Austin Yuan */ 4193ba486105912b27b566ccf65e2729231aa3f8a31Austin Yuan VAConfigAttribEncAutoReference = 17, 4204b672db6ee89c9846451bbab23cf18e93c4260b2hding /**@}*/ 4214b672db6ee89c9846451bbab23cf18e93c4260b2hding VAConfigAttribTypeMax 42286c93d9c46415cf7746351c502a3513f637e77e4root} VAConfigAttribType; 42386c93d9c46415cf7746351c502a3513f637e77e4root 42486c93d9c46415cf7746351c502a3513f637e77e4root/* 42586c93d9c46415cf7746351c502a3513f637e77e4root * Configuration attributes 42686c93d9c46415cf7746351c502a3513f637e77e4root * If there is more than one value for an attribute, a default 42786c93d9c46415cf7746351c502a3513f637e77e4root * value will be assigned to the attribute if the client does not 42886c93d9c46415cf7746351c502a3513f637e77e4root * specify the attribute when creating a configuration 42986c93d9c46415cf7746351c502a3513f637e77e4root */ 43086c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAConfigAttrib { 43186c93d9c46415cf7746351c502a3513f637e77e4root VAConfigAttribType type; 43286c93d9c46415cf7746351c502a3513f637e77e4root unsigned int value; /* OR'd flags (bits) for this attribute */ 43386c93d9c46415cf7746351c502a3513f637e77e4root} VAConfigAttrib; 43486c93d9c46415cf7746351c502a3513f637e77e4root 43586c93d9c46415cf7746351c502a3513f637e77e4root/* attribute value for VAConfigAttribRTFormat */ 43686c93d9c46415cf7746351c502a3513f637e77e4root#define VA_RT_FORMAT_YUV420 0x00000001 43786c93d9c46415cf7746351c502a3513f637e77e4root#define VA_RT_FORMAT_YUV422 0x00000002 43886c93d9c46415cf7746351c502a3513f637e77e4root#define VA_RT_FORMAT_YUV444 0x00000004 439409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_RT_FORMAT_YUV411 0x00000008 440409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_RT_FORMAT_YUV400 0x00000010 441409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_RT_FORMAT_RGB16 0x00010000 442409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_RT_FORMAT_RGB32 0x00020000 443097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan/* RGBP covers RGBP and BGRP fourcc */ 444097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan#define VA_RT_FORMAT_RGBP 0x00100000 44586c93d9c46415cf7746351c502a3513f637e77e4root#define VA_RT_FORMAT_PROTECTED 0x80000000 44686c93d9c46415cf7746351c502a3513f637e77e4root 4474b672db6ee89c9846451bbab23cf18e93c4260b2hding/** @name Attribute values for VAConfigAttribRateControl */ 4484b672db6ee89c9846451bbab23cf18e93c4260b2hding/**@{*/ 4494b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Driver does not support any form of rate control. */ 4504b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_RC_NONE 0x00000001 4514b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Constant bitrate. */ 4524b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_RC_CBR 0x00000002 4534b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Variable bitrate. */ 4544b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_RC_VBR 0x00000004 4554b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Video conference mode. */ 4564b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_RC_VCM 0x00000008 4574b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Constant QP. */ 4584b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_RC_CQP 0x00000010 4594b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Variable bitrate with peak rate higher than average bitrate. */ 4604b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_RC_VBR_CONSTRAINED 0x00000020 4614b672db6ee89c9846451bbab23cf18e93c4260b2hding/**@}*/ 4624b672db6ee89c9846451bbab23cf18e93c4260b2hding 463097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan/** @name Attribute values for VAConfigAttribDecSliceMode */ 464097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan/**@{*/ 465097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan/** \brief Driver supports normal mode for slice decoding */ 466097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan#define VA_DEC_SLICE_MODE_NORMAL 0x00000001 467097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan/** \brief Driver supports base mode for slice decoding */ 468097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan#define VA_DEC_SLICE_MODE_BASE 0x00000002 469097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan/**@}*/ 470097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan 4714b672db6ee89c9846451bbab23cf18e93c4260b2hding/** @name Attribute values for VAConfigAttribEncPackedHeaders */ 4724b672db6ee89c9846451bbab23cf18e93c4260b2hding/**@{*/ 4734b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Driver does not support any packed headers mode. */ 4744b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_ENC_PACKED_HEADER_NONE 0x00000000 4754b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Driver supports packed sequence headers. e.g. SPS for H.264. */ 4764b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_ENC_PACKED_HEADER_SEQUENCE 0x00000001 4774b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Driver supports packed picture headers. e.g. PPS for H.264. */ 4784b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_ENC_PACKED_HEADER_PICTURE 0x00000002 4794b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Driver supports packed slice headers. e.g. \c slice_header() for H.264. */ 4804b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_ENC_PACKED_HEADER_SLICE 0x00000004 4814b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Driver supports misc packed headers. e.g. SEI for H.264. */ 4824b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_ENC_PACKED_HEADER_MISC 0x00000008 4834b672db6ee89c9846451bbab23cf18e93c4260b2hding/**@}*/ 4844b672db6ee89c9846451bbab23cf18e93c4260b2hding 4854b672db6ee89c9846451bbab23cf18e93c4260b2hding/** @name Attribute values for VAConfigAttribEncInterlaced */ 4864b672db6ee89c9846451bbab23cf18e93c4260b2hding/**@{*/ 4874b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Driver does not support interlaced coding. */ 4884b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_ENC_INTERLACED_NONE 0x00000000 4894b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Driver supports interlaced frame coding. */ 4904b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_ENC_INTERLACED_FRAME 0x00000001 4914b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Driver supports interlaced field coding. */ 4924b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_ENC_INTERLACED_FIELD 0x00000002 4934b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Driver supports macroblock adaptive frame field coding. */ 4944b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_ENC_INTERLACED_MBAFF 0x00000004 4954b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Driver supports picture adaptive frame field coding. */ 4964b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_ENC_INTERLACED_PAFF 0x00000008 4974b672db6ee89c9846451bbab23cf18e93c4260b2hding/**@}*/ 4984b672db6ee89c9846451bbab23cf18e93c4260b2hding 4994b672db6ee89c9846451bbab23cf18e93c4260b2hding/** @name Attribute values for VAConfigAttribEncSliceStructure */ 5004b672db6ee89c9846451bbab23cf18e93c4260b2hding/**@{*/ 5014b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Driver supports an arbitrary number of rows per slice. */ 5024b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_ENC_SLICE_STRUCTURE_ARBITRARY_ROWS 0x00000000 5034b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Driver supports a power-of-two number of rows per slice. */ 5044b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_ENC_SLICE_STRUCTURE_POWER_OF_TWO_ROWS 0x00000001 5054b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Driver supports an arbitrary number of rows per slice. */ 5064b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_ENC_SLICE_STRUCTURE_ARBITRARY_MACROBLOCKS 0x00000002 5074b672db6ee89c9846451bbab23cf18e93c4260b2hding/**@}*/ 50886c93d9c46415cf7746351c502a3513f637e77e4root 50986c93d9c46415cf7746351c502a3513f637e77e4root/* 51086c93d9c46415cf7746351c502a3513f637e77e4root * if an attribute is not applicable for a given 51186c93d9c46415cf7746351c502a3513f637e77e4root * profile/entrypoint pair, then set the value to the following 51286c93d9c46415cf7746351c502a3513f637e77e4root */ 51386c93d9c46415cf7746351c502a3513f637e77e4root#define VA_ATTRIB_NOT_SUPPORTED 0x80000000 51486c93d9c46415cf7746351c502a3513f637e77e4root 51586c93d9c46415cf7746351c502a3513f637e77e4root/* Get maximum number of profiles supported by the implementation */ 51686c93d9c46415cf7746351c502a3513f637e77e4rootint vaMaxNumProfiles ( 51786c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy 51886c93d9c46415cf7746351c502a3513f637e77e4root); 51986c93d9c46415cf7746351c502a3513f637e77e4root 52086c93d9c46415cf7746351c502a3513f637e77e4root/* Get maximum number of entrypoints supported by the implementation */ 52186c93d9c46415cf7746351c502a3513f637e77e4rootint vaMaxNumEntrypoints ( 52286c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy 52386c93d9c46415cf7746351c502a3513f637e77e4root); 52486c93d9c46415cf7746351c502a3513f637e77e4root 52586c93d9c46415cf7746351c502a3513f637e77e4root/* Get maximum number of attributs supported by the implementation */ 52686c93d9c46415cf7746351c502a3513f637e77e4rootint vaMaxNumConfigAttributes ( 52786c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy 52886c93d9c46415cf7746351c502a3513f637e77e4root); 52986c93d9c46415cf7746351c502a3513f637e77e4root 53086c93d9c46415cf7746351c502a3513f637e77e4root/* 53186c93d9c46415cf7746351c502a3513f637e77e4root * Query supported profiles 53286c93d9c46415cf7746351c502a3513f637e77e4root * The caller must provide a "profile_list" array that can hold at 53386c93d9c46415cf7746351c502a3513f637e77e4root * least vaMaxNumProfile() entries. The actual number of profiles 53486c93d9c46415cf7746351c502a3513f637e77e4root * returned in "profile_list" is returned in "num_profile". 53586c93d9c46415cf7746351c502a3513f637e77e4root */ 53686c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaQueryConfigProfiles ( 53786c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 53886c93d9c46415cf7746351c502a3513f637e77e4root VAProfile *profile_list, /* out */ 53986c93d9c46415cf7746351c502a3513f637e77e4root int *num_profiles /* out */ 54086c93d9c46415cf7746351c502a3513f637e77e4root); 54186c93d9c46415cf7746351c502a3513f637e77e4root 54286c93d9c46415cf7746351c502a3513f637e77e4root/* 54386c93d9c46415cf7746351c502a3513f637e77e4root * Query supported entrypoints for a given profile 54486c93d9c46415cf7746351c502a3513f637e77e4root * The caller must provide an "entrypoint_list" array that can hold at 54586c93d9c46415cf7746351c502a3513f637e77e4root * least vaMaxNumEntrypoints() entries. The actual number of entrypoints 54686c93d9c46415cf7746351c502a3513f637e77e4root * returned in "entrypoint_list" is returned in "num_entrypoints". 54786c93d9c46415cf7746351c502a3513f637e77e4root */ 54886c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaQueryConfigEntrypoints ( 54986c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 55086c93d9c46415cf7746351c502a3513f637e77e4root VAProfile profile, 55186c93d9c46415cf7746351c502a3513f637e77e4root VAEntrypoint *entrypoint_list, /* out */ 55286c93d9c46415cf7746351c502a3513f637e77e4root int *num_entrypoints /* out */ 55386c93d9c46415cf7746351c502a3513f637e77e4root); 55486c93d9c46415cf7746351c502a3513f637e77e4root 55586c93d9c46415cf7746351c502a3513f637e77e4root/* 55686c93d9c46415cf7746351c502a3513f637e77e4root * Get attributes for a given profile/entrypoint pair 55786c93d9c46415cf7746351c502a3513f637e77e4root * The caller must provide an "attrib_list" with all attributes to be 55886c93d9c46415cf7746351c502a3513f637e77e4root * retrieved. Upon return, the attributes in "attrib_list" have been 55986c93d9c46415cf7746351c502a3513f637e77e4root * updated with their value. Unknown attributes or attributes that are 56086c93d9c46415cf7746351c502a3513f637e77e4root * not supported for the given profile/entrypoint pair will have their 56186c93d9c46415cf7746351c502a3513f637e77e4root * value set to VA_ATTRIB_NOT_SUPPORTED 56286c93d9c46415cf7746351c502a3513f637e77e4root */ 56386c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaGetConfigAttributes ( 56486c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 56586c93d9c46415cf7746351c502a3513f637e77e4root VAProfile profile, 56686c93d9c46415cf7746351c502a3513f637e77e4root VAEntrypoint entrypoint, 56786c93d9c46415cf7746351c502a3513f637e77e4root VAConfigAttrib *attrib_list, /* in/out */ 56886c93d9c46415cf7746351c502a3513f637e77e4root int num_attribs 56986c93d9c46415cf7746351c502a3513f637e77e4root); 57086c93d9c46415cf7746351c502a3513f637e77e4root 57186c93d9c46415cf7746351c502a3513f637e77e4root/* Generic ID type, can be re-typed for specific implementation */ 57286c93d9c46415cf7746351c502a3513f637e77e4roottypedef unsigned int VAGenericID; 57386c93d9c46415cf7746351c502a3513f637e77e4root 57486c93d9c46415cf7746351c502a3513f637e77e4roottypedef VAGenericID VAConfigID; 57586c93d9c46415cf7746351c502a3513f637e77e4root 57686c93d9c46415cf7746351c502a3513f637e77e4root/* 57786c93d9c46415cf7746351c502a3513f637e77e4root * Create a configuration for the decode pipeline 57886c93d9c46415cf7746351c502a3513f637e77e4root * it passes in the attribute list that specifies the attributes it cares 57986c93d9c46415cf7746351c502a3513f637e77e4root * about, with the rest taking default values. 58086c93d9c46415cf7746351c502a3513f637e77e4root */ 58186c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaCreateConfig ( 58286c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 58386c93d9c46415cf7746351c502a3513f637e77e4root VAProfile profile, 58486c93d9c46415cf7746351c502a3513f637e77e4root VAEntrypoint entrypoint, 58586c93d9c46415cf7746351c502a3513f637e77e4root VAConfigAttrib *attrib_list, 58686c93d9c46415cf7746351c502a3513f637e77e4root int num_attribs, 58786c93d9c46415cf7746351c502a3513f637e77e4root VAConfigID *config_id /* out */ 58886c93d9c46415cf7746351c502a3513f637e77e4root); 58986c93d9c46415cf7746351c502a3513f637e77e4root 59086c93d9c46415cf7746351c502a3513f637e77e4root/* 59186c93d9c46415cf7746351c502a3513f637e77e4root * Free resources associdated with a given config 59286c93d9c46415cf7746351c502a3513f637e77e4root */ 59386c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaDestroyConfig ( 59486c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 59586c93d9c46415cf7746351c502a3513f637e77e4root VAConfigID config_id 59686c93d9c46415cf7746351c502a3513f637e77e4root); 59786c93d9c46415cf7746351c502a3513f637e77e4root 59886c93d9c46415cf7746351c502a3513f637e77e4root/* 59986c93d9c46415cf7746351c502a3513f637e77e4root * Query all attributes for a given configuration 60086c93d9c46415cf7746351c502a3513f637e77e4root * The profile of the configuration is returned in "profile" 60186c93d9c46415cf7746351c502a3513f637e77e4root * The entrypoint of the configuration is returned in "entrypoint" 60286c93d9c46415cf7746351c502a3513f637e77e4root * The caller must provide an "attrib_list" array that can hold at least 60386c93d9c46415cf7746351c502a3513f637e77e4root * vaMaxNumConfigAttributes() entries. The actual number of attributes 60486c93d9c46415cf7746351c502a3513f637e77e4root * returned in "attrib_list" is returned in "num_attribs" 60586c93d9c46415cf7746351c502a3513f637e77e4root */ 60686c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaQueryConfigAttributes ( 60786c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 60886c93d9c46415cf7746351c502a3513f637e77e4root VAConfigID config_id, 60986c93d9c46415cf7746351c502a3513f637e77e4root VAProfile *profile, /* out */ 61086c93d9c46415cf7746351c502a3513f637e77e4root VAEntrypoint *entrypoint, /* out */ 61186c93d9c46415cf7746351c502a3513f637e77e4root VAConfigAttrib *attrib_list,/* out */ 61286c93d9c46415cf7746351c502a3513f637e77e4root int *num_attribs /* out */ 61386c93d9c46415cf7746351c502a3513f637e77e4root); 61486c93d9c46415cf7746351c502a3513f637e77e4root 61586c93d9c46415cf7746351c502a3513f637e77e4root 61686c93d9c46415cf7746351c502a3513f637e77e4root/* 61786c93d9c46415cf7746351c502a3513f637e77e4root * Contexts and Surfaces 61886c93d9c46415cf7746351c502a3513f637e77e4root * 61986c93d9c46415cf7746351c502a3513f637e77e4root * Context represents a "virtual" video decode pipeline. Surfaces are render 62086c93d9c46415cf7746351c502a3513f637e77e4root * targets for a given context. The data in the surfaces are not accessible 62186c93d9c46415cf7746351c502a3513f637e77e4root * to the client and the internal data format of the surface is implementatin 62286c93d9c46415cf7746351c502a3513f637e77e4root * specific. 62386c93d9c46415cf7746351c502a3513f637e77e4root * 62486c93d9c46415cf7746351c502a3513f637e77e4root * Surfaces will be bound to a context when the context is created. Once 62586c93d9c46415cf7746351c502a3513f637e77e4root * a surface is bound to a given context, it can not be used to create 62686c93d9c46415cf7746351c502a3513f637e77e4root * another context. The association is removed when the context is destroyed 62786c93d9c46415cf7746351c502a3513f637e77e4root * 62886c93d9c46415cf7746351c502a3513f637e77e4root * Both contexts and surfaces are identified by unique IDs and its 62986c93d9c46415cf7746351c502a3513f637e77e4root * implementation specific internals are kept opaque to the clients 63086c93d9c46415cf7746351c502a3513f637e77e4root */ 63186c93d9c46415cf7746351c502a3513f637e77e4root 63286c93d9c46415cf7746351c502a3513f637e77e4roottypedef VAGenericID VAContextID; 63386c93d9c46415cf7746351c502a3513f637e77e4root 63486c93d9c46415cf7746351c502a3513f637e77e4roottypedef VAGenericID VASurfaceID; 63586c93d9c46415cf7746351c502a3513f637e77e4root 63686c93d9c46415cf7746351c502a3513f637e77e4root#define VA_INVALID_ID 0xffffffff 63786c93d9c46415cf7746351c502a3513f637e77e4root#define VA_INVALID_SURFACE VA_INVALID_ID 63886c93d9c46415cf7746351c502a3513f637e77e4root 6394b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Generic value types. */ 6404b672db6ee89c9846451bbab23cf18e93c4260b2hdingtypedef enum { 6414b672db6ee89c9846451bbab23cf18e93c4260b2hding VAGenericValueTypeInteger = 1, /**< 32-bit signed integer. */ 6424b672db6ee89c9846451bbab23cf18e93c4260b2hding VAGenericValueTypeFloat, /**< 32-bit floating-point value. */ 6434b672db6ee89c9846451bbab23cf18e93c4260b2hding VAGenericValueTypePointer, /**< Generic pointer type */ 6444b672db6ee89c9846451bbab23cf18e93c4260b2hding VAGenericValueTypeFunc /**< Pointer to function */ 6454b672db6ee89c9846451bbab23cf18e93c4260b2hding} VAGenericValueType; 6464b672db6ee89c9846451bbab23cf18e93c4260b2hding 6474b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Generic function type. */ 6484b672db6ee89c9846451bbab23cf18e93c4260b2hdingtypedef void (*VAGenericFunc)(void); 6494b672db6ee89c9846451bbab23cf18e93c4260b2hding 6504b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Generic value. */ 6514b672db6ee89c9846451bbab23cf18e93c4260b2hdingtypedef struct _VAGenericValue { 6524b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Value type. See #VAGenericValueType. */ 6534b672db6ee89c9846451bbab23cf18e93c4260b2hding VAGenericValueType type; 6544b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Value holder. */ 6554b672db6ee89c9846451bbab23cf18e93c4260b2hding union { 6564b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief 32-bit signed integer. */ 6574b672db6ee89c9846451bbab23cf18e93c4260b2hding int i; 6584b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief 32-bit float. */ 6594b672db6ee89c9846451bbab23cf18e93c4260b2hding float f; 6604b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Generic pointer. */ 6614b672db6ee89c9846451bbab23cf18e93c4260b2hding void *p; 6624b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Pointer to function. */ 6634b672db6ee89c9846451bbab23cf18e93c4260b2hding VAGenericFunc fn; 6644b672db6ee89c9846451bbab23cf18e93c4260b2hding } value; 6654b672db6ee89c9846451bbab23cf18e93c4260b2hding} VAGenericValue; 6664b672db6ee89c9846451bbab23cf18e93c4260b2hding 6674b672db6ee89c9846451bbab23cf18e93c4260b2hding/** @name Surface attribute flags */ 6684b672db6ee89c9846451bbab23cf18e93c4260b2hding/**@{*/ 6694b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Surface attribute is not supported. */ 6704b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_SURFACE_ATTRIB_NOT_SUPPORTED 0x00000000 6714b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Surface attribute can be got through vaQuerySurfaceAttributes(). */ 6724b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_SURFACE_ATTRIB_GETTABLE 0x00000001 6734b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Surface attribute can be set through vaCreateSurfaces(). */ 6744b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_SURFACE_ATTRIB_SETTABLE 0x00000002 6754b672db6ee89c9846451bbab23cf18e93c4260b2hding/**@}*/ 6764b672db6ee89c9846451bbab23cf18e93c4260b2hding 6774b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Surface attribute types. */ 6784b672db6ee89c9846451bbab23cf18e93c4260b2hdingtypedef enum { 6794b672db6ee89c9846451bbab23cf18e93c4260b2hding VASurfaceAttribNone = 0, 6804b672db6ee89c9846451bbab23cf18e93c4260b2hding /** 6814b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief Pixel format (fourcc). 6824b672db6ee89c9846451bbab23cf18e93c4260b2hding * 6834b672db6ee89c9846451bbab23cf18e93c4260b2hding * The value is meaningful as input to vaQuerySurfaceAttributes(). 6844b672db6ee89c9846451bbab23cf18e93c4260b2hding * If zero, the driver returns the optimal pixel format for the 6854b672db6ee89c9846451bbab23cf18e93c4260b2hding * specified config. Otherwise, if non-zero, the value represents 6864b672db6ee89c9846451bbab23cf18e93c4260b2hding * a pixel format (FOURCC) that is kept as is on output, if the 6874b672db6ee89c9846451bbab23cf18e93c4260b2hding * driver supports it. Otherwise, the driver sets the value to 6884b672db6ee89c9846451bbab23cf18e93c4260b2hding * zero and drops the \c VA_SURFACE_ATTRIB_SETTABLE flag. 6894b672db6ee89c9846451bbab23cf18e93c4260b2hding */ 6904b672db6ee89c9846451bbab23cf18e93c4260b2hding VASurfaceAttribPixelFormat, 691409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan /** \brief Minimal width in pixels (int, read-only). */ 6924b672db6ee89c9846451bbab23cf18e93c4260b2hding VASurfaceAttribMinWidth, 6934b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Maximal width in pixels (int, read-only). */ 6944b672db6ee89c9846451bbab23cf18e93c4260b2hding VASurfaceAttribMaxWidth, 6954b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Minimal height in pixels (int, read-only). */ 6964b672db6ee89c9846451bbab23cf18e93c4260b2hding VASurfaceAttribMinHeight, 6974b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Maximal height in pixels (int, read-only). */ 6984b672db6ee89c9846451bbab23cf18e93c4260b2hding VASurfaceAttribMaxHeight, 699409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan /** \brief Surface memory type expressed in bit fields (int, read/write). */ 700409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan VASurfaceAttribMemoryType, 701409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan /** \brief External buffer descriptor (pointer, write). */ 702409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan VASurfaceAttribExternalBufferDescriptor, 7034b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Number of surface attributes. */ 7044b672db6ee89c9846451bbab23cf18e93c4260b2hding VASurfaceAttribCount 7054b672db6ee89c9846451bbab23cf18e93c4260b2hding} VASurfaceAttribType; 7064b672db6ee89c9846451bbab23cf18e93c4260b2hding 7074b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Surface attribute. */ 7084b672db6ee89c9846451bbab23cf18e93c4260b2hdingtypedef struct _VASurfaceAttrib { 7094b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Type. */ 7104b672db6ee89c9846451bbab23cf18e93c4260b2hding VASurfaceAttribType type; 7114b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Flags. See "Surface attribute flags". */ 7124b672db6ee89c9846451bbab23cf18e93c4260b2hding unsigned int flags; 7134b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Value. See "Surface attribute types" for the expected types. */ 7144b672db6ee89c9846451bbab23cf18e93c4260b2hding VAGenericValue value; 7154b672db6ee89c9846451bbab23cf18e93c4260b2hding} VASurfaceAttrib; 7164b672db6ee89c9846451bbab23cf18e93c4260b2hding 717409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan/** 718409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan * @name VASurfaceAttribMemoryType values in bit fields. 719409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan * Bit 0:7 are reserved for generic types, Bit 31:28 are reserved for 720409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan * Linux DRM, Bit 23:20 are reserved for Android. DRM and Android specific 721409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan * types are defined in DRM and Android header files. 722409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan */ 723409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan/**@{*/ 724409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan/** \brief VA memory type (default) is supported. */ 725409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_SURFACE_ATTRIB_MEM_TYPE_VA 0x00000001 726409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan/** \brief V4L2 buffer memory type is supported. */ 727409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_SURFACE_ATTRIB_MEM_TYPE_V4L2 0x00000002 728409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan/** \brief User pointer memory type is supported. */ 729409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_SURFACE_ATTRIB_MEM_TYPE_USER_PTR 0x00000004 730409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan/**@}*/ 731409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan 732409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan/** 733409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan * \brief VASurfaceAttribExternalBuffers structure for 734409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan * the VASurfaceAttribExternalBufferDescriptor attribute. 735409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan */ 736409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuantypedef struct _VASurfaceAttribExternalBuffers { 737409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan /** \brief pixel format in fourcc. */ 738409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan unsigned int pixel_format; 739409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan /** \brief width in pixels. */ 740409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan unsigned int width; 741409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan /** \brief height in pixels. */ 742409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan unsigned int height; 743409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan /** \brief total size of the buffer in bytes. */ 744409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan unsigned int data_size; 745409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan /** \brief number of planes for planar layout */ 746409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan unsigned int num_planes; 747409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan /** \brief pitch for each plane in bytes */ 748409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan unsigned int pitches[4]; 749409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan /** \brief offset for each plane in bytes */ 750409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan unsigned int offsets[4]; 751409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan /** \brief buffer handles or user pointers */ 752409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan unsigned long *buffers; 753409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan /** \brief number of elements in the "buffers" array */ 754409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan unsigned int num_buffers; 755409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan /** \brief flags. See "Surface external buffer descriptor flags". */ 756409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan unsigned int flags; 757409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan /** \brief reserved for passing private data */ 758409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan void *private_data; 759409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan} VASurfaceAttribExternalBuffers; 760409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan 761409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan/** @name VASurfaceAttribExternalBuffers flags */ 762409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan/**@{*/ 763409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan/** \brief Enable memory tiling */ 764409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_SURFACE_EXTBUF_DESC_ENABLE_TILING 0x00000001 765409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan/** \brief Memory is cacheable */ 766409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_SURFACE_EXTBUF_DESC_CACHED 0x00000002 767409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan/** \brief Memory is non-cacheable */ 768409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_SURFACE_EXTBUF_DESC_UNCACHED 0x00000004 769409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan/** \brief Memory is write-combined */ 770409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_SURFACE_EXTBUF_DESC_WC 0x00000008 771409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan/** \brief Memory is protected */ 772409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_SURFACE_EXTBUF_DESC_PROTECTED 0x80000000 773409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan 774409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan/**@}*/ 775409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan 7764b672db6ee89c9846451bbab23cf18e93c4260b2hding/** 7774b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief Get surface attributes for the supplied config. 7784b672db6ee89c9846451bbab23cf18e93c4260b2hding * 7794b672db6ee89c9846451bbab23cf18e93c4260b2hding * This function retrieves the surface attributes matching the supplied 7804b672db6ee89c9846451bbab23cf18e93c4260b2hding * config. The caller shall provide an \c attrib_list with all attributes 7814b672db6ee89c9846451bbab23cf18e93c4260b2hding * to be retrieved. Upon successful return, the attributes in \c attrib_list 7824b672db6ee89c9846451bbab23cf18e93c4260b2hding * are updated with the requested value. Unknown attributes or attributes 7834b672db6ee89c9846451bbab23cf18e93c4260b2hding * that are not supported for the given config will have their \c flags 7844b672db6ee89c9846451bbab23cf18e93c4260b2hding * field set to \c VA_SURFACE_ATTRIB_NOT_SUPPORTED. 7854b672db6ee89c9846451bbab23cf18e93c4260b2hding * 7864b672db6ee89c9846451bbab23cf18e93c4260b2hding * @param[in] dpy the VA display 7874b672db6ee89c9846451bbab23cf18e93c4260b2hding * @param[in] config the config identifying a codec or a video 7884b672db6ee89c9846451bbab23cf18e93c4260b2hding * processing pipeline 7894b672db6ee89c9846451bbab23cf18e93c4260b2hding * @param[in,out] attrib_list the list of attributes on input, with at 7904b672db6ee89c9846451bbab23cf18e93c4260b2hding * least \c type fields filled in, and possibly \c value fields whenever 7914b672db6ee89c9846451bbab23cf18e93c4260b2hding * necessary. The updated list of attributes and flags on output 7924b672db6ee89c9846451bbab23cf18e93c4260b2hding * @param[in] num_attribs the number of attributes supplied in the 7934b672db6ee89c9846451bbab23cf18e93c4260b2hding * \c attrib_list array 7944b672db6ee89c9846451bbab23cf18e93c4260b2hding */ 7954b672db6ee89c9846451bbab23cf18e93c4260b2hdingVAStatus 7964b672db6ee89c9846451bbab23cf18e93c4260b2hdingvaGetSurfaceAttributes( 7974b672db6ee89c9846451bbab23cf18e93c4260b2hding VADisplay dpy, 7984b672db6ee89c9846451bbab23cf18e93c4260b2hding VAConfigID config, 7994b672db6ee89c9846451bbab23cf18e93c4260b2hding VASurfaceAttrib *attrib_list, 8004b672db6ee89c9846451bbab23cf18e93c4260b2hding unsigned int num_attribs 8014b672db6ee89c9846451bbab23cf18e93c4260b2hding); 8024b672db6ee89c9846451bbab23cf18e93c4260b2hding 8034b672db6ee89c9846451bbab23cf18e93c4260b2hding/** 8044b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief Creates an array of surfaces 8054b672db6ee89c9846451bbab23cf18e93c4260b2hding * 8064b672db6ee89c9846451bbab23cf18e93c4260b2hding * Creates an array of surfaces. The optional list of attributes shall 8074b672db6ee89c9846451bbab23cf18e93c4260b2hding * be constructed and verified through vaGetSurfaceAttributes(). 8084b672db6ee89c9846451bbab23cf18e93c4260b2hding * 8094b672db6ee89c9846451bbab23cf18e93c4260b2hding * @param[in] dpy the VA display 8104b672db6ee89c9846451bbab23cf18e93c4260b2hding * @param[in] format the desired surface format. See \c VA_RT_FORMAT_* 8114b672db6ee89c9846451bbab23cf18e93c4260b2hding * @param[in] width the surface width 8124b672db6ee89c9846451bbab23cf18e93c4260b2hding * @param[in] height the surface height 8134b672db6ee89c9846451bbab23cf18e93c4260b2hding * @param[out] surfaces the array of newly created surfaces 8144b672db6ee89c9846451bbab23cf18e93c4260b2hding * @param[in] num_surfaces the number of surfaces to create 8154b672db6ee89c9846451bbab23cf18e93c4260b2hding * @param[in] attrib_list the list of (optional) attributes, or \c NULL 8164b672db6ee89c9846451bbab23cf18e93c4260b2hding * @param[in] num_attribs the number of attributes supplied in 8174b672db6ee89c9846451bbab23cf18e93c4260b2hding * \c attrib_list, or zero 8184b672db6ee89c9846451bbab23cf18e93c4260b2hding */ 8194b672db6ee89c9846451bbab23cf18e93c4260b2hdingVAStatus 8204b672db6ee89c9846451bbab23cf18e93c4260b2hdingvaCreateSurfaces( 8214b672db6ee89c9846451bbab23cf18e93c4260b2hding VADisplay dpy, 8224b672db6ee89c9846451bbab23cf18e93c4260b2hding unsigned int format, 8234b672db6ee89c9846451bbab23cf18e93c4260b2hding unsigned int width, 8244b672db6ee89c9846451bbab23cf18e93c4260b2hding unsigned int height, 8254b672db6ee89c9846451bbab23cf18e93c4260b2hding VASurfaceID *surfaces, 8264b672db6ee89c9846451bbab23cf18e93c4260b2hding unsigned int num_surfaces, 8274b672db6ee89c9846451bbab23cf18e93c4260b2hding VASurfaceAttrib *attrib_list, 8284b672db6ee89c9846451bbab23cf18e93c4260b2hding unsigned int num_attribs 82986c93d9c46415cf7746351c502a3513f637e77e4root); 83086c93d9c46415cf7746351c502a3513f637e77e4root 83186c93d9c46415cf7746351c502a3513f637e77e4root/* 83286c93d9c46415cf7746351c502a3513f637e77e4root * vaDestroySurfaces - Destroy resources associated with surfaces. 83386c93d9c46415cf7746351c502a3513f637e77e4root * Surfaces can only be destroyed after the context associated has been 83486c93d9c46415cf7746351c502a3513f637e77e4root * destroyed. 83586c93d9c46415cf7746351c502a3513f637e77e4root * dpy: display 83686c93d9c46415cf7746351c502a3513f637e77e4root * surfaces: array of surfaces to destroy 83786c93d9c46415cf7746351c502a3513f637e77e4root * num_surfaces: number of surfaces in the array to be destroyed. 83886c93d9c46415cf7746351c502a3513f637e77e4root */ 83986c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaDestroySurfaces ( 84086c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 84186c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceID *surfaces, 84286c93d9c46415cf7746351c502a3513f637e77e4root int num_surfaces 84386c93d9c46415cf7746351c502a3513f637e77e4root); 84486c93d9c46415cf7746351c502a3513f637e77e4root 84586c93d9c46415cf7746351c502a3513f637e77e4root#define VA_PROGRESSIVE 0x1 84686c93d9c46415cf7746351c502a3513f637e77e4root/* 84786c93d9c46415cf7746351c502a3513f637e77e4root * vaCreateContext - Create a context 84886c93d9c46415cf7746351c502a3513f637e77e4root * dpy: display 84986c93d9c46415cf7746351c502a3513f637e77e4root * config_id: configuration for the context 85086c93d9c46415cf7746351c502a3513f637e77e4root * picture_width: coded picture width 85186c93d9c46415cf7746351c502a3513f637e77e4root * picture_height: coded picture height 85286c93d9c46415cf7746351c502a3513f637e77e4root * flag: any combination of the following: 85386c93d9c46415cf7746351c502a3513f637e77e4root * VA_PROGRESSIVE (only progressive frame pictures in the sequence when set) 85486c93d9c46415cf7746351c502a3513f637e77e4root * render_targets: render targets (surfaces) tied to the context 85586c93d9c46415cf7746351c502a3513f637e77e4root * num_render_targets: number of render targets in the above array 85686c93d9c46415cf7746351c502a3513f637e77e4root * context: created context id upon return 85786c93d9c46415cf7746351c502a3513f637e77e4root */ 85886c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaCreateContext ( 85986c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 86086c93d9c46415cf7746351c502a3513f637e77e4root VAConfigID config_id, 86186c93d9c46415cf7746351c502a3513f637e77e4root int picture_width, 86286c93d9c46415cf7746351c502a3513f637e77e4root int picture_height, 86386c93d9c46415cf7746351c502a3513f637e77e4root int flag, 86486c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceID *render_targets, 86586c93d9c46415cf7746351c502a3513f637e77e4root int num_render_targets, 86686c93d9c46415cf7746351c502a3513f637e77e4root VAContextID *context /* out */ 86786c93d9c46415cf7746351c502a3513f637e77e4root); 86886c93d9c46415cf7746351c502a3513f637e77e4root 86986c93d9c46415cf7746351c502a3513f637e77e4root/* 87086c93d9c46415cf7746351c502a3513f637e77e4root * vaDestroyContext - Destroy a context 87186c93d9c46415cf7746351c502a3513f637e77e4root * dpy: display 87286c93d9c46415cf7746351c502a3513f637e77e4root * context: context to be destroyed 87386c93d9c46415cf7746351c502a3513f637e77e4root */ 87486c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaDestroyContext ( 87586c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 87686c93d9c46415cf7746351c502a3513f637e77e4root VAContextID context 87786c93d9c46415cf7746351c502a3513f637e77e4root); 87886c93d9c46415cf7746351c502a3513f637e77e4root 87986c93d9c46415cf7746351c502a3513f637e77e4root/* 88086c93d9c46415cf7746351c502a3513f637e77e4root * Buffers 88186c93d9c46415cf7746351c502a3513f637e77e4root * Buffers are used to pass various types of data from the 88286c93d9c46415cf7746351c502a3513f637e77e4root * client to the server. The server maintains a data store 88386c93d9c46415cf7746351c502a3513f637e77e4root * for each buffer created, and the client idenfies a buffer 88486c93d9c46415cf7746351c502a3513f637e77e4root * through a unique buffer id assigned by the server. 88586c93d9c46415cf7746351c502a3513f637e77e4root */ 88686c93d9c46415cf7746351c502a3513f637e77e4root 88786c93d9c46415cf7746351c502a3513f637e77e4roottypedef VAGenericID VABufferID; 88886c93d9c46415cf7746351c502a3513f637e77e4root 88986c93d9c46415cf7746351c502a3513f637e77e4roottypedef enum 89086c93d9c46415cf7746351c502a3513f637e77e4root{ 89186c93d9c46415cf7746351c502a3513f637e77e4root VAPictureParameterBufferType = 0, 89286c93d9c46415cf7746351c502a3513f637e77e4root VAIQMatrixBufferType = 1, 89386c93d9c46415cf7746351c502a3513f637e77e4root VABitPlaneBufferType = 2, 89486c93d9c46415cf7746351c502a3513f637e77e4root VASliceGroupMapBufferType = 3, 89586c93d9c46415cf7746351c502a3513f637e77e4root VASliceParameterBufferType = 4, 89686c93d9c46415cf7746351c502a3513f637e77e4root VASliceDataBufferType = 5, 89786c93d9c46415cf7746351c502a3513f637e77e4root VAMacroblockParameterBufferType = 6, 89886c93d9c46415cf7746351c502a3513f637e77e4root VAResidualDataBufferType = 7, 89986c93d9c46415cf7746351c502a3513f637e77e4root VADeblockingParameterBufferType = 8, 90086c93d9c46415cf7746351c502a3513f637e77e4root VAImageBufferType = 9, 90186c93d9c46415cf7746351c502a3513f637e77e4root VAProtectedSliceDataBufferType = 10, 902b0fac498ca4863166252f1268fda83394db54153Fei Jiang VAQMatrixBufferType = 11, 9034b672db6ee89c9846451bbab23cf18e93c4260b2hding VAHuffmanTableBufferType = 12, 9044b672db6ee89c9846451bbab23cf18e93c4260b2hding VAProbabilityBufferType = 13, 90586c93d9c46415cf7746351c502a3513f637e77e4root/* Following are encode buffer types */ 90686c93d9c46415cf7746351c502a3513f637e77e4root VAEncCodedBufferType = 21, 90786c93d9c46415cf7746351c502a3513f637e77e4root VAEncSequenceParameterBufferType = 22, 90886c93d9c46415cf7746351c502a3513f637e77e4root VAEncPictureParameterBufferType = 23, 90986c93d9c46415cf7746351c502a3513f637e77e4root VAEncSliceParameterBufferType = 24, 9104b672db6ee89c9846451bbab23cf18e93c4260b2hding VAEncPackedHeaderParameterBufferType = 25, 9114b672db6ee89c9846451bbab23cf18e93c4260b2hding VAEncPackedHeaderDataBufferType = 26, 91221e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan VAEncMiscParameterBufferType = 27, 9134b672db6ee89c9846451bbab23cf18e93c4260b2hding VAEncMacroblockParameterBufferType = 28, 9144b672db6ee89c9846451bbab23cf18e93c4260b2hding/* Following are video processing buffer types */ 9154b672db6ee89c9846451bbab23cf18e93c4260b2hding /** 9164b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief Video processing pipeline parameter buffer. 9174b672db6ee89c9846451bbab23cf18e93c4260b2hding * 9184b672db6ee89c9846451bbab23cf18e93c4260b2hding * This buffer describes the video processing pipeline. See 9194b672db6ee89c9846451bbab23cf18e93c4260b2hding * #VAProcPipelineParameterBuffer for details. 9204b672db6ee89c9846451bbab23cf18e93c4260b2hding */ 9214b672db6ee89c9846451bbab23cf18e93c4260b2hding VAProcPipelineParameterBufferType = 41, 9224b672db6ee89c9846451bbab23cf18e93c4260b2hding /** 9234b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief Video filter parameter buffer. 9244b672db6ee89c9846451bbab23cf18e93c4260b2hding * 9254b672db6ee89c9846451bbab23cf18e93c4260b2hding * This buffer describes the video filter parameters. All buffers 9264b672db6ee89c9846451bbab23cf18e93c4260b2hding * inherit from #VAProcFilterParameterBufferBase, thus including 9274b672db6ee89c9846451bbab23cf18e93c4260b2hding * a unique filter buffer type. 9284b672db6ee89c9846451bbab23cf18e93c4260b2hding * 9294b672db6ee89c9846451bbab23cf18e93c4260b2hding * The default buffer used by most filters is #VAProcFilterParameterBuffer. 9304b672db6ee89c9846451bbab23cf18e93c4260b2hding * Filters requiring advanced parameters include, but are not limited to, 9314b672db6ee89c9846451bbab23cf18e93c4260b2hding * deinterlacing (#VAProcFilterParameterBufferDeinterlacing), 9324b672db6ee89c9846451bbab23cf18e93c4260b2hding * color balance (#VAProcFilterParameterBufferColorBalance), etc. 9334b672db6ee89c9846451bbab23cf18e93c4260b2hding */ 9344b672db6ee89c9846451bbab23cf18e93c4260b2hding VAProcFilterParameterBufferType = 42, 9354b672db6ee89c9846451bbab23cf18e93c4260b2hding VABufferTypeMax 93686c93d9c46415cf7746351c502a3513f637e77e4root} VABufferType; 93786c93d9c46415cf7746351c502a3513f637e77e4root 938901c77a7aa491f56b63af7b655b67439481e4177Fei Jiangtypedef enum 939901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang{ 940901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang VAEncMiscParameterTypeFrameRate = 0, 9418712753e35351f9678345062e4144b0d1062de99Fei Jiang VAEncMiscParameterTypeRateControl = 1, 942901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang VAEncMiscParameterTypeMaxSliceSize = 2, 943901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang VAEncMiscParameterTypeAIR = 3, 9444b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Buffer type used to express a maximum frame size (in bits). */ 9454b672db6ee89c9846451bbab23cf18e93c4260b2hding VAEncMiscParameterTypeMaxFrameSize = 4, 9464b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Buffer type used for HRD parameters. */ 9474b672db6ee89c9846451bbab23cf18e93c4260b2hding VAEncMiscParameterTypeHRD = 5, 948901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang} VAEncMiscParameterType; 949901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang 9504b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Packed header type. */ 9514b672db6ee89c9846451bbab23cf18e93c4260b2hdingtypedef enum { 9524b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Packed sequence header. */ 9534b672db6ee89c9846451bbab23cf18e93c4260b2hding VAEncPackedHeaderSequence = 1, 9544b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Packed picture header. */ 9554b672db6ee89c9846451bbab23cf18e93c4260b2hding VAEncPackedHeaderPicture = 2, 9564b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Packed slice header. */ 9574b672db6ee89c9846451bbab23cf18e93c4260b2hding VAEncPackedHeaderSlice = 3, 958409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan /** 959409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan * \brief Packed raw header. 960409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan * 961409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan * Packed raw data header can be used by the client to insert a header 962409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan * into the bitstream data buffer at the point it is passed, without 963409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan * any handling or interpretation by the implementation. 964409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan */ 965409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan VAEncPackedHeaderRawData = 4, 9664b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Misc packed header. See codec-specific definitions. */ 9674b672db6ee89c9846451bbab23cf18e93c4260b2hding VAEncPackedHeaderMiscMask = 0x80000000, 9684b672db6ee89c9846451bbab23cf18e93c4260b2hding} VAEncPackedHeaderType; 9694b672db6ee89c9846451bbab23cf18e93c4260b2hding 9704b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Packed header parameter. */ 9714b672db6ee89c9846451bbab23cf18e93c4260b2hdingtypedef struct _VAEncPackedHeaderParameterBuffer { 9724b672db6ee89c9846451bbab23cf18e93c4260b2hding /** Type of the packed header buffer. See #VAEncPackedHeaderType. */ 9734b672db6ee89c9846451bbab23cf18e93c4260b2hding unsigned int type; 9744b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Size of the #VAEncPackedHeaderDataBuffer in bits. */ 9754b672db6ee89c9846451bbab23cf18e93c4260b2hding unsigned int bit_length; 9764b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Flag: buffer contains start code emulation prevention bytes? */ 9774b672db6ee89c9846451bbab23cf18e93c4260b2hding unsigned char has_emulation_bytes; 9784b672db6ee89c9846451bbab23cf18e93c4260b2hding} VAEncPackedHeaderParameterBuffer; 9794b672db6ee89c9846451bbab23cf18e93c4260b2hding 980901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang/* 981901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * For application, e.g. set a new bitrate 982901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * VABufferID buf_id; 983901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * VAEncMiscParameterBuffer *misc_param; 9848712753e35351f9678345062e4144b0d1062de99Fei Jiang * VAEncMiscParameterRateControl *misc_rate_ctrl; 985901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * 986901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * vaCreateBuffer(dpy, context, VAEncMiscParameterBufferType, 9878712753e35351f9678345062e4144b0d1062de99Fei Jiang * sizeof(VAEncMiscParameterBuffer) + sizeof(VAEncMiscParameterRateControl), 988901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * 1, NULL, &buf_id); 989901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * 990901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * vaMapBuffer(dpy,buf_id,(void **)&misc_param); 9918712753e35351f9678345062e4144b0d1062de99Fei Jiang * misc_param->type = VAEncMiscParameterTypeRateControl; 9928712753e35351f9678345062e4144b0d1062de99Fei Jiang * misc_rate_ctrl= (VAEncMiscParameterRateControl *)misc_param->data; 9938712753e35351f9678345062e4144b0d1062de99Fei Jiang * misc_rate_ctrl->bits_per_second = 6400000; 99421e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan * vaUnmapBuffer(dpy, buf_id); 995901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * vaRenderPicture(dpy, context, &buf_id, 1); 996901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang */ 997901c77a7aa491f56b63af7b655b67439481e4177Fei Jiangtypedef struct _VAEncMiscParameterBuffer 998901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang{ 999901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang VAEncMiscParameterType type; 1000901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang unsigned int data[0]; 1001901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang} VAEncMiscParameterBuffer; 1002901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang 10034b672db6ee89c9846451bbab23cf18e93c4260b2hding 10044b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Rate control parameters */ 10058712753e35351f9678345062e4144b0d1062de99Fei Jiangtypedef struct _VAEncMiscParameterRateControl 1006901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang{ 10074b672db6ee89c9846451bbab23cf18e93c4260b2hding /* this is the maximum bit-rate to be constrained by the rate control implementation */ 10084b672db6ee89c9846451bbab23cf18e93c4260b2hding unsigned int bits_per_second; 10094b672db6ee89c9846451bbab23cf18e93c4260b2hding /* this is the bit-rate the rate control is targeting, as a percentage of the maximum 10104b672db6ee89c9846451bbab23cf18e93c4260b2hding * bit-rate for example if target_percentage is 95 then the rate control will target 10114b672db6ee89c9846451bbab23cf18e93c4260b2hding * a bit-rate that is 95% of the maximum bit-rate 10124b672db6ee89c9846451bbab23cf18e93c4260b2hding */ 10134b672db6ee89c9846451bbab23cf18e93c4260b2hding unsigned int target_percentage; 10144b672db6ee89c9846451bbab23cf18e93c4260b2hding /* windows size in milliseconds. For example if this is set to 500, 10154b672db6ee89c9846451bbab23cf18e93c4260b2hding * then the rate control will guarantee the target bit-rate over a 500 ms window 10164b672db6ee89c9846451bbab23cf18e93c4260b2hding */ 10174b672db6ee89c9846451bbab23cf18e93c4260b2hding unsigned int window_size; 10184b672db6ee89c9846451bbab23cf18e93c4260b2hding /* initial QP at I frames */ 10194b672db6ee89c9846451bbab23cf18e93c4260b2hding unsigned int initial_qp; 1020165d8d5c65d966841a94e1147a516c92a4cede20Elaine Wang unsigned int min_qp; 10214b672db6ee89c9846451bbab23cf18e93c4260b2hding unsigned int basic_unit_size; 1022165d8d5c65d966841a94e1147a516c92a4cede20Elaine Wang union 1023165d8d5c65d966841a94e1147a516c92a4cede20Elaine Wang { 1024165d8d5c65d966841a94e1147a516c92a4cede20Elaine Wang struct 1025165d8d5c65d966841a94e1147a516c92a4cede20Elaine Wang { 1026165d8d5c65d966841a94e1147a516c92a4cede20Elaine Wang unsigned int reset : 1; 1027165d8d5c65d966841a94e1147a516c92a4cede20Elaine Wang unsigned int disable_frame_skip : 1; /* Disable frame skip in rate control mode */ 1028165d8d5c65d966841a94e1147a516c92a4cede20Elaine Wang unsigned int disable_bit_stuffing : 1; /* Disable bit stuffing in rate control mode */ 1029165d8d5c65d966841a94e1147a516c92a4cede20Elaine Wang } bits; 1030165d8d5c65d966841a94e1147a516c92a4cede20Elaine Wang unsigned int value; 1031165d8d5c65d966841a94e1147a516c92a4cede20Elaine Wang } rc_flags; 10328712753e35351f9678345062e4144b0d1062de99Fei Jiang} VAEncMiscParameterRateControl; 1033901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang 1034901c77a7aa491f56b63af7b655b67439481e4177Fei Jiangtypedef struct _VAEncMiscParameterFrameRate 1035901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang{ 1036901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang unsigned int framerate; 1037901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang} VAEncMiscParameterFrameRate; 1038901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang 1039901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang/* 1040901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * Allow a maximum slice size to be specified (in bits). 1041901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * The encoder will attempt to make sure that individual slices do not exceed this size 1042901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * Or to signal applicate if the slice size exceed this size, see "status" of VACodedBufferSegment 1043901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang */ 1044901c77a7aa491f56b63af7b655b67439481e4177Fei Jiangtypedef struct _VAEncMiscParameterMaxSliceSize 1045901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang{ 1046901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang unsigned int max_slice_size; 1047901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang} VAEncMiscParameterMaxSliceSize; 1048901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang 1049901c77a7aa491f56b63af7b655b67439481e4177Fei Jiangtypedef struct _VAEncMiscParameterAIR 1050901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang{ 1051901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang unsigned int air_num_mbs; 1052901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang unsigned int air_threshold; 1053901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang unsigned int air_auto; /* if set to 1 then hardware auto-tune the AIR threshold */ 1054901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang} VAEncMiscParameterAIR; 1055901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang 1056adb30a44e9db2ebb15f521deaf16602c18743989Kun Wangtypedef struct _VAEncMiscParameterHRD 1057adb30a44e9db2ebb15f521deaf16602c18743989Kun Wang{ 10584b672db6ee89c9846451bbab23cf18e93c4260b2hding unsigned int initial_buffer_fullness; /* in bits */ 10594b672db6ee89c9846451bbab23cf18e93c4260b2hding unsigned int buffer_size; /* in bits */ 1060adb30a44e9db2ebb15f521deaf16602c18743989Kun Wang} VAEncMiscParameterHRD; 106186c93d9c46415cf7746351c502a3513f637e77e4root 10624b672db6ee89c9846451bbab23cf18e93c4260b2hding/** 10634b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief Defines a maximum frame size (in bits). 10644b672db6ee89c9846451bbab23cf18e93c4260b2hding * 10654b672db6ee89c9846451bbab23cf18e93c4260b2hding * This misc parameter buffer defines the maximum size of a frame (in 10664b672db6ee89c9846451bbab23cf18e93c4260b2hding * bits). The encoder will try to make sure that each frame does not 10674b672db6ee89c9846451bbab23cf18e93c4260b2hding * exceed this size. Otherwise, if the frame size exceeds this size, 10684b672db6ee89c9846451bbab23cf18e93c4260b2hding * the \c status flag of #VACodedBufferSegment will contain 10694b672db6ee89c9846451bbab23cf18e93c4260b2hding * #VA_CODED_BUF_STATUS_FRAME_SIZE_OVERFLOW. 10704b672db6ee89c9846451bbab23cf18e93c4260b2hding */ 10714b672db6ee89c9846451bbab23cf18e93c4260b2hdingtypedef struct _VAEncMiscParameterBufferMaxFrameSize { 10724b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Type. Shall be set to #VAEncMiscParameterTypeMaxFrameSize. */ 10734b672db6ee89c9846451bbab23cf18e93c4260b2hding VAEncMiscParameterType type; 10744b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Maximum size of a frame (in bits). */ 10754b672db6ee89c9846451bbab23cf18e93c4260b2hding unsigned int max_frame_size; 10764b672db6ee89c9846451bbab23cf18e93c4260b2hding} VAEncMiscParameterBufferMaxFrameSize; 10774b672db6ee89c9846451bbab23cf18e93c4260b2hding 107886c93d9c46415cf7746351c502a3513f637e77e4root/* 107986c93d9c46415cf7746351c502a3513f637e77e4root * There will be cases where the bitstream buffer will not have enough room to hold 108086c93d9c46415cf7746351c502a3513f637e77e4root * the data for the entire slice, and the following flags will be used in the slice 108186c93d9c46415cf7746351c502a3513f637e77e4root * parameter to signal to the server for the possible cases. 108286c93d9c46415cf7746351c502a3513f637e77e4root * If a slice parameter buffer and slice data buffer pair is sent to the server with 108386c93d9c46415cf7746351c502a3513f637e77e4root * the slice data partially in the slice data buffer (BEGIN and MIDDLE cases below), 108486c93d9c46415cf7746351c502a3513f637e77e4root * then a slice parameter and data buffer needs to be sent again to complete this slice. 108586c93d9c46415cf7746351c502a3513f637e77e4root */ 108686c93d9c46415cf7746351c502a3513f637e77e4root#define VA_SLICE_DATA_FLAG_ALL 0x00 /* whole slice is in the buffer */ 108786c93d9c46415cf7746351c502a3513f637e77e4root#define VA_SLICE_DATA_FLAG_BEGIN 0x01 /* The beginning of the slice is in the buffer but the end if not */ 108886c93d9c46415cf7746351c502a3513f637e77e4root#define VA_SLICE_DATA_FLAG_MIDDLE 0x02 /* Neither beginning nor end of the slice is in the buffer */ 108986c93d9c46415cf7746351c502a3513f637e77e4root#define VA_SLICE_DATA_FLAG_END 0x04 /* end of the slice is in the buffer */ 109086c93d9c46415cf7746351c502a3513f637e77e4root 109186c93d9c46415cf7746351c502a3513f637e77e4root/* Codec-independent Slice Parameter Buffer base */ 109286c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VASliceParameterBufferBase 109386c93d9c46415cf7746351c502a3513f637e77e4root{ 109486c93d9c46415cf7746351c502a3513f637e77e4root unsigned int slice_data_size; /* number of bytes in the slice data buffer for this slice */ 109586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int slice_data_offset; /* the offset to the first byte of slice data */ 109686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX definitions */ 109786c93d9c46415cf7746351c502a3513f637e77e4root} VASliceParameterBufferBase; 109886c93d9c46415cf7746351c502a3513f637e77e4root 1099b0fac498ca4863166252f1268fda83394db54153Fei Jiang 1100b0fac498ca4863166252f1268fda83394db54153Fei Jiang/**************************** 1101b0fac498ca4863166252f1268fda83394db54153Fei Jiang * JEPG data structure 1102b0fac498ca4863166252f1268fda83394db54153Fei Jiang ***************************/ 1103b0fac498ca4863166252f1268fda83394db54153Fei Jiangtypedef struct _VAQMatrixBufferJPEG 1104b0fac498ca4863166252f1268fda83394db54153Fei Jiang{ 1105b0fac498ca4863166252f1268fda83394db54153Fei Jiang int load_lum_quantiser_matrix; 1106b0fac498ca4863166252f1268fda83394db54153Fei Jiang int load_chroma_quantiser_matrix; 1107b0fac498ca4863166252f1268fda83394db54153Fei Jiang unsigned char lum_quantiser_matrix[64]; 1108b0fac498ca4863166252f1268fda83394db54153Fei Jiang unsigned char chroma_quantiser_matrix[64]; 1109b0fac498ca4863166252f1268fda83394db54153Fei Jiang} VAQMatrixBufferJPEG; 1110b0fac498ca4863166252f1268fda83394db54153Fei Jiang 1111b0fac498ca4863166252f1268fda83394db54153Fei Jiangtypedef struct _VAEncPictureParameterBufferJPEG 1112b0fac498ca4863166252f1268fda83394db54153Fei Jiang{ 1113b0fac498ca4863166252f1268fda83394db54153Fei Jiang VASurfaceID reconstructed_picture; 1114b0fac498ca4863166252f1268fda83394db54153Fei Jiang unsigned short picture_width; 1115b0fac498ca4863166252f1268fda83394db54153Fei Jiang unsigned short picture_height; 1116b0fac498ca4863166252f1268fda83394db54153Fei Jiang VABufferID coded_buf; 1117b0fac498ca4863166252f1268fda83394db54153Fei Jiang} VAEncPictureParameterBufferJPEG; 1118b0fac498ca4863166252f1268fda83394db54153Fei Jiang 1119409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#include <va/va_dec_jpeg.h> 1120b0fac498ca4863166252f1268fda83394db54153Fei Jiang 112186c93d9c46415cf7746351c502a3513f637e77e4root/**************************** 112286c93d9c46415cf7746351c502a3513f637e77e4root * MPEG-2 data structures 112386c93d9c46415cf7746351c502a3513f637e77e4root ****************************/ 112486c93d9c46415cf7746351c502a3513f637e77e4root 112586c93d9c46415cf7746351c502a3513f637e77e4root/* MPEG-2 Picture Parameter Buffer */ 112686c93d9c46415cf7746351c502a3513f637e77e4root/* 112786c93d9c46415cf7746351c502a3513f637e77e4root * For each frame or field, and before any slice data, a single 112886c93d9c46415cf7746351c502a3513f637e77e4root * picture parameter buffer must be send. 112986c93d9c46415cf7746351c502a3513f637e77e4root */ 113086c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAPictureParameterBufferMPEG2 113186c93d9c46415cf7746351c502a3513f637e77e4root{ 113286c93d9c46415cf7746351c502a3513f637e77e4root unsigned short horizontal_size; 113386c93d9c46415cf7746351c502a3513f637e77e4root unsigned short vertical_size; 113486c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceID forward_reference_picture; 113586c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceID backward_reference_picture; 113686c93d9c46415cf7746351c502a3513f637e77e4root /* meanings of the following fields are the same as in the standard */ 113786c93d9c46415cf7746351c502a3513f637e77e4root int picture_coding_type; 113886c93d9c46415cf7746351c502a3513f637e77e4root int f_code; /* pack all four fcode into this */ 113986c93d9c46415cf7746351c502a3513f637e77e4root union { 114086c93d9c46415cf7746351c502a3513f637e77e4root struct { 114186c93d9c46415cf7746351c502a3513f637e77e4root unsigned int intra_dc_precision : 2; 114286c93d9c46415cf7746351c502a3513f637e77e4root unsigned int picture_structure : 2; 114386c93d9c46415cf7746351c502a3513f637e77e4root unsigned int top_field_first : 1; 114486c93d9c46415cf7746351c502a3513f637e77e4root unsigned int frame_pred_frame_dct : 1; 114586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int concealment_motion_vectors : 1; 114686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int q_scale_type : 1; 114786c93d9c46415cf7746351c502a3513f637e77e4root unsigned int intra_vlc_format : 1; 114886c93d9c46415cf7746351c502a3513f637e77e4root unsigned int alternate_scan : 1; 114986c93d9c46415cf7746351c502a3513f637e77e4root unsigned int repeat_first_field : 1; 115086c93d9c46415cf7746351c502a3513f637e77e4root unsigned int progressive_frame : 1; 115186c93d9c46415cf7746351c502a3513f637e77e4root unsigned int is_first_field : 1; /* indicate whether the current field 115286c93d9c46415cf7746351c502a3513f637e77e4root * is the first field for field picture 115386c93d9c46415cf7746351c502a3513f637e77e4root */ 115486c93d9c46415cf7746351c502a3513f637e77e4root } bits; 115586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int value; 115686c93d9c46415cf7746351c502a3513f637e77e4root } picture_coding_extension; 115786c93d9c46415cf7746351c502a3513f637e77e4root} VAPictureParameterBufferMPEG2; 115886c93d9c46415cf7746351c502a3513f637e77e4root 115986c93d9c46415cf7746351c502a3513f637e77e4root/* MPEG-2 Inverse Quantization Matrix Buffer */ 116086c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAIQMatrixBufferMPEG2 116186c93d9c46415cf7746351c502a3513f637e77e4root{ 116286c93d9c46415cf7746351c502a3513f637e77e4root int load_intra_quantiser_matrix; 116386c93d9c46415cf7746351c502a3513f637e77e4root int load_non_intra_quantiser_matrix; 116486c93d9c46415cf7746351c502a3513f637e77e4root int load_chroma_intra_quantiser_matrix; 116586c93d9c46415cf7746351c502a3513f637e77e4root int load_chroma_non_intra_quantiser_matrix; 116686c93d9c46415cf7746351c502a3513f637e77e4root unsigned char intra_quantiser_matrix[64]; 116786c93d9c46415cf7746351c502a3513f637e77e4root unsigned char non_intra_quantiser_matrix[64]; 116886c93d9c46415cf7746351c502a3513f637e77e4root unsigned char chroma_intra_quantiser_matrix[64]; 116986c93d9c46415cf7746351c502a3513f637e77e4root unsigned char chroma_non_intra_quantiser_matrix[64]; 117086c93d9c46415cf7746351c502a3513f637e77e4root} VAIQMatrixBufferMPEG2; 117186c93d9c46415cf7746351c502a3513f637e77e4root 117286c93d9c46415cf7746351c502a3513f637e77e4root/* MPEG-2 Slice Parameter Buffer */ 117386c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VASliceParameterBufferMPEG2 117486c93d9c46415cf7746351c502a3513f637e77e4root{ 117586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int slice_data_size;/* number of bytes in the slice data buffer for this slice */ 117686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int slice_data_offset;/* the offset to the first byte of slice data */ 117786c93d9c46415cf7746351c502a3513f637e77e4root unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ 117886c93d9c46415cf7746351c502a3513f637e77e4root unsigned int macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */ 117986c93d9c46415cf7746351c502a3513f637e77e4root unsigned int slice_horizontal_position; 118086c93d9c46415cf7746351c502a3513f637e77e4root unsigned int slice_vertical_position; 118186c93d9c46415cf7746351c502a3513f637e77e4root int quantiser_scale_code; 118286c93d9c46415cf7746351c502a3513f637e77e4root int intra_slice_flag; 118386c93d9c46415cf7746351c502a3513f637e77e4root} VASliceParameterBufferMPEG2; 118486c93d9c46415cf7746351c502a3513f637e77e4root 118586c93d9c46415cf7746351c502a3513f637e77e4root/* MPEG-2 Macroblock Parameter Buffer */ 118686c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAMacroblockParameterBufferMPEG2 118786c93d9c46415cf7746351c502a3513f637e77e4root{ 118886c93d9c46415cf7746351c502a3513f637e77e4root unsigned short macroblock_address; 118986c93d9c46415cf7746351c502a3513f637e77e4root /* 119086c93d9c46415cf7746351c502a3513f637e77e4root * macroblock_address (in raster scan order) 119186c93d9c46415cf7746351c502a3513f637e77e4root * top-left: 0 119286c93d9c46415cf7746351c502a3513f637e77e4root * bottom-right: picture-height-in-mb*picture-width-in-mb - 1 119386c93d9c46415cf7746351c502a3513f637e77e4root */ 119486c93d9c46415cf7746351c502a3513f637e77e4root unsigned char macroblock_type; /* see definition below */ 119586c93d9c46415cf7746351c502a3513f637e77e4root union { 119686c93d9c46415cf7746351c502a3513f637e77e4root struct { 119786c93d9c46415cf7746351c502a3513f637e77e4root unsigned int frame_motion_type : 2; 119886c93d9c46415cf7746351c502a3513f637e77e4root unsigned int field_motion_type : 2; 119986c93d9c46415cf7746351c502a3513f637e77e4root unsigned int dct_type : 1; 120086c93d9c46415cf7746351c502a3513f637e77e4root } bits; 120186c93d9c46415cf7746351c502a3513f637e77e4root unsigned int value; 120286c93d9c46415cf7746351c502a3513f637e77e4root } macroblock_modes; 120386c93d9c46415cf7746351c502a3513f637e77e4root unsigned char motion_vertical_field_select; 120486c93d9c46415cf7746351c502a3513f637e77e4root /* 120586c93d9c46415cf7746351c502a3513f637e77e4root * motion_vertical_field_select: 120686c93d9c46415cf7746351c502a3513f637e77e4root * see section 6.3.17.2 in the spec 120786c93d9c46415cf7746351c502a3513f637e77e4root * only the lower 4 bits are used 120886c93d9c46415cf7746351c502a3513f637e77e4root * bit 0: first vector forward 120986c93d9c46415cf7746351c502a3513f637e77e4root * bit 1: first vector backward 121086c93d9c46415cf7746351c502a3513f637e77e4root * bit 2: second vector forward 121186c93d9c46415cf7746351c502a3513f637e77e4root * bit 3: second vector backward 121286c93d9c46415cf7746351c502a3513f637e77e4root */ 121386c93d9c46415cf7746351c502a3513f637e77e4root short PMV[2][2][2]; /* see Table 7-7 in the spec */ 121486c93d9c46415cf7746351c502a3513f637e77e4root unsigned short coded_block_pattern; 121586c93d9c46415cf7746351c502a3513f637e77e4root /* 121686c93d9c46415cf7746351c502a3513f637e77e4root * The bitplanes for coded_block_pattern are described 121786c93d9c46415cf7746351c502a3513f637e77e4root * in Figure 6.10-12 in the spec 121886c93d9c46415cf7746351c502a3513f637e77e4root */ 121986c93d9c46415cf7746351c502a3513f637e77e4root 122086c93d9c46415cf7746351c502a3513f637e77e4root /* Number of skipped macroblocks after this macroblock */ 122186c93d9c46415cf7746351c502a3513f637e77e4root unsigned short num_skipped_macroblocks; 122286c93d9c46415cf7746351c502a3513f637e77e4root} VAMacroblockParameterBufferMPEG2; 122386c93d9c46415cf7746351c502a3513f637e77e4root 122486c93d9c46415cf7746351c502a3513f637e77e4root/* 122586c93d9c46415cf7746351c502a3513f637e77e4root * OR'd flags for macroblock_type (section 6.3.17.1 in the spec) 122686c93d9c46415cf7746351c502a3513f637e77e4root */ 122786c93d9c46415cf7746351c502a3513f637e77e4root#define VA_MB_TYPE_MOTION_FORWARD 0x02 122886c93d9c46415cf7746351c502a3513f637e77e4root#define VA_MB_TYPE_MOTION_BACKWARD 0x04 122986c93d9c46415cf7746351c502a3513f637e77e4root#define VA_MB_TYPE_MOTION_PATTERN 0x08 123086c93d9c46415cf7746351c502a3513f637e77e4root#define VA_MB_TYPE_MOTION_INTRA 0x10 123186c93d9c46415cf7746351c502a3513f637e77e4root 123286c93d9c46415cf7746351c502a3513f637e77e4root/* 123386c93d9c46415cf7746351c502a3513f637e77e4root * MPEG-2 Residual Data Buffer 123486c93d9c46415cf7746351c502a3513f637e77e4root * For each macroblock, there wil be 64 shorts (16-bit) in the 123586c93d9c46415cf7746351c502a3513f637e77e4root * residual data buffer 123686c93d9c46415cf7746351c502a3513f637e77e4root */ 123786c93d9c46415cf7746351c502a3513f637e77e4root 123886c93d9c46415cf7746351c502a3513f637e77e4root/**************************** 123986c93d9c46415cf7746351c502a3513f637e77e4root * MPEG-4 Part 2 data structures 124086c93d9c46415cf7746351c502a3513f637e77e4root ****************************/ 124186c93d9c46415cf7746351c502a3513f637e77e4root 124286c93d9c46415cf7746351c502a3513f637e77e4root/* MPEG-4 Picture Parameter Buffer */ 124386c93d9c46415cf7746351c502a3513f637e77e4root/* 124486c93d9c46415cf7746351c502a3513f637e77e4root * For each frame or field, and before any slice data, a single 124586c93d9c46415cf7746351c502a3513f637e77e4root * picture parameter buffer must be send. 124686c93d9c46415cf7746351c502a3513f637e77e4root */ 124786c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAPictureParameterBufferMPEG4 124886c93d9c46415cf7746351c502a3513f637e77e4root{ 124986c93d9c46415cf7746351c502a3513f637e77e4root unsigned short vop_width; 125086c93d9c46415cf7746351c502a3513f637e77e4root unsigned short vop_height; 125186c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceID forward_reference_picture; 125286c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceID backward_reference_picture; 125386c93d9c46415cf7746351c502a3513f637e77e4root union { 125486c93d9c46415cf7746351c502a3513f637e77e4root struct { 125586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int short_video_header : 1; 125686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int chroma_format : 2; 125786c93d9c46415cf7746351c502a3513f637e77e4root unsigned int interlaced : 1; 125886c93d9c46415cf7746351c502a3513f637e77e4root unsigned int obmc_disable : 1; 125986c93d9c46415cf7746351c502a3513f637e77e4root unsigned int sprite_enable : 2; 126086c93d9c46415cf7746351c502a3513f637e77e4root unsigned int sprite_warping_accuracy : 2; 126186c93d9c46415cf7746351c502a3513f637e77e4root unsigned int quant_type : 1; 126286c93d9c46415cf7746351c502a3513f637e77e4root unsigned int quarter_sample : 1; 126386c93d9c46415cf7746351c502a3513f637e77e4root unsigned int data_partitioned : 1; 126486c93d9c46415cf7746351c502a3513f637e77e4root unsigned int reversible_vlc : 1; 126586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int resync_marker_disable : 1; 126686c93d9c46415cf7746351c502a3513f637e77e4root } bits; 126786c93d9c46415cf7746351c502a3513f637e77e4root unsigned int value; 126886c93d9c46415cf7746351c502a3513f637e77e4root } vol_fields; 126986c93d9c46415cf7746351c502a3513f637e77e4root unsigned char no_of_sprite_warping_points; 127086c93d9c46415cf7746351c502a3513f637e77e4root short sprite_trajectory_du[3]; 127186c93d9c46415cf7746351c502a3513f637e77e4root short sprite_trajectory_dv[3]; 127286c93d9c46415cf7746351c502a3513f637e77e4root unsigned char quant_precision; 127386c93d9c46415cf7746351c502a3513f637e77e4root union { 127486c93d9c46415cf7746351c502a3513f637e77e4root struct { 127586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int vop_coding_type : 2; 127686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int backward_reference_vop_coding_type : 2; 127786c93d9c46415cf7746351c502a3513f637e77e4root unsigned int vop_rounding_type : 1; 127886c93d9c46415cf7746351c502a3513f637e77e4root unsigned int intra_dc_vlc_thr : 3; 127986c93d9c46415cf7746351c502a3513f637e77e4root unsigned int top_field_first : 1; 128086c93d9c46415cf7746351c502a3513f637e77e4root unsigned int alternate_vertical_scan_flag : 1; 128186c93d9c46415cf7746351c502a3513f637e77e4root } bits; 128286c93d9c46415cf7746351c502a3513f637e77e4root unsigned int value; 128386c93d9c46415cf7746351c502a3513f637e77e4root } vop_fields; 128486c93d9c46415cf7746351c502a3513f637e77e4root unsigned char vop_fcode_forward; 128586c93d9c46415cf7746351c502a3513f637e77e4root unsigned char vop_fcode_backward; 128686c93d9c46415cf7746351c502a3513f637e77e4root unsigned short vop_time_increment_resolution; 128786c93d9c46415cf7746351c502a3513f637e77e4root /* short header related */ 128886c93d9c46415cf7746351c502a3513f637e77e4root unsigned char num_gobs_in_vop; 128986c93d9c46415cf7746351c502a3513f637e77e4root unsigned char num_macroblocks_in_gob; 129086c93d9c46415cf7746351c502a3513f637e77e4root /* for direct mode prediction */ 129186c93d9c46415cf7746351c502a3513f637e77e4root short TRB; 129286c93d9c46415cf7746351c502a3513f637e77e4root short TRD; 129386c93d9c46415cf7746351c502a3513f637e77e4root} VAPictureParameterBufferMPEG4; 129486c93d9c46415cf7746351c502a3513f637e77e4root 129586c93d9c46415cf7746351c502a3513f637e77e4root/* MPEG-4 Inverse Quantization Matrix Buffer */ 129686c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAIQMatrixBufferMPEG4 129786c93d9c46415cf7746351c502a3513f637e77e4root{ 129886c93d9c46415cf7746351c502a3513f637e77e4root int load_intra_quant_mat; 129986c93d9c46415cf7746351c502a3513f637e77e4root int load_non_intra_quant_mat; 130086c93d9c46415cf7746351c502a3513f637e77e4root unsigned char intra_quant_mat[64]; 130186c93d9c46415cf7746351c502a3513f637e77e4root unsigned char non_intra_quant_mat[64]; 130286c93d9c46415cf7746351c502a3513f637e77e4root} VAIQMatrixBufferMPEG4; 130386c93d9c46415cf7746351c502a3513f637e77e4root 130486c93d9c46415cf7746351c502a3513f637e77e4root/* MPEG-4 Slice Parameter Buffer */ 130586c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VASliceParameterBufferMPEG4 130686c93d9c46415cf7746351c502a3513f637e77e4root{ 130786c93d9c46415cf7746351c502a3513f637e77e4root unsigned int slice_data_size;/* number of bytes in the slice data buffer for this slice */ 130886c93d9c46415cf7746351c502a3513f637e77e4root unsigned int slice_data_offset;/* the offset to the first byte of slice data */ 130986c93d9c46415cf7746351c502a3513f637e77e4root unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ 131086c93d9c46415cf7746351c502a3513f637e77e4root unsigned int macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */ 131186c93d9c46415cf7746351c502a3513f637e77e4root unsigned int macroblock_number; 131286c93d9c46415cf7746351c502a3513f637e77e4root int quant_scale; 131386c93d9c46415cf7746351c502a3513f637e77e4root} VASliceParameterBufferMPEG4; 131486c93d9c46415cf7746351c502a3513f637e77e4root 131586c93d9c46415cf7746351c502a3513f637e77e4root/* 131686c93d9c46415cf7746351c502a3513f637e77e4root VC-1 data structures 131786c93d9c46415cf7746351c502a3513f637e77e4root*/ 131886c93d9c46415cf7746351c502a3513f637e77e4root 131986c93d9c46415cf7746351c502a3513f637e77e4roottypedef enum /* see 7.1.1.32 */ 132086c93d9c46415cf7746351c502a3513f637e77e4root{ 132186c93d9c46415cf7746351c502a3513f637e77e4root VAMvMode1Mv = 0, 132286c93d9c46415cf7746351c502a3513f637e77e4root VAMvMode1MvHalfPel = 1, 132386c93d9c46415cf7746351c502a3513f637e77e4root VAMvMode1MvHalfPelBilinear = 2, 132486c93d9c46415cf7746351c502a3513f637e77e4root VAMvModeMixedMv = 3, 132586c93d9c46415cf7746351c502a3513f637e77e4root VAMvModeIntensityCompensation = 4 132686c93d9c46415cf7746351c502a3513f637e77e4root} VAMvModeVC1; 132786c93d9c46415cf7746351c502a3513f637e77e4root 132886c93d9c46415cf7746351c502a3513f637e77e4root/* VC-1 Picture Parameter Buffer */ 132986c93d9c46415cf7746351c502a3513f637e77e4root/* 133086c93d9c46415cf7746351c502a3513f637e77e4root * For each picture, and before any slice data, a picture parameter 133186c93d9c46415cf7746351c502a3513f637e77e4root * buffer must be send. Multiple picture parameter buffers may be 133286c93d9c46415cf7746351c502a3513f637e77e4root * sent for a single picture. In that case picture parameters will 133386c93d9c46415cf7746351c502a3513f637e77e4root * apply to all slice data that follow it until a new picture 133486c93d9c46415cf7746351c502a3513f637e77e4root * parameter buffer is sent. 133586c93d9c46415cf7746351c502a3513f637e77e4root * 133686c93d9c46415cf7746351c502a3513f637e77e4root * Notes: 133786c93d9c46415cf7746351c502a3513f637e77e4root * pic_quantizer_type should be set to the applicable quantizer 133886c93d9c46415cf7746351c502a3513f637e77e4root * type as defined by QUANTIZER (J.1.19) and either 133986c93d9c46415cf7746351c502a3513f637e77e4root * PQUANTIZER (7.1.1.8) or PQINDEX (7.1.1.6) 134086c93d9c46415cf7746351c502a3513f637e77e4root */ 134186c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAPictureParameterBufferVC1 134286c93d9c46415cf7746351c502a3513f637e77e4root{ 134386c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceID forward_reference_picture; 134486c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceID backward_reference_picture; 134586c93d9c46415cf7746351c502a3513f637e77e4root /* if out-of-loop post-processing is done on the render 134686c93d9c46415cf7746351c502a3513f637e77e4root target, then we need to keep the in-loop decoded 134786c93d9c46415cf7746351c502a3513f637e77e4root picture as a reference picture */ 134886c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceID inloop_decoded_picture; 134986c93d9c46415cf7746351c502a3513f637e77e4root 135086c93d9c46415cf7746351c502a3513f637e77e4root /* sequence layer for AP or meta data for SP and MP */ 135186c93d9c46415cf7746351c502a3513f637e77e4root union { 135286c93d9c46415cf7746351c502a3513f637e77e4root struct { 135386c93d9c46415cf7746351c502a3513f637e77e4root unsigned int pulldown : 1; /* SEQUENCE_LAYER::PULLDOWN */ 135486c93d9c46415cf7746351c502a3513f637e77e4root unsigned int interlace : 1; /* SEQUENCE_LAYER::INTERLACE */ 135586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int tfcntrflag : 1; /* SEQUENCE_LAYER::TFCNTRFLAG */ 135686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int finterpflag : 1; /* SEQUENCE_LAYER::FINTERPFLAG */ 135786c93d9c46415cf7746351c502a3513f637e77e4root unsigned int psf : 1; /* SEQUENCE_LAYER::PSF */ 135886c93d9c46415cf7746351c502a3513f637e77e4root unsigned int multires : 1; /* METADATA::MULTIRES */ 135986c93d9c46415cf7746351c502a3513f637e77e4root unsigned int overlap : 1; /* METADATA::OVERLAP */ 136086c93d9c46415cf7746351c502a3513f637e77e4root unsigned int syncmarker : 1; /* METADATA::SYNCMARKER */ 136186c93d9c46415cf7746351c502a3513f637e77e4root unsigned int rangered : 1; /* METADATA::RANGERED */ 136286c93d9c46415cf7746351c502a3513f637e77e4root unsigned int max_b_frames : 3; /* METADATA::MAXBFRAMES */ 1363cceaa0568f77a7452857559614100b71fb36ee3awangkun unsigned int profile : 2; /* SEQUENCE_LAYER::PROFILE or The MSB of METADATA::PROFILE */ 136486c93d9c46415cf7746351c502a3513f637e77e4root } bits; 136586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int value; 136686c93d9c46415cf7746351c502a3513f637e77e4root } sequence_fields; 136786c93d9c46415cf7746351c502a3513f637e77e4root 136886c93d9c46415cf7746351c502a3513f637e77e4root unsigned short coded_width; /* ENTRY_POINT_LAYER::CODED_WIDTH */ 136986c93d9c46415cf7746351c502a3513f637e77e4root unsigned short coded_height; /* ENTRY_POINT_LAYER::CODED_HEIGHT */ 137086c93d9c46415cf7746351c502a3513f637e77e4root union { 137186c93d9c46415cf7746351c502a3513f637e77e4root struct { 137286c93d9c46415cf7746351c502a3513f637e77e4root unsigned int broken_link : 1; /* ENTRY_POINT_LAYER::BROKEN_LINK */ 137386c93d9c46415cf7746351c502a3513f637e77e4root unsigned int closed_entry : 1; /* ENTRY_POINT_LAYER::CLOSED_ENTRY */ 137486c93d9c46415cf7746351c502a3513f637e77e4root unsigned int panscan_flag : 1; /* ENTRY_POINT_LAYER::PANSCAN_FLAG */ 137586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int loopfilter : 1; /* ENTRY_POINT_LAYER::LOOPFILTER */ 137686c93d9c46415cf7746351c502a3513f637e77e4root } bits; 137786c93d9c46415cf7746351c502a3513f637e77e4root unsigned int value; 137886c93d9c46415cf7746351c502a3513f637e77e4root } entrypoint_fields; 137986c93d9c46415cf7746351c502a3513f637e77e4root unsigned char conditional_overlap_flag; /* ENTRY_POINT_LAYER::CONDOVER */ 138086c93d9c46415cf7746351c502a3513f637e77e4root unsigned char fast_uvmc_flag; /* ENTRY_POINT_LAYER::FASTUVMC */ 138186c93d9c46415cf7746351c502a3513f637e77e4root union { 138286c93d9c46415cf7746351c502a3513f637e77e4root struct { 138386c93d9c46415cf7746351c502a3513f637e77e4root unsigned int luma_flag : 1; /* ENTRY_POINT_LAYER::RANGE_MAPY_FLAG */ 138486c93d9c46415cf7746351c502a3513f637e77e4root unsigned int luma : 3; /* ENTRY_POINT_LAYER::RANGE_MAPY */ 138586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int chroma_flag : 1; /* ENTRY_POINT_LAYER::RANGE_MAPUV_FLAG */ 138686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int chroma : 3; /* ENTRY_POINT_LAYER::RANGE_MAPUV */ 138786c93d9c46415cf7746351c502a3513f637e77e4root } bits; 138886c93d9c46415cf7746351c502a3513f637e77e4root unsigned int value; 138986c93d9c46415cf7746351c502a3513f637e77e4root } range_mapping_fields; 139086c93d9c46415cf7746351c502a3513f637e77e4root 139186c93d9c46415cf7746351c502a3513f637e77e4root unsigned char b_picture_fraction; /* PICTURE_LAYER::BFRACTION */ 139286c93d9c46415cf7746351c502a3513f637e77e4root unsigned char cbp_table; /* PICTURE_LAYER::CBPTAB/ICBPTAB */ 139386c93d9c46415cf7746351c502a3513f637e77e4root unsigned char mb_mode_table; /* PICTURE_LAYER::MBMODETAB */ 139486c93d9c46415cf7746351c502a3513f637e77e4root unsigned char range_reduction_frame;/* PICTURE_LAYER::RANGEREDFRM */ 139586c93d9c46415cf7746351c502a3513f637e77e4root unsigned char rounding_control; /* PICTURE_LAYER::RNDCTRL */ 139686c93d9c46415cf7746351c502a3513f637e77e4root unsigned char post_processing; /* PICTURE_LAYER::POSTPROC */ 139786c93d9c46415cf7746351c502a3513f637e77e4root unsigned char picture_resolution_index; /* PICTURE_LAYER::RESPIC */ 139886c93d9c46415cf7746351c502a3513f637e77e4root unsigned char luma_scale; /* PICTURE_LAYER::LUMSCALE */ 139986c93d9c46415cf7746351c502a3513f637e77e4root unsigned char luma_shift; /* PICTURE_LAYER::LUMSHIFT */ 140086c93d9c46415cf7746351c502a3513f637e77e4root union { 140186c93d9c46415cf7746351c502a3513f637e77e4root struct { 140286c93d9c46415cf7746351c502a3513f637e77e4root unsigned int picture_type : 3; /* PICTURE_LAYER::PTYPE */ 140386c93d9c46415cf7746351c502a3513f637e77e4root unsigned int frame_coding_mode : 3; /* PICTURE_LAYER::FCM */ 140486c93d9c46415cf7746351c502a3513f637e77e4root unsigned int top_field_first : 1; /* PICTURE_LAYER::TFF */ 140586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int is_first_field : 1; /* set to 1 if it is the first field */ 140686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int intensity_compensation : 1; /* PICTURE_LAYER::INTCOMP */ 140786c93d9c46415cf7746351c502a3513f637e77e4root } bits; 140886c93d9c46415cf7746351c502a3513f637e77e4root unsigned int value; 140986c93d9c46415cf7746351c502a3513f637e77e4root } picture_fields; 141086c93d9c46415cf7746351c502a3513f637e77e4root union { 141186c93d9c46415cf7746351c502a3513f637e77e4root struct { 141286c93d9c46415cf7746351c502a3513f637e77e4root unsigned int mv_type_mb : 1; /* PICTURE::MVTYPEMB */ 141386c93d9c46415cf7746351c502a3513f637e77e4root unsigned int direct_mb : 1; /* PICTURE::DIRECTMB */ 141486c93d9c46415cf7746351c502a3513f637e77e4root unsigned int skip_mb : 1; /* PICTURE::SKIPMB */ 141586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int field_tx : 1; /* PICTURE::FIELDTX */ 141686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int forward_mb : 1; /* PICTURE::FORWARDMB */ 141786c93d9c46415cf7746351c502a3513f637e77e4root unsigned int ac_pred : 1; /* PICTURE::ACPRED */ 141886c93d9c46415cf7746351c502a3513f637e77e4root unsigned int overflags : 1; /* PICTURE::OVERFLAGS */ 141986c93d9c46415cf7746351c502a3513f637e77e4root } flags; 142086c93d9c46415cf7746351c502a3513f637e77e4root unsigned int value; 142186c93d9c46415cf7746351c502a3513f637e77e4root } raw_coding; 142286c93d9c46415cf7746351c502a3513f637e77e4root union { 142386c93d9c46415cf7746351c502a3513f637e77e4root struct { 142486c93d9c46415cf7746351c502a3513f637e77e4root unsigned int bp_mv_type_mb : 1; /* PICTURE::MVTYPEMB */ 142586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int bp_direct_mb : 1; /* PICTURE::DIRECTMB */ 142686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int bp_skip_mb : 1; /* PICTURE::SKIPMB */ 142786c93d9c46415cf7746351c502a3513f637e77e4root unsigned int bp_field_tx : 1; /* PICTURE::FIELDTX */ 142886c93d9c46415cf7746351c502a3513f637e77e4root unsigned int bp_forward_mb : 1; /* PICTURE::FORWARDMB */ 142986c93d9c46415cf7746351c502a3513f637e77e4root unsigned int bp_ac_pred : 1; /* PICTURE::ACPRED */ 143086c93d9c46415cf7746351c502a3513f637e77e4root unsigned int bp_overflags : 1; /* PICTURE::OVERFLAGS */ 143186c93d9c46415cf7746351c502a3513f637e77e4root } flags; 143286c93d9c46415cf7746351c502a3513f637e77e4root unsigned int value; 143386c93d9c46415cf7746351c502a3513f637e77e4root } bitplane_present; /* signal what bitplane is being passed via the bitplane buffer */ 143486c93d9c46415cf7746351c502a3513f637e77e4root union { 143586c93d9c46415cf7746351c502a3513f637e77e4root struct { 143686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int reference_distance_flag : 1;/* PICTURE_LAYER::REFDIST_FLAG */ 143786c93d9c46415cf7746351c502a3513f637e77e4root unsigned int reference_distance : 5;/* PICTURE_LAYER::REFDIST */ 143886c93d9c46415cf7746351c502a3513f637e77e4root unsigned int num_reference_pictures: 1;/* PICTURE_LAYER::NUMREF */ 143986c93d9c46415cf7746351c502a3513f637e77e4root unsigned int reference_field_pic_indicator : 1;/* PICTURE_LAYER::REFFIELD */ 144086c93d9c46415cf7746351c502a3513f637e77e4root } bits; 144186c93d9c46415cf7746351c502a3513f637e77e4root unsigned int value; 144286c93d9c46415cf7746351c502a3513f637e77e4root } reference_fields; 144386c93d9c46415cf7746351c502a3513f637e77e4root union { 144486c93d9c46415cf7746351c502a3513f637e77e4root struct { 144586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int mv_mode : 3; /* PICTURE_LAYER::MVMODE */ 144686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int mv_mode2 : 3; /* PICTURE_LAYER::MVMODE2 */ 144786c93d9c46415cf7746351c502a3513f637e77e4root unsigned int mv_table : 3; /* PICTURE_LAYER::MVTAB/IMVTAB */ 144886c93d9c46415cf7746351c502a3513f637e77e4root unsigned int two_mv_block_pattern_table: 2; /* PICTURE_LAYER::2MVBPTAB */ 144986c93d9c46415cf7746351c502a3513f637e77e4root unsigned int four_mv_switch : 1; /* PICTURE_LAYER::4MVSWITCH */ 145086c93d9c46415cf7746351c502a3513f637e77e4root unsigned int four_mv_block_pattern_table : 2; /* PICTURE_LAYER::4MVBPTAB */ 145186c93d9c46415cf7746351c502a3513f637e77e4root unsigned int extended_mv_flag : 1; /* ENTRY_POINT_LAYER::EXTENDED_MV */ 145286c93d9c46415cf7746351c502a3513f637e77e4root unsigned int extended_mv_range : 2; /* PICTURE_LAYER::MVRANGE */ 145386c93d9c46415cf7746351c502a3513f637e77e4root unsigned int extended_dmv_flag : 1; /* ENTRY_POINT_LAYER::EXTENDED_DMV */ 145486c93d9c46415cf7746351c502a3513f637e77e4root unsigned int extended_dmv_range : 2; /* PICTURE_LAYER::DMVRANGE */ 145586c93d9c46415cf7746351c502a3513f637e77e4root } bits; 145686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int value; 145786c93d9c46415cf7746351c502a3513f637e77e4root } mv_fields; 145886c93d9c46415cf7746351c502a3513f637e77e4root union { 145986c93d9c46415cf7746351c502a3513f637e77e4root struct { 146086c93d9c46415cf7746351c502a3513f637e77e4root unsigned int dquant : 2; /* ENTRY_POINT_LAYER::DQUANT */ 146186c93d9c46415cf7746351c502a3513f637e77e4root unsigned int quantizer : 2; /* ENTRY_POINT_LAYER::QUANTIZER */ 146286c93d9c46415cf7746351c502a3513f637e77e4root unsigned int half_qp : 1; /* PICTURE_LAYER::HALFQP */ 146386c93d9c46415cf7746351c502a3513f637e77e4root unsigned int pic_quantizer_scale : 5;/* PICTURE_LAYER::PQUANT */ 146486c93d9c46415cf7746351c502a3513f637e77e4root unsigned int pic_quantizer_type : 1;/* PICTURE_LAYER::PQUANTIZER */ 146586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int dq_frame : 1; /* VOPDQUANT::DQUANTFRM */ 146686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int dq_profile : 2; /* VOPDQUANT::DQPROFILE */ 146786c93d9c46415cf7746351c502a3513f637e77e4root unsigned int dq_sb_edge : 2; /* VOPDQUANT::DQSBEDGE */ 146886c93d9c46415cf7746351c502a3513f637e77e4root unsigned int dq_db_edge : 2; /* VOPDQUANT::DQDBEDGE */ 146986c93d9c46415cf7746351c502a3513f637e77e4root unsigned int dq_binary_level : 1; /* VOPDQUANT::DQBILEVEL */ 147086c93d9c46415cf7746351c502a3513f637e77e4root unsigned int alt_pic_quantizer : 5;/* VOPDQUANT::ALTPQUANT */ 147186c93d9c46415cf7746351c502a3513f637e77e4root } bits; 147286c93d9c46415cf7746351c502a3513f637e77e4root unsigned int value; 147386c93d9c46415cf7746351c502a3513f637e77e4root } pic_quantizer_fields; 147486c93d9c46415cf7746351c502a3513f637e77e4root union { 147586c93d9c46415cf7746351c502a3513f637e77e4root struct { 147686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int variable_sized_transform_flag : 1;/* ENTRY_POINT_LAYER::VSTRANSFORM */ 147786c93d9c46415cf7746351c502a3513f637e77e4root unsigned int mb_level_transform_type_flag : 1;/* PICTURE_LAYER::TTMBF */ 147886c93d9c46415cf7746351c502a3513f637e77e4root unsigned int frame_level_transform_type : 2;/* PICTURE_LAYER::TTFRM */ 147986c93d9c46415cf7746351c502a3513f637e77e4root unsigned int transform_ac_codingset_idx1 : 2;/* PICTURE_LAYER::TRANSACFRM */ 148086c93d9c46415cf7746351c502a3513f637e77e4root unsigned int transform_ac_codingset_idx2 : 2;/* PICTURE_LAYER::TRANSACFRM2 */ 148186c93d9c46415cf7746351c502a3513f637e77e4root unsigned int intra_transform_dc_table : 1;/* PICTURE_LAYER::TRANSDCTAB */ 148286c93d9c46415cf7746351c502a3513f637e77e4root } bits; 148386c93d9c46415cf7746351c502a3513f637e77e4root unsigned int value; 148486c93d9c46415cf7746351c502a3513f637e77e4root } transform_fields; 1485409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan unsigned char luma_scale2; /* PICTURE_LAYER::LUMSCALE2 */ 1486409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan unsigned char luma_shift2; /* PICTURE_LAYER::LUMSHIFT2 */ 148786c93d9c46415cf7746351c502a3513f637e77e4root} VAPictureParameterBufferVC1; 148886c93d9c46415cf7746351c502a3513f637e77e4root 148986c93d9c46415cf7746351c502a3513f637e77e4root/* VC-1 Bitplane Buffer 149086c93d9c46415cf7746351c502a3513f637e77e4rootThere will be at most three bitplanes coded in any picture header. To send 149186c93d9c46415cf7746351c502a3513f637e77e4rootthe bitplane data more efficiently, each byte is divided in two nibbles, with 149286c93d9c46415cf7746351c502a3513f637e77e4rooteach nibble carrying three bitplanes for one macroblock. The following table 149386c93d9c46415cf7746351c502a3513f637e77e4rootshows the bitplane data arrangement within each nibble based on the picture 149486c93d9c46415cf7746351c502a3513f637e77e4roottype. 149586c93d9c46415cf7746351c502a3513f637e77e4root 149686c93d9c46415cf7746351c502a3513f637e77e4rootPicture Type Bit3 Bit2 Bit1 Bit0 149786c93d9c46415cf7746351c502a3513f637e77e4rootI or BI OVERFLAGS ACPRED FIELDTX 149886c93d9c46415cf7746351c502a3513f637e77e4rootP MYTYPEMB SKIPMB DIRECTMB 149986c93d9c46415cf7746351c502a3513f637e77e4rootB FORWARDMB SKIPMB DIRECTMB 150086c93d9c46415cf7746351c502a3513f637e77e4root 150186c93d9c46415cf7746351c502a3513f637e77e4rootWithin each byte, the lower nibble is for the first MB and the upper nibble is 150286c93d9c46415cf7746351c502a3513f637e77e4rootfor the second MB. E.g. the lower nibble of the first byte in the bitplane 150386c93d9c46415cf7746351c502a3513f637e77e4rootbuffer is for Macroblock #1 and the upper nibble of the first byte is for 150486c93d9c46415cf7746351c502a3513f637e77e4rootMacroblock #2 in the first row. 150586c93d9c46415cf7746351c502a3513f637e77e4root*/ 150686c93d9c46415cf7746351c502a3513f637e77e4root 150786c93d9c46415cf7746351c502a3513f637e77e4root/* VC-1 Slice Parameter Buffer */ 150886c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VASliceParameterBufferVC1 150986c93d9c46415cf7746351c502a3513f637e77e4root{ 151086c93d9c46415cf7746351c502a3513f637e77e4root unsigned int slice_data_size;/* number of bytes in the slice data buffer for this slice */ 151186c93d9c46415cf7746351c502a3513f637e77e4root unsigned int slice_data_offset;/* the offset to the first byte of slice data */ 151286c93d9c46415cf7746351c502a3513f637e77e4root unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ 151386c93d9c46415cf7746351c502a3513f637e77e4root unsigned int macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */ 151486c93d9c46415cf7746351c502a3513f637e77e4root unsigned int slice_vertical_position; 151586c93d9c46415cf7746351c502a3513f637e77e4root} VASliceParameterBufferVC1; 151686c93d9c46415cf7746351c502a3513f637e77e4root 151786c93d9c46415cf7746351c502a3513f637e77e4root/* VC-1 Slice Data Buffer */ 151886c93d9c46415cf7746351c502a3513f637e77e4root/* 151986c93d9c46415cf7746351c502a3513f637e77e4rootThis is simplely a buffer containing raw bit-stream bytes 152086c93d9c46415cf7746351c502a3513f637e77e4root*/ 152186c93d9c46415cf7746351c502a3513f637e77e4root 152286c93d9c46415cf7746351c502a3513f637e77e4root/**************************** 152386c93d9c46415cf7746351c502a3513f637e77e4root * H.264/AVC data structures 152486c93d9c46415cf7746351c502a3513f637e77e4root ****************************/ 152586c93d9c46415cf7746351c502a3513f637e77e4root 152686c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAPictureH264 152786c93d9c46415cf7746351c502a3513f637e77e4root{ 152886c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceID picture_id; 1529097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan /* 1530097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan * frame_idx is long_term_frame_idx for long term reference picture, 1531097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan * and frame_num for short term reference picture. 1532097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan */ 153386c93d9c46415cf7746351c502a3513f637e77e4root unsigned int frame_idx; 1534097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan /* 1535097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan * see flags below. 1536097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan */ 153786c93d9c46415cf7746351c502a3513f637e77e4root unsigned int flags; 1538d1cdf8cbd6c1a41055bba25a075be6f9bbc59eb1ywan signed int TopFieldOrderCnt; 1539d1cdf8cbd6c1a41055bba25a075be6f9bbc59eb1ywan signed int BottomFieldOrderCnt; 154086c93d9c46415cf7746351c502a3513f637e77e4root} VAPictureH264; 154186c93d9c46415cf7746351c502a3513f637e77e4root/* flags in VAPictureH264 could be OR of the following */ 154286c93d9c46415cf7746351c502a3513f637e77e4root#define VA_PICTURE_H264_INVALID 0x00000001 154386c93d9c46415cf7746351c502a3513f637e77e4root#define VA_PICTURE_H264_TOP_FIELD 0x00000002 154486c93d9c46415cf7746351c502a3513f637e77e4root#define VA_PICTURE_H264_BOTTOM_FIELD 0x00000004 154586c93d9c46415cf7746351c502a3513f637e77e4root#define VA_PICTURE_H264_SHORT_TERM_REFERENCE 0x00000008 154686c93d9c46415cf7746351c502a3513f637e77e4root#define VA_PICTURE_H264_LONG_TERM_REFERENCE 0x00000010 1547097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan#define VA_PICTURE_H264_NON_EXISTING 0x00000020 154886c93d9c46415cf7746351c502a3513f637e77e4root 154986c93d9c46415cf7746351c502a3513f637e77e4root/* H.264 Picture Parameter Buffer */ 155086c93d9c46415cf7746351c502a3513f637e77e4root/* 155186c93d9c46415cf7746351c502a3513f637e77e4root * For each picture, and before any slice data, a single 155286c93d9c46415cf7746351c502a3513f637e77e4root * picture parameter buffer must be send. 155386c93d9c46415cf7746351c502a3513f637e77e4root */ 155486c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAPictureParameterBufferH264 155586c93d9c46415cf7746351c502a3513f637e77e4root{ 155686c93d9c46415cf7746351c502a3513f637e77e4root VAPictureH264 CurrPic; 155786c93d9c46415cf7746351c502a3513f637e77e4root VAPictureH264 ReferenceFrames[16]; /* in DPB */ 155886c93d9c46415cf7746351c502a3513f637e77e4root unsigned short picture_width_in_mbs_minus1; 155986c93d9c46415cf7746351c502a3513f637e77e4root unsigned short picture_height_in_mbs_minus1; 156086c93d9c46415cf7746351c502a3513f637e77e4root unsigned char bit_depth_luma_minus8; 156186c93d9c46415cf7746351c502a3513f637e77e4root unsigned char bit_depth_chroma_minus8; 156286c93d9c46415cf7746351c502a3513f637e77e4root unsigned char num_ref_frames; 156386c93d9c46415cf7746351c502a3513f637e77e4root union { 156486c93d9c46415cf7746351c502a3513f637e77e4root struct { 156586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int chroma_format_idc : 2; 156686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int residual_colour_transform_flag : 1; 156786c93d9c46415cf7746351c502a3513f637e77e4root unsigned int gaps_in_frame_num_value_allowed_flag : 1; 156886c93d9c46415cf7746351c502a3513f637e77e4root unsigned int frame_mbs_only_flag : 1; 156986c93d9c46415cf7746351c502a3513f637e77e4root unsigned int mb_adaptive_frame_field_flag : 1; 157086c93d9c46415cf7746351c502a3513f637e77e4root unsigned int direct_8x8_inference_flag : 1; 157186c93d9c46415cf7746351c502a3513f637e77e4root unsigned int MinLumaBiPredSize8x8 : 1; /* see A.3.3.2 */ 157286c93d9c46415cf7746351c502a3513f637e77e4root unsigned int log2_max_frame_num_minus4 : 4; 157386c93d9c46415cf7746351c502a3513f637e77e4root unsigned int pic_order_cnt_type : 2; 157486c93d9c46415cf7746351c502a3513f637e77e4root unsigned int log2_max_pic_order_cnt_lsb_minus4 : 4; 157586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int delta_pic_order_always_zero_flag : 1; 157686c93d9c46415cf7746351c502a3513f637e77e4root } bits; 157786c93d9c46415cf7746351c502a3513f637e77e4root unsigned int value; 157886c93d9c46415cf7746351c502a3513f637e77e4root } seq_fields; 157986c93d9c46415cf7746351c502a3513f637e77e4root unsigned char num_slice_groups_minus1; 158086c93d9c46415cf7746351c502a3513f637e77e4root unsigned char slice_group_map_type; 158186c93d9c46415cf7746351c502a3513f637e77e4root unsigned short slice_group_change_rate_minus1; 158286c93d9c46415cf7746351c502a3513f637e77e4root signed char pic_init_qp_minus26; 158386c93d9c46415cf7746351c502a3513f637e77e4root signed char pic_init_qs_minus26; 158486c93d9c46415cf7746351c502a3513f637e77e4root signed char chroma_qp_index_offset; 158586c93d9c46415cf7746351c502a3513f637e77e4root signed char second_chroma_qp_index_offset; 158686c93d9c46415cf7746351c502a3513f637e77e4root union { 158786c93d9c46415cf7746351c502a3513f637e77e4root struct { 158886c93d9c46415cf7746351c502a3513f637e77e4root unsigned int entropy_coding_mode_flag : 1; 158986c93d9c46415cf7746351c502a3513f637e77e4root unsigned int weighted_pred_flag : 1; 159086c93d9c46415cf7746351c502a3513f637e77e4root unsigned int weighted_bipred_idc : 2; 159186c93d9c46415cf7746351c502a3513f637e77e4root unsigned int transform_8x8_mode_flag : 1; 159286c93d9c46415cf7746351c502a3513f637e77e4root unsigned int field_pic_flag : 1; 159386c93d9c46415cf7746351c502a3513f637e77e4root unsigned int constrained_intra_pred_flag : 1; 159486c93d9c46415cf7746351c502a3513f637e77e4root unsigned int pic_order_present_flag : 1; 159586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int deblocking_filter_control_present_flag : 1; 159686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int redundant_pic_cnt_present_flag : 1; 159786c93d9c46415cf7746351c502a3513f637e77e4root unsigned int reference_pic_flag : 1; /* nal_ref_idc != 0 */ 159886c93d9c46415cf7746351c502a3513f637e77e4root } bits; 159986c93d9c46415cf7746351c502a3513f637e77e4root unsigned int value; 160086c93d9c46415cf7746351c502a3513f637e77e4root } pic_fields; 160186c93d9c46415cf7746351c502a3513f637e77e4root unsigned short frame_num; 1602097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan unsigned char num_ref_idx_l0_default_active_minus1; 1603097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan unsigned char num_ref_idx_l1_default_active_minus1; 160486c93d9c46415cf7746351c502a3513f637e77e4root} VAPictureParameterBufferH264; 160586c93d9c46415cf7746351c502a3513f637e77e4root 160686c93d9c46415cf7746351c502a3513f637e77e4root/* H.264 Inverse Quantization Matrix Buffer */ 160786c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAIQMatrixBufferH264 160886c93d9c46415cf7746351c502a3513f637e77e4root{ 160986c93d9c46415cf7746351c502a3513f637e77e4root unsigned char ScalingList4x4[6][16]; 161086c93d9c46415cf7746351c502a3513f637e77e4root unsigned char ScalingList8x8[2][64]; 161186c93d9c46415cf7746351c502a3513f637e77e4root} VAIQMatrixBufferH264; 161286c93d9c46415cf7746351c502a3513f637e77e4root 161386c93d9c46415cf7746351c502a3513f637e77e4root/* 161486c93d9c46415cf7746351c502a3513f637e77e4root * H.264 Slice Group Map Buffer 161586c93d9c46415cf7746351c502a3513f637e77e4root * When VAPictureParameterBufferH264::num_slice_group_minus1 is not equal to 0, 161686c93d9c46415cf7746351c502a3513f637e77e4root * A slice group map buffer should be sent for each picture if required. The buffer 161786c93d9c46415cf7746351c502a3513f637e77e4root * is sent only when there is a change in the mapping values. 161886c93d9c46415cf7746351c502a3513f637e77e4root * The slice group map buffer map "map units" to slice groups as specified in 161986c93d9c46415cf7746351c502a3513f637e77e4root * section 8.2.2 of the H.264 spec. The buffer will contain one byte for each macroblock 162086c93d9c46415cf7746351c502a3513f637e77e4root * in raster scan order 162186c93d9c46415cf7746351c502a3513f637e77e4root */ 162286c93d9c46415cf7746351c502a3513f637e77e4root 1623097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan/* 1624097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan * H.264 Slice Parameter Buffer for base mode decoding 1625097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan */ 1626097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuantypedef struct _VASliceParameterBufferBaseH264 1627097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan{ 1628097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan unsigned int slice_data_size;/* number of bytes in the slice data buffer for this slice */ 1629097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan /** \brief Byte offset to the NAL Header Unit for this slice. */ 1630097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan unsigned int slice_data_offset; 1631097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ 1632097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan} VASliceParameterBufferH264Base; 1633097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan 1634097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan/* 1635097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan * H.264 Slice Parameter Buffer for normal mode decoding 1636097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan */ 163786c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VASliceParameterBufferH264 163886c93d9c46415cf7746351c502a3513f637e77e4root{ 163986c93d9c46415cf7746351c502a3513f637e77e4root unsigned int slice_data_size;/* number of bytes in the slice data buffer for this slice */ 16404b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Byte offset to the NAL Header Unit for this slice. */ 16414b672db6ee89c9846451bbab23cf18e93c4260b2hding unsigned int slice_data_offset; 164286c93d9c46415cf7746351c502a3513f637e77e4root unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ 16434b672db6ee89c9846451bbab23cf18e93c4260b2hding /** 16444b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief Bit offset from NAL Header Unit to the begining of slice_data(). 16454b672db6ee89c9846451bbab23cf18e93c4260b2hding * 16464b672db6ee89c9846451bbab23cf18e93c4260b2hding * This bit offset is relative to and includes the NAL unit byte 16474b672db6ee89c9846451bbab23cf18e93c4260b2hding * and represents the number of bits parsed in the slice_header() 16484b672db6ee89c9846451bbab23cf18e93c4260b2hding * after the removal of any emulation prevention bytes in 16494b672db6ee89c9846451bbab23cf18e93c4260b2hding * there. However, the slice data buffer passed to the hardware is 16504b672db6ee89c9846451bbab23cf18e93c4260b2hding * the original bitstream, thus including any emulation prevention 16514b672db6ee89c9846451bbab23cf18e93c4260b2hding * bytes. 16524b672db6ee89c9846451bbab23cf18e93c4260b2hding */ 16534b672db6ee89c9846451bbab23cf18e93c4260b2hding unsigned short slice_data_bit_offset; 165486c93d9c46415cf7746351c502a3513f637e77e4root unsigned short first_mb_in_slice; 165586c93d9c46415cf7746351c502a3513f637e77e4root unsigned char slice_type; 165686c93d9c46415cf7746351c502a3513f637e77e4root unsigned char direct_spatial_mv_pred_flag; 165786c93d9c46415cf7746351c502a3513f637e77e4root unsigned char num_ref_idx_l0_active_minus1; 165886c93d9c46415cf7746351c502a3513f637e77e4root unsigned char num_ref_idx_l1_active_minus1; 165986c93d9c46415cf7746351c502a3513f637e77e4root unsigned char cabac_init_idc; 166086c93d9c46415cf7746351c502a3513f637e77e4root char slice_qp_delta; 166186c93d9c46415cf7746351c502a3513f637e77e4root unsigned char disable_deblocking_filter_idc; 166286c93d9c46415cf7746351c502a3513f637e77e4root char slice_alpha_c0_offset_div2; 166386c93d9c46415cf7746351c502a3513f637e77e4root char slice_beta_offset_div2; 166486c93d9c46415cf7746351c502a3513f637e77e4root VAPictureH264 RefPicList0[32]; /* See 8.2.4.2 */ 166586c93d9c46415cf7746351c502a3513f637e77e4root VAPictureH264 RefPicList1[32]; /* See 8.2.4.2 */ 166686c93d9c46415cf7746351c502a3513f637e77e4root unsigned char luma_log2_weight_denom; 166786c93d9c46415cf7746351c502a3513f637e77e4root unsigned char chroma_log2_weight_denom; 166886c93d9c46415cf7746351c502a3513f637e77e4root unsigned char luma_weight_l0_flag; 166986c93d9c46415cf7746351c502a3513f637e77e4root short luma_weight_l0[32]; 167086c93d9c46415cf7746351c502a3513f637e77e4root short luma_offset_l0[32]; 167186c93d9c46415cf7746351c502a3513f637e77e4root unsigned char chroma_weight_l0_flag; 167286c93d9c46415cf7746351c502a3513f637e77e4root short chroma_weight_l0[32][2]; 167386c93d9c46415cf7746351c502a3513f637e77e4root short chroma_offset_l0[32][2]; 167486c93d9c46415cf7746351c502a3513f637e77e4root unsigned char luma_weight_l1_flag; 167586c93d9c46415cf7746351c502a3513f637e77e4root short luma_weight_l1[32]; 167686c93d9c46415cf7746351c502a3513f637e77e4root short luma_offset_l1[32]; 167786c93d9c46415cf7746351c502a3513f637e77e4root unsigned char chroma_weight_l1_flag; 167886c93d9c46415cf7746351c502a3513f637e77e4root short chroma_weight_l1[32][2]; 167986c93d9c46415cf7746351c502a3513f637e77e4root short chroma_offset_l1[32][2]; 168086c93d9c46415cf7746351c502a3513f637e77e4root} VASliceParameterBufferH264; 168186c93d9c46415cf7746351c502a3513f637e77e4root 168286c93d9c46415cf7746351c502a3513f637e77e4root/**************************** 168386c93d9c46415cf7746351c502a3513f637e77e4root * Common encode data structures 168486c93d9c46415cf7746351c502a3513f637e77e4root ****************************/ 168586c93d9c46415cf7746351c502a3513f637e77e4roottypedef enum 168686c93d9c46415cf7746351c502a3513f637e77e4root{ 168786c93d9c46415cf7746351c502a3513f637e77e4root VAEncPictureTypeIntra = 0, 168886c93d9c46415cf7746351c502a3513f637e77e4root VAEncPictureTypePredictive = 1, 168986c93d9c46415cf7746351c502a3513f637e77e4root VAEncPictureTypeBidirectional = 2, 169086c93d9c46415cf7746351c502a3513f637e77e4root} VAEncPictureType; 169186c93d9c46415cf7746351c502a3513f637e77e4root 169286c93d9c46415cf7746351c502a3513f637e77e4root/* Encode Slice Parameter Buffer */ 169386c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAEncSliceParameterBuffer 169486c93d9c46415cf7746351c502a3513f637e77e4root{ 169586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int start_row_number; /* starting MB row number for this slice */ 169686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int slice_height; /* slice height measured in MB */ 169786c93d9c46415cf7746351c502a3513f637e77e4root union { 169886c93d9c46415cf7746351c502a3513f637e77e4root struct { 169986c93d9c46415cf7746351c502a3513f637e77e4root unsigned int is_intra : 1; 170086c93d9c46415cf7746351c502a3513f637e77e4root unsigned int disable_deblocking_filter_idc : 2; 1701cceaa0568f77a7452857559614100b71fb36ee3awangkun unsigned int uses_long_term_ref :1; 1702cceaa0568f77a7452857559614100b71fb36ee3awangkun unsigned int is_long_term_ref :1; 170386c93d9c46415cf7746351c502a3513f637e77e4root } bits; 170486c93d9c46415cf7746351c502a3513f637e77e4root unsigned int value; 170586c93d9c46415cf7746351c502a3513f637e77e4root } slice_flags; 170686c93d9c46415cf7746351c502a3513f637e77e4root} VAEncSliceParameterBuffer; 170786c93d9c46415cf7746351c502a3513f637e77e4root 1708409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan 170986c93d9c46415cf7746351c502a3513f637e77e4root/**************************** 171086c93d9c46415cf7746351c502a3513f637e77e4root * H.263 specific encode data structures 171186c93d9c46415cf7746351c502a3513f637e77e4root ****************************/ 171286c93d9c46415cf7746351c502a3513f637e77e4root 171386c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAEncSequenceParameterBufferH263 171486c93d9c46415cf7746351c502a3513f637e77e4root{ 171586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int intra_period; 171686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int bits_per_second; 171786c93d9c46415cf7746351c502a3513f637e77e4root unsigned int frame_rate; 171886c93d9c46415cf7746351c502a3513f637e77e4root unsigned int initial_qp; 171986c93d9c46415cf7746351c502a3513f637e77e4root unsigned int min_qp; 172086c93d9c46415cf7746351c502a3513f637e77e4root} VAEncSequenceParameterBufferH263; 172186c93d9c46415cf7746351c502a3513f637e77e4root 172286c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAEncPictureParameterBufferH263 172386c93d9c46415cf7746351c502a3513f637e77e4root{ 172486c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceID reference_picture; 172586c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceID reconstructed_picture; 172686c93d9c46415cf7746351c502a3513f637e77e4root VABufferID coded_buf; 172786c93d9c46415cf7746351c502a3513f637e77e4root unsigned short picture_width; 172886c93d9c46415cf7746351c502a3513f637e77e4root unsigned short picture_height; 172986c93d9c46415cf7746351c502a3513f637e77e4root VAEncPictureType picture_type; 173086c93d9c46415cf7746351c502a3513f637e77e4root} VAEncPictureParameterBufferH263; 173186c93d9c46415cf7746351c502a3513f637e77e4root 173286c93d9c46415cf7746351c502a3513f637e77e4root/**************************** 173386c93d9c46415cf7746351c502a3513f637e77e4root * MPEG-4 specific encode data structures 173486c93d9c46415cf7746351c502a3513f637e77e4root ****************************/ 173586c93d9c46415cf7746351c502a3513f637e77e4root 173686c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAEncSequenceParameterBufferMPEG4 173786c93d9c46415cf7746351c502a3513f637e77e4root{ 173886c93d9c46415cf7746351c502a3513f637e77e4root unsigned char profile_and_level_indication; 173986c93d9c46415cf7746351c502a3513f637e77e4root unsigned int intra_period; 174086c93d9c46415cf7746351c502a3513f637e77e4root unsigned int video_object_layer_width; 174186c93d9c46415cf7746351c502a3513f637e77e4root unsigned int video_object_layer_height; 174286c93d9c46415cf7746351c502a3513f637e77e4root unsigned int vop_time_increment_resolution; 174386c93d9c46415cf7746351c502a3513f637e77e4root unsigned int fixed_vop_rate; 174486c93d9c46415cf7746351c502a3513f637e77e4root unsigned int fixed_vop_time_increment; 174586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int bits_per_second; 174686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int frame_rate; 174786c93d9c46415cf7746351c502a3513f637e77e4root unsigned int initial_qp; 174886c93d9c46415cf7746351c502a3513f637e77e4root unsigned int min_qp; 174986c93d9c46415cf7746351c502a3513f637e77e4root} VAEncSequenceParameterBufferMPEG4; 175086c93d9c46415cf7746351c502a3513f637e77e4root 175186c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAEncPictureParameterBufferMPEG4 175286c93d9c46415cf7746351c502a3513f637e77e4root{ 175386c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceID reference_picture; 175486c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceID reconstructed_picture; 175586c93d9c46415cf7746351c502a3513f637e77e4root VABufferID coded_buf; 175686c93d9c46415cf7746351c502a3513f637e77e4root unsigned short picture_width; 175786c93d9c46415cf7746351c502a3513f637e77e4root unsigned short picture_height; 175886c93d9c46415cf7746351c502a3513f637e77e4root unsigned int modulo_time_base; /* number of 1s */ 175986c93d9c46415cf7746351c502a3513f637e77e4root unsigned int vop_time_increment; 176086c93d9c46415cf7746351c502a3513f637e77e4root VAEncPictureType picture_type; 176186c93d9c46415cf7746351c502a3513f637e77e4root} VAEncPictureParameterBufferMPEG4; 176286c93d9c46415cf7746351c502a3513f637e77e4root 176386c93d9c46415cf7746351c502a3513f637e77e4root 176486c93d9c46415cf7746351c502a3513f637e77e4root 176586c93d9c46415cf7746351c502a3513f637e77e4root/* Buffer functions */ 176686c93d9c46415cf7746351c502a3513f637e77e4root 176786c93d9c46415cf7746351c502a3513f637e77e4root/* 176886c93d9c46415cf7746351c502a3513f637e77e4root * Creates a buffer for "num_elements" elements of "size" bytes and 176986c93d9c46415cf7746351c502a3513f637e77e4root * initalize with "data". 177086c93d9c46415cf7746351c502a3513f637e77e4root * if "data" is null, then the contents of the buffer data store 177186c93d9c46415cf7746351c502a3513f637e77e4root * are undefined. 177286c93d9c46415cf7746351c502a3513f637e77e4root * Basically there are two ways to get buffer data to the server side. One is 177386c93d9c46415cf7746351c502a3513f637e77e4root * to call vaCreateBuffer() with a non-null "data", which results the data being 177486c93d9c46415cf7746351c502a3513f637e77e4root * copied to the data store on the server side. A different method that 177586c93d9c46415cf7746351c502a3513f637e77e4root * eliminates this copy is to pass null as "data" when calling vaCreateBuffer(), 177686c93d9c46415cf7746351c502a3513f637e77e4root * and then use vaMapBuffer() to map the data store from the server side to the 177786c93d9c46415cf7746351c502a3513f637e77e4root * client address space for access. 177886c93d9c46415cf7746351c502a3513f637e77e4root * Note: image buffers are created by the library, not the client. Please see 177986c93d9c46415cf7746351c502a3513f637e77e4root * vaCreateImage on how image buffers are managed. 178086c93d9c46415cf7746351c502a3513f637e77e4root */ 178186c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaCreateBuffer ( 178286c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 178386c93d9c46415cf7746351c502a3513f637e77e4root VAContextID context, 178486c93d9c46415cf7746351c502a3513f637e77e4root VABufferType type, /* in */ 178586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int size, /* in */ 178686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int num_elements, /* in */ 178786c93d9c46415cf7746351c502a3513f637e77e4root void *data, /* in */ 178886c93d9c46415cf7746351c502a3513f637e77e4root VABufferID *buf_id /* out */ 178986c93d9c46415cf7746351c502a3513f637e77e4root); 179086c93d9c46415cf7746351c502a3513f637e77e4root 179186c93d9c46415cf7746351c502a3513f637e77e4root/* 179286c93d9c46415cf7746351c502a3513f637e77e4root * Convey to the server how many valid elements are in the buffer. 179386c93d9c46415cf7746351c502a3513f637e77e4root * e.g. if multiple slice parameters are being held in a single buffer, 179486c93d9c46415cf7746351c502a3513f637e77e4root * this will communicate to the server the number of slice parameters 179586c93d9c46415cf7746351c502a3513f637e77e4root * that are valid in the buffer. 179686c93d9c46415cf7746351c502a3513f637e77e4root */ 179786c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaBufferSetNumElements ( 179886c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 179986c93d9c46415cf7746351c502a3513f637e77e4root VABufferID buf_id, /* in */ 180086c93d9c46415cf7746351c502a3513f637e77e4root unsigned int num_elements /* in */ 180186c93d9c46415cf7746351c502a3513f637e77e4root); 180286c93d9c46415cf7746351c502a3513f637e77e4root 1803b0fac498ca4863166252f1268fda83394db54153Fei Jiang 1804b0fac498ca4863166252f1268fda83394db54153Fei Jiang/* 1805b0fac498ca4863166252f1268fda83394db54153Fei Jiang * device independent data structure for codedbuffer 1806b0fac498ca4863166252f1268fda83394db54153Fei Jiang */ 1807901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang 1808901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang/* 1809901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * FICTURE_AVE_QP(bit7-0): The average Qp value used during this frame 1810901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * LARGE_SLICE(bit8):At least one slice in the current frame was large 1811901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * enough for the encoder to attempt to limit its size. 1812901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * SLICE_OVERFLOW(bit9): At least one slice in the current frame has 1813901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * exceeded the maximum slice size specified. 181472b466b2b0f0ab67f78e9f1b964b0ca86b036292Fei Jiang * BITRATE_OVERFLOW(bit10): The peak bitrate was exceeded for this frame. 1815cceaa0568f77a7452857559614100b71fb36ee3awangkun * BITRATE_HIGH(bit11): The frame size got within the safety margin of the maximum size (VCM only) 1816cceaa0568f77a7452857559614100b71fb36ee3awangkun * AIR_MB_OVER_THRESHOLD: the number of MBs adapted to Intra MB 1817901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang */ 1818901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang#define VA_CODED_BUF_STATUS_PICTURE_AVE_QP_MASK 0xff 1819901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang#define VA_CODED_BUF_STATUS_LARGE_SLICE_MASK 0x100 1820901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang#define VA_CODED_BUF_STATUS_SLICE_OVERFLOW_MASK 0x200 182172b466b2b0f0ab67f78e9f1b964b0ca86b036292Fei Jiang#define VA_CODED_BUF_STATUS_BITRATE_OVERFLOW 0x400 1822cceaa0568f77a7452857559614100b71fb36ee3awangkun#define VA_CODED_BUF_STATUS_BITRATE_HIGH 0x800 18234b672db6ee89c9846451bbab23cf18e93c4260b2hding/** 18244b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief The frame has exceeded the maximum requested size. 18254b672db6ee89c9846451bbab23cf18e93c4260b2hding * 18264b672db6ee89c9846451bbab23cf18e93c4260b2hding * This flag indicates that the encoded frame size exceeds the value 18274b672db6ee89c9846451bbab23cf18e93c4260b2hding * specified through a misc parameter buffer of type 18284b672db6ee89c9846451bbab23cf18e93c4260b2hding * #VAEncMiscParameterTypeMaxFrameSize. 18294b672db6ee89c9846451bbab23cf18e93c4260b2hding */ 18304b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_CODED_BUF_STATUS_FRAME_SIZE_OVERFLOW 0x1000 1831cceaa0568f77a7452857559614100b71fb36ee3awangkun#define VA_CODED_BUF_STATUS_AIR_MB_OVER_THRESHOLD 0xff0000 1832901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang 18334b672db6ee89c9846451bbab23cf18e93c4260b2hding/** 18344b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief The coded buffer segment contains a single NAL unit. 18354b672db6ee89c9846451bbab23cf18e93c4260b2hding * 18364b672db6ee89c9846451bbab23cf18e93c4260b2hding * This flag indicates that the coded buffer segment contains a 18374b672db6ee89c9846451bbab23cf18e93c4260b2hding * single NAL unit. This flag might be useful to the user for 18384b672db6ee89c9846451bbab23cf18e93c4260b2hding * processing the coded buffer. 18394b672db6ee89c9846451bbab23cf18e93c4260b2hding */ 18404b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_CODED_BUF_STATUS_SINGLE_NALU 0x10000000 18414b672db6ee89c9846451bbab23cf18e93c4260b2hding 18424b672db6ee89c9846451bbab23cf18e93c4260b2hding/** 18434b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief Coded buffer segment. 18444b672db6ee89c9846451bbab23cf18e93c4260b2hding * 18454b672db6ee89c9846451bbab23cf18e93c4260b2hding * #VACodedBufferSegment is an element of a linked list describing 18464b672db6ee89c9846451bbab23cf18e93c4260b2hding * some information on the coded buffer. The coded buffer segment 18474b672db6ee89c9846451bbab23cf18e93c4260b2hding * could contain either a single NAL unit, or more than one NAL unit. 18484b672db6ee89c9846451bbab23cf18e93c4260b2hding * It is recommended (but not required) to return a single NAL unit 18494b672db6ee89c9846451bbab23cf18e93c4260b2hding * in a coded buffer segment, and the implementation should set the 18504b672db6ee89c9846451bbab23cf18e93c4260b2hding * VA_CODED_BUF_STATUS_SINGLE_NALU status flag if that is the case. 1851901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang */ 1852901c77a7aa491f56b63af7b655b67439481e4177Fei Jiangtypedef struct _VACodedBufferSegment { 18534b672db6ee89c9846451bbab23cf18e93c4260b2hding /** 18544b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief Size of the data buffer in this segment (in bytes). 18554b672db6ee89c9846451bbab23cf18e93c4260b2hding */ 18564b672db6ee89c9846451bbab23cf18e93c4260b2hding unsigned int size; 18574b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Bit offset into the data buffer where the video data starts. */ 18584b672db6ee89c9846451bbab23cf18e93c4260b2hding unsigned int bit_offset; 18594b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Status set by the driver. See \c VA_CODED_BUF_STATUS_*. */ 18604b672db6ee89c9846451bbab23cf18e93c4260b2hding unsigned int status; 18614b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Reserved for future use. */ 18624b672db6ee89c9846451bbab23cf18e93c4260b2hding unsigned int reserved; 18634b672db6ee89c9846451bbab23cf18e93c4260b2hding /** \brief Pointer to the start of the data buffer. */ 18644b672db6ee89c9846451bbab23cf18e93c4260b2hding void *buf; 18654b672db6ee89c9846451bbab23cf18e93c4260b2hding /** 18664b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief Pointer to the next #VACodedBufferSegment element, 18674b672db6ee89c9846451bbab23cf18e93c4260b2hding * or \c NULL if there is none. 18684b672db6ee89c9846451bbab23cf18e93c4260b2hding */ 18694b672db6ee89c9846451bbab23cf18e93c4260b2hding void *next; 1870b0fac498ca4863166252f1268fda83394db54153Fei Jiang} VACodedBufferSegment; 1871b0fac498ca4863166252f1268fda83394db54153Fei Jiang 187286c93d9c46415cf7746351c502a3513f637e77e4root/* 187386c93d9c46415cf7746351c502a3513f637e77e4root * Map data store of the buffer into the client's address space 187486c93d9c46415cf7746351c502a3513f637e77e4root * vaCreateBuffer() needs to be called with "data" set to NULL before 187586c93d9c46415cf7746351c502a3513f637e77e4root * calling vaMapBuffer() 1876b0fac498ca4863166252f1268fda83394db54153Fei Jiang * 1877b0fac498ca4863166252f1268fda83394db54153Fei Jiang * if buffer type is VAEncCodedBufferType, pbuf points to link-list of 1878b0fac498ca4863166252f1268fda83394db54153Fei Jiang * VACodedBufferSegment, and the list is terminated if "next" is NULL 187986c93d9c46415cf7746351c502a3513f637e77e4root */ 188086c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaMapBuffer ( 188186c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 188286c93d9c46415cf7746351c502a3513f637e77e4root VABufferID buf_id, /* in */ 188386c93d9c46415cf7746351c502a3513f637e77e4root void **pbuf /* out */ 188486c93d9c46415cf7746351c502a3513f637e77e4root); 188586c93d9c46415cf7746351c502a3513f637e77e4root 188686c93d9c46415cf7746351c502a3513f637e77e4root/* 188786c93d9c46415cf7746351c502a3513f637e77e4root * After client making changes to a mapped data store, it needs to 188886c93d9c46415cf7746351c502a3513f637e77e4root * "Unmap" it to let the server know that the data is ready to be 188986c93d9c46415cf7746351c502a3513f637e77e4root * consumed by the server 189086c93d9c46415cf7746351c502a3513f637e77e4root */ 189186c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaUnmapBuffer ( 189286c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 189386c93d9c46415cf7746351c502a3513f637e77e4root VABufferID buf_id /* in */ 189486c93d9c46415cf7746351c502a3513f637e77e4root); 189586c93d9c46415cf7746351c502a3513f637e77e4root 189686c93d9c46415cf7746351c502a3513f637e77e4root/* 189786c93d9c46415cf7746351c502a3513f637e77e4root * After this call, the buffer is deleted and this buffer_id is no longer valid 189886c93d9c46415cf7746351c502a3513f637e77e4root * Only call this if the buffer is not going to be passed to vaRenderBuffer 189986c93d9c46415cf7746351c502a3513f637e77e4root */ 190086c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaDestroyBuffer ( 190186c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 190286c93d9c46415cf7746351c502a3513f637e77e4root VABufferID buffer_id 190386c93d9c46415cf7746351c502a3513f637e77e4root); 190486c93d9c46415cf7746351c502a3513f637e77e4root 190586c93d9c46415cf7746351c502a3513f637e77e4root/* 190686c93d9c46415cf7746351c502a3513f637e77e4rootRender (Decode) Pictures 190786c93d9c46415cf7746351c502a3513f637e77e4root 190886c93d9c46415cf7746351c502a3513f637e77e4rootA picture represents either a frame or a field. 190986c93d9c46415cf7746351c502a3513f637e77e4root 191086c93d9c46415cf7746351c502a3513f637e77e4rootThe Begin/Render/End sequence sends the decode buffers to the server 191186c93d9c46415cf7746351c502a3513f637e77e4root*/ 191286c93d9c46415cf7746351c502a3513f637e77e4root 191386c93d9c46415cf7746351c502a3513f637e77e4root/* 191486c93d9c46415cf7746351c502a3513f637e77e4root * Get ready to decode a picture to a target surface 191586c93d9c46415cf7746351c502a3513f637e77e4root */ 191686c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaBeginPicture ( 191786c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 191886c93d9c46415cf7746351c502a3513f637e77e4root VAContextID context, 191986c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceID render_target 192086c93d9c46415cf7746351c502a3513f637e77e4root); 192186c93d9c46415cf7746351c502a3513f637e77e4root 192286c93d9c46415cf7746351c502a3513f637e77e4root/* 192386c93d9c46415cf7746351c502a3513f637e77e4root * Send decode buffers to the server. 192486c93d9c46415cf7746351c502a3513f637e77e4root * Buffers are automatically destroyed afterwards 192586c93d9c46415cf7746351c502a3513f637e77e4root */ 192686c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaRenderPicture ( 192786c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 192886c93d9c46415cf7746351c502a3513f637e77e4root VAContextID context, 192986c93d9c46415cf7746351c502a3513f637e77e4root VABufferID *buffers, 193086c93d9c46415cf7746351c502a3513f637e77e4root int num_buffers 193186c93d9c46415cf7746351c502a3513f637e77e4root); 193286c93d9c46415cf7746351c502a3513f637e77e4root 193386c93d9c46415cf7746351c502a3513f637e77e4root/* 193486c93d9c46415cf7746351c502a3513f637e77e4root * Make the end of rendering for a picture. 193586c93d9c46415cf7746351c502a3513f637e77e4root * The server should start processing all pending operations for this 193686c93d9c46415cf7746351c502a3513f637e77e4root * surface. This call is non-blocking. The client can start another 193786c93d9c46415cf7746351c502a3513f637e77e4root * Begin/Render/End sequence on a different render target. 193886c93d9c46415cf7746351c502a3513f637e77e4root */ 193986c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaEndPicture ( 194086c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 194186c93d9c46415cf7746351c502a3513f637e77e4root VAContextID context 194286c93d9c46415cf7746351c502a3513f637e77e4root); 194386c93d9c46415cf7746351c502a3513f637e77e4root 194486c93d9c46415cf7746351c502a3513f637e77e4root/* 194586c93d9c46415cf7746351c502a3513f637e77e4root 194686c93d9c46415cf7746351c502a3513f637e77e4rootSynchronization 194786c93d9c46415cf7746351c502a3513f637e77e4root 194886c93d9c46415cf7746351c502a3513f637e77e4root*/ 194986c93d9c46415cf7746351c502a3513f637e77e4root 195086c93d9c46415cf7746351c502a3513f637e77e4root/* 195186c93d9c46415cf7746351c502a3513f637e77e4root * This function blocks until all pending operations on the render target 195286c93d9c46415cf7746351c502a3513f637e77e4root * have been completed. Upon return it is safe to use the render target for a 195386c93d9c46415cf7746351c502a3513f637e77e4root * different picture. 195486c93d9c46415cf7746351c502a3513f637e77e4root */ 195586c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaSyncSurface ( 195686c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 195786c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceID render_target 195886c93d9c46415cf7746351c502a3513f637e77e4root); 195986c93d9c46415cf7746351c502a3513f637e77e4root 196086c93d9c46415cf7746351c502a3513f637e77e4roottypedef enum 196186c93d9c46415cf7746351c502a3513f637e77e4root{ 196286c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceRendering = 1, /* Rendering in progress */ 196386c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceDisplaying = 2, /* Displaying in progress (not safe to render into it) */ 196486c93d9c46415cf7746351c502a3513f637e77e4root /* this status is useful if surface is used as the source */ 196586c93d9c46415cf7746351c502a3513f637e77e4root /* of an overlay */ 196686c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceReady = 4, /* not being rendered or displayed */ 196786c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceSkipped = 8 /* Indicate a skipped frame during encode */ 196886c93d9c46415cf7746351c502a3513f637e77e4root} VASurfaceStatus; 196986c93d9c46415cf7746351c502a3513f637e77e4root 197086c93d9c46415cf7746351c502a3513f637e77e4root/* 197186c93d9c46415cf7746351c502a3513f637e77e4root * Find out any pending ops on the render target 197286c93d9c46415cf7746351c502a3513f637e77e4root */ 197386c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaQuerySurfaceStatus ( 197486c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 197586c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceID render_target, 197686c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceStatus *status /* out */ 197786c93d9c46415cf7746351c502a3513f637e77e4root); 197886c93d9c46415cf7746351c502a3513f637e77e4root 1979cceaa0568f77a7452857559614100b71fb36ee3awangkuntypedef enum 1980cceaa0568f77a7452857559614100b71fb36ee3awangkun{ 19815b3d55a0433b48477823f81821817a78ef53ac2eShuduo Sang VADecodeSliceMissing = 0, 19825b3d55a0433b48477823f81821817a78ef53ac2eShuduo Sang VADecodeMBError = 1, 19835b3d55a0433b48477823f81821817a78ef53ac2eShuduo Sang} VADecodeErrorType; 1984cceaa0568f77a7452857559614100b71fb36ee3awangkun 1985cceaa0568f77a7452857559614100b71fb36ee3awangkun/* 1986cceaa0568f77a7452857559614100b71fb36ee3awangkun * Client calls vaQuerySurfaceError with VA_STATUS_ERROR_DECODING_ERROR, server side returns 1987cceaa0568f77a7452857559614100b71fb36ee3awangkun * an array of structure VASurfaceDecodeMBErrors, and the array is terminated by setting status=-1 1988cceaa0568f77a7452857559614100b71fb36ee3awangkun*/ 1989cceaa0568f77a7452857559614100b71fb36ee3awangkuntypedef struct _VASurfaceDecodeMBErrors 1990cceaa0568f77a7452857559614100b71fb36ee3awangkun{ 1991cceaa0568f77a7452857559614100b71fb36ee3awangkun int status; /* 1 if hardware has returned detailed info below, -1 means this record is invalid */ 1992cceaa0568f77a7452857559614100b71fb36ee3awangkun unsigned int start_mb; /* start mb address with errors */ 1993cceaa0568f77a7452857559614100b71fb36ee3awangkun unsigned int end_mb; /* end mb address with errors */ 19945b3d55a0433b48477823f81821817a78ef53ac2eShuduo Sang VADecodeErrorType decode_error_type; 1995cceaa0568f77a7452857559614100b71fb36ee3awangkun} VASurfaceDecodeMBErrors; 1996cceaa0568f77a7452857559614100b71fb36ee3awangkun 1997cceaa0568f77a7452857559614100b71fb36ee3awangkun/* 1998cceaa0568f77a7452857559614100b71fb36ee3awangkun * After the application gets VA_STATUS_ERROR_DECODING_ERROR after calling vaSyncSurface(), 1999cceaa0568f77a7452857559614100b71fb36ee3awangkun * it can call vaQuerySurfaceError to find out further details on the particular error. 2000cceaa0568f77a7452857559614100b71fb36ee3awangkun * VA_STATUS_ERROR_DECODING_ERROR should be passed in as "error_status", 2001cceaa0568f77a7452857559614100b71fb36ee3awangkun * upon the return, error_info will point to an array of _VASurfaceDecodeMBErrors structure, 2002cceaa0568f77a7452857559614100b71fb36ee3awangkun * which is allocated and filled by libVA with detailed information on the missing or error macroblocks. 2003cceaa0568f77a7452857559614100b71fb36ee3awangkun * The array is terminated if "status==-1" is detected. 2004cceaa0568f77a7452857559614100b71fb36ee3awangkun */ 2005cceaa0568f77a7452857559614100b71fb36ee3awangkunVAStatus vaQuerySurfaceError( 2006cceaa0568f77a7452857559614100b71fb36ee3awangkun VADisplay dpy, 2007cceaa0568f77a7452857559614100b71fb36ee3awangkun VASurfaceID surface, 2008cceaa0568f77a7452857559614100b71fb36ee3awangkun VAStatus error_status, 2009cceaa0568f77a7452857559614100b71fb36ee3awangkun void **error_info 2010cceaa0568f77a7452857559614100b71fb36ee3awangkun); 2011cceaa0568f77a7452857559614100b71fb36ee3awangkun 201286c93d9c46415cf7746351c502a3513f637e77e4root/* 201386c93d9c46415cf7746351c502a3513f637e77e4root * Images and Subpictures 201486c93d9c46415cf7746351c502a3513f637e77e4root * VAImage is used to either get the surface data to client memory, or 201586c93d9c46415cf7746351c502a3513f637e77e4root * to copy image data in client memory to a surface. 201686c93d9c46415cf7746351c502a3513f637e77e4root * Both images, subpictures and surfaces follow the same 2D coordinate system where origin 201786c93d9c46415cf7746351c502a3513f637e77e4root * is at the upper left corner with positive X to the right and positive Y down 201886c93d9c46415cf7746351c502a3513f637e77e4root */ 201986c93d9c46415cf7746351c502a3513f637e77e4root#define VA_FOURCC(ch0, ch1, ch2, ch3) \ 202086c93d9c46415cf7746351c502a3513f637e77e4root ((unsigned long)(unsigned char) (ch0) | ((unsigned long)(unsigned char) (ch1) << 8) | \ 202186c93d9c46415cf7746351c502a3513f637e77e4root ((unsigned long)(unsigned char) (ch2) << 16) | ((unsigned long)(unsigned char) (ch3) << 24 )) 202286c93d9c46415cf7746351c502a3513f637e77e4root 2023409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan/* 2024409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan * Pre-defined fourcc codes 2025409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan */ 202686c93d9c46415cf7746351c502a3513f637e77e4root#define VA_FOURCC_NV12 0x3231564E 202786c93d9c46415cf7746351c502a3513f637e77e4root#define VA_FOURCC_AI44 0x34344149 202886c93d9c46415cf7746351c502a3513f637e77e4root#define VA_FOURCC_RGBA 0x41424752 2029409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_FOURCC_RGBX 0x58424752 2030cb99e83c12e445ca5b8fc8e56b4c04dbf1719fb4Kun Wang#define VA_FOURCC_BGRA 0x41524742 2031409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_FOURCC_BGRX 0x58524742 2032409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_FOURCC_ARGB 0x42475241 2033409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_FOURCC_XRGB 0x42475258 203486c93d9c46415cf7746351c502a3513f637e77e4root#define VA_FOURCC_UYVY 0x59565955 203586c93d9c46415cf7746351c502a3513f637e77e4root#define VA_FOURCC_YUY2 0x32595559 203686c93d9c46415cf7746351c502a3513f637e77e4root#define VA_FOURCC_AYUV 0x56555941 203786c93d9c46415cf7746351c502a3513f637e77e4root#define VA_FOURCC_NV11 0x3131564e 203886c93d9c46415cf7746351c502a3513f637e77e4root#define VA_FOURCC_YV12 0x32315659 203986c93d9c46415cf7746351c502a3513f637e77e4root#define VA_FOURCC_P208 0x38303250 204086c93d9c46415cf7746351c502a3513f637e77e4root#define VA_FOURCC_IYUV 0x56555949 20414b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_FOURCC_YV24 0x34325659 20424b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_FOURCC_YV32 0x32335659 2043409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_FOURCC_Y800 0x30303859 2044409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_FOURCC_IMC3 0x33434D49 2045409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_FOURCC_411P 0x50313134 2046409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_FOURCC_422H 0x48323234 2047409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_FOURCC_422V 0x56323234 2048409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_FOURCC_444P 0x50343434 2049409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_FOURCC_RGBP 0x50424752 2050409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define VA_FOURCC_BGRP 0x50524742 2051097f9bb6e21f15a66ada17cdf4846098df744c91Austin Yuan#define VA_FOURCC_411R 0x52313134 /* rotated 411P */ 205286c93d9c46415cf7746351c502a3513f637e77e4root 205386c93d9c46415cf7746351c502a3513f637e77e4root/* byte order */ 205486c93d9c46415cf7746351c502a3513f637e77e4root#define VA_LSB_FIRST 1 205586c93d9c46415cf7746351c502a3513f637e77e4root#define VA_MSB_FIRST 2 205686c93d9c46415cf7746351c502a3513f637e77e4root 205786c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAImageFormat 205886c93d9c46415cf7746351c502a3513f637e77e4root{ 205986c93d9c46415cf7746351c502a3513f637e77e4root unsigned int fourcc; 206086c93d9c46415cf7746351c502a3513f637e77e4root unsigned int byte_order; /* VA_LSB_FIRST, VA_MSB_FIRST */ 206186c93d9c46415cf7746351c502a3513f637e77e4root unsigned int bits_per_pixel; 206286c93d9c46415cf7746351c502a3513f637e77e4root /* for RGB formats */ 206386c93d9c46415cf7746351c502a3513f637e77e4root unsigned int depth; /* significant bits per pixel */ 206486c93d9c46415cf7746351c502a3513f637e77e4root unsigned int red_mask; 206586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int green_mask; 206686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int blue_mask; 206786c93d9c46415cf7746351c502a3513f637e77e4root unsigned int alpha_mask; 206886c93d9c46415cf7746351c502a3513f637e77e4root} VAImageFormat; 206986c93d9c46415cf7746351c502a3513f637e77e4root 207086c93d9c46415cf7746351c502a3513f637e77e4roottypedef VAGenericID VAImageID; 207186c93d9c46415cf7746351c502a3513f637e77e4root 207286c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAImage 207386c93d9c46415cf7746351c502a3513f637e77e4root{ 207486c93d9c46415cf7746351c502a3513f637e77e4root VAImageID image_id; /* uniquely identify this image */ 207586c93d9c46415cf7746351c502a3513f637e77e4root VAImageFormat format; 207686c93d9c46415cf7746351c502a3513f637e77e4root VABufferID buf; /* image data buffer */ 207786c93d9c46415cf7746351c502a3513f637e77e4root /* 207886c93d9c46415cf7746351c502a3513f637e77e4root * Image data will be stored in a buffer of type VAImageBufferType to facilitate 207986c93d9c46415cf7746351c502a3513f637e77e4root * data store on the server side for optimal performance. The buffer will be 208086c93d9c46415cf7746351c502a3513f637e77e4root * created by the CreateImage function, and proper storage allocated based on the image 208186c93d9c46415cf7746351c502a3513f637e77e4root * size and format. This buffer is managed by the library implementation, and 208286c93d9c46415cf7746351c502a3513f637e77e4root * accessed by the client through the buffer Map/Unmap functions. 208386c93d9c46415cf7746351c502a3513f637e77e4root */ 208486c93d9c46415cf7746351c502a3513f637e77e4root unsigned short width; 208586c93d9c46415cf7746351c502a3513f637e77e4root unsigned short height; 208686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int data_size; 20872b4f23f4aaf44ee9e7820f3799c74f813eb34cd8hding unsigned int num_planes; /* can not be greater than 4 */ 208886c93d9c46415cf7746351c502a3513f637e77e4root /* 208986c93d9c46415cf7746351c502a3513f637e77e4root * An array indicating the scanline pitch in bytes for each plane. 20902b4f23f4aaf44ee9e7820f3799c74f813eb34cd8hding * Each plane may have a different pitch. Maximum 4 planes for planar formats 209186c93d9c46415cf7746351c502a3513f637e77e4root */ 209244dd3ee8f42f526852e670fa0b5f585bfd261b7chding unsigned int pitches[3]; 209386c93d9c46415cf7746351c502a3513f637e77e4root /* 209486c93d9c46415cf7746351c502a3513f637e77e4root * An array indicating the byte offset from the beginning of the image data 209586c93d9c46415cf7746351c502a3513f637e77e4root * to the start of each plane. 209686c93d9c46415cf7746351c502a3513f637e77e4root */ 209744dd3ee8f42f526852e670fa0b5f585bfd261b7chding unsigned int offsets[3]; 209886c93d9c46415cf7746351c502a3513f637e77e4root 209986c93d9c46415cf7746351c502a3513f637e77e4root /* The following fields are only needed for paletted formats */ 210086c93d9c46415cf7746351c502a3513f637e77e4root int num_palette_entries; /* set to zero for non-palette images */ 210186c93d9c46415cf7746351c502a3513f637e77e4root /* 210286c93d9c46415cf7746351c502a3513f637e77e4root * Each component is one byte and entry_bytes indicates the number of components in 210386c93d9c46415cf7746351c502a3513f637e77e4root * each entry (eg. 3 for YUV palette entries). set to zero for non-palette images 210486c93d9c46415cf7746351c502a3513f637e77e4root */ 210586c93d9c46415cf7746351c502a3513f637e77e4root int entry_bytes; 210686c93d9c46415cf7746351c502a3513f637e77e4root /* 210786c93d9c46415cf7746351c502a3513f637e77e4root * An array of ascii characters describing the order of the components within the bytes. 210886c93d9c46415cf7746351c502a3513f637e77e4root * Only entry_bytes characters of the string are used. 210986c93d9c46415cf7746351c502a3513f637e77e4root */ 211086c93d9c46415cf7746351c502a3513f637e77e4root char component_order[4]; 211144dd3ee8f42f526852e670fa0b5f585bfd261b7chding /* 211244dd3ee8f42f526852e670fa0b5f585bfd261b7chding * Pitch and byte offset for the fourth plane if the image format requires 4 planes 211344dd3ee8f42f526852e670fa0b5f585bfd261b7chding */ 211444dd3ee8f42f526852e670fa0b5f585bfd261b7chding unsigned int extra_pitch; 211544dd3ee8f42f526852e670fa0b5f585bfd261b7chding unsigned int extra_offset; 211686c93d9c46415cf7746351c502a3513f637e77e4root} VAImage; 211786c93d9c46415cf7746351c502a3513f637e77e4root 211886c93d9c46415cf7746351c502a3513f637e77e4root/* Get maximum number of image formats supported by the implementation */ 211986c93d9c46415cf7746351c502a3513f637e77e4rootint vaMaxNumImageFormats ( 212086c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy 212186c93d9c46415cf7746351c502a3513f637e77e4root); 212286c93d9c46415cf7746351c502a3513f637e77e4root 212386c93d9c46415cf7746351c502a3513f637e77e4root/* 212486c93d9c46415cf7746351c502a3513f637e77e4root * Query supported image formats 212586c93d9c46415cf7746351c502a3513f637e77e4root * The caller must provide a "format_list" array that can hold at 212686c93d9c46415cf7746351c502a3513f637e77e4root * least vaMaxNumImageFormats() entries. The actual number of formats 212786c93d9c46415cf7746351c502a3513f637e77e4root * returned in "format_list" is returned in "num_formats". 212886c93d9c46415cf7746351c502a3513f637e77e4root */ 212986c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaQueryImageFormats ( 213086c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 213186c93d9c46415cf7746351c502a3513f637e77e4root VAImageFormat *format_list, /* out */ 213286c93d9c46415cf7746351c502a3513f637e77e4root int *num_formats /* out */ 213386c93d9c46415cf7746351c502a3513f637e77e4root); 213486c93d9c46415cf7746351c502a3513f637e77e4root 213586c93d9c46415cf7746351c502a3513f637e77e4root/* 213686c93d9c46415cf7746351c502a3513f637e77e4root * Create a VAImage structure 213786c93d9c46415cf7746351c502a3513f637e77e4root * The width and height fields returned in the VAImage structure may get 213886c93d9c46415cf7746351c502a3513f637e77e4root * enlarged for some YUV formats. Upon return from this function, 213986c93d9c46415cf7746351c502a3513f637e77e4root * image->buf has been created and proper storage allocated by the library. 214086c93d9c46415cf7746351c502a3513f637e77e4root * The client can access the image through the Map/Unmap calls. 214186c93d9c46415cf7746351c502a3513f637e77e4root */ 214286c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaCreateImage ( 214386c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 214486c93d9c46415cf7746351c502a3513f637e77e4root VAImageFormat *format, 214586c93d9c46415cf7746351c502a3513f637e77e4root int width, 214686c93d9c46415cf7746351c502a3513f637e77e4root int height, 214786c93d9c46415cf7746351c502a3513f637e77e4root VAImage *image /* out */ 214886c93d9c46415cf7746351c502a3513f637e77e4root); 214986c93d9c46415cf7746351c502a3513f637e77e4root 215086c93d9c46415cf7746351c502a3513f637e77e4root/* 215186c93d9c46415cf7746351c502a3513f637e77e4root * Should call DestroyImage before destroying the surface it is bound to 215286c93d9c46415cf7746351c502a3513f637e77e4root */ 215386c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaDestroyImage ( 215486c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 215586c93d9c46415cf7746351c502a3513f637e77e4root VAImageID image 215686c93d9c46415cf7746351c502a3513f637e77e4root); 215786c93d9c46415cf7746351c502a3513f637e77e4root 215886c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaSetImagePalette ( 215986c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 216086c93d9c46415cf7746351c502a3513f637e77e4root VAImageID image, 216186c93d9c46415cf7746351c502a3513f637e77e4root /* 216286c93d9c46415cf7746351c502a3513f637e77e4root * pointer to an array holding the palette data. The size of the array is 216386c93d9c46415cf7746351c502a3513f637e77e4root * num_palette_entries * entry_bytes in size. The order of the components 216486c93d9c46415cf7746351c502a3513f637e77e4root * in the palette is described by the component_order in VAImage struct 216586c93d9c46415cf7746351c502a3513f637e77e4root */ 216686c93d9c46415cf7746351c502a3513f637e77e4root unsigned char *palette 216786c93d9c46415cf7746351c502a3513f637e77e4root); 216886c93d9c46415cf7746351c502a3513f637e77e4root 216986c93d9c46415cf7746351c502a3513f637e77e4root/* 217086c93d9c46415cf7746351c502a3513f637e77e4root * Retrive surface data into a VAImage 217186c93d9c46415cf7746351c502a3513f637e77e4root * Image must be in a format supported by the implementation 217286c93d9c46415cf7746351c502a3513f637e77e4root */ 217386c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaGetImage ( 217486c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 217586c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceID surface, 217686c93d9c46415cf7746351c502a3513f637e77e4root int x, /* coordinates of the upper left source pixel */ 217786c93d9c46415cf7746351c502a3513f637e77e4root int y, 217886c93d9c46415cf7746351c502a3513f637e77e4root unsigned int width, /* width and height of the region */ 217986c93d9c46415cf7746351c502a3513f637e77e4root unsigned int height, 218086c93d9c46415cf7746351c502a3513f637e77e4root VAImageID image 218186c93d9c46415cf7746351c502a3513f637e77e4root); 218286c93d9c46415cf7746351c502a3513f637e77e4root 218386c93d9c46415cf7746351c502a3513f637e77e4root/* 218486c93d9c46415cf7746351c502a3513f637e77e4root * Copy data from a VAImage to a surface 218586c93d9c46415cf7746351c502a3513f637e77e4root * Image must be in a format supported by the implementation 218686c93d9c46415cf7746351c502a3513f637e77e4root * Returns a VA_STATUS_ERROR_SURFACE_BUSY if the surface 218786c93d9c46415cf7746351c502a3513f637e77e4root * shouldn't be rendered into when this is called 218886c93d9c46415cf7746351c502a3513f637e77e4root */ 218986c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaPutImage ( 219086c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 219186c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceID surface, 219286c93d9c46415cf7746351c502a3513f637e77e4root VAImageID image, 219386c93d9c46415cf7746351c502a3513f637e77e4root int src_x, 219486c93d9c46415cf7746351c502a3513f637e77e4root int src_y, 219586c93d9c46415cf7746351c502a3513f637e77e4root unsigned int src_width, 219686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int src_height, 219786c93d9c46415cf7746351c502a3513f637e77e4root int dest_x, 219886c93d9c46415cf7746351c502a3513f637e77e4root int dest_y, 219986c93d9c46415cf7746351c502a3513f637e77e4root unsigned int dest_width, 220086c93d9c46415cf7746351c502a3513f637e77e4root unsigned int dest_height 220186c93d9c46415cf7746351c502a3513f637e77e4root); 220286c93d9c46415cf7746351c502a3513f637e77e4root 220386c93d9c46415cf7746351c502a3513f637e77e4root/* 220486c93d9c46415cf7746351c502a3513f637e77e4root * Derive an VAImage from an existing surface. 220586c93d9c46415cf7746351c502a3513f637e77e4root * This interface will derive a VAImage and corresponding image buffer from 220686c93d9c46415cf7746351c502a3513f637e77e4root * an existing VA Surface. The image buffer can then be mapped/unmapped for 220786c93d9c46415cf7746351c502a3513f637e77e4root * direct CPU access. This operation is only possible on implementations with 220886c93d9c46415cf7746351c502a3513f637e77e4root * direct rendering capabilities and internal surface formats that can be 220986c93d9c46415cf7746351c502a3513f637e77e4root * represented with a VAImage. When the operation is not possible this interface 221086c93d9c46415cf7746351c502a3513f637e77e4root * will return VA_STATUS_ERROR_OPERATION_FAILED. Clients should then fall back 221186c93d9c46415cf7746351c502a3513f637e77e4root * to using vaCreateImage + vaPutImage to accomplish the same task in an 221286c93d9c46415cf7746351c502a3513f637e77e4root * indirect manner. 221386c93d9c46415cf7746351c502a3513f637e77e4root * 221486c93d9c46415cf7746351c502a3513f637e77e4root * Implementations should only return success when the resulting image buffer 221586c93d9c46415cf7746351c502a3513f637e77e4root * would be useable with vaMap/Unmap. 221686c93d9c46415cf7746351c502a3513f637e77e4root * 221786c93d9c46415cf7746351c502a3513f637e77e4root * When directly accessing a surface special care must be taken to insure 221886c93d9c46415cf7746351c502a3513f637e77e4root * proper synchronization with the graphics hardware. Clients should call 221986c93d9c46415cf7746351c502a3513f637e77e4root * vaQuerySurfaceStatus to insure that a surface is not the target of concurrent 222086c93d9c46415cf7746351c502a3513f637e77e4root * rendering or currently being displayed by an overlay. 222186c93d9c46415cf7746351c502a3513f637e77e4root * 222286c93d9c46415cf7746351c502a3513f637e77e4root * Additionally nothing about the contents of a surface should be assumed 222386c93d9c46415cf7746351c502a3513f637e77e4root * following a vaPutSurface. Implementations are free to modify the surface for 222486c93d9c46415cf7746351c502a3513f637e77e4root * scaling or subpicture blending within a call to vaPutImage. 222586c93d9c46415cf7746351c502a3513f637e77e4root * 222686c93d9c46415cf7746351c502a3513f637e77e4root * Calls to vaPutImage or vaGetImage using the same surface from which the image 222786c93d9c46415cf7746351c502a3513f637e77e4root * has been derived will return VA_STATUS_ERROR_SURFACE_BUSY. vaPutImage or 222886c93d9c46415cf7746351c502a3513f637e77e4root * vaGetImage with other surfaces is supported. 222986c93d9c46415cf7746351c502a3513f637e77e4root * 223086c93d9c46415cf7746351c502a3513f637e77e4root * An image created with vaDeriveImage should be freed with vaDestroyImage. The 223186c93d9c46415cf7746351c502a3513f637e77e4root * image and image buffer structures will be destroyed; however, the underlying 223286c93d9c46415cf7746351c502a3513f637e77e4root * surface will remain unchanged until freed with vaDestroySurfaces. 223386c93d9c46415cf7746351c502a3513f637e77e4root */ 223486c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaDeriveImage ( 223586c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 223686c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceID surface, 223786c93d9c46415cf7746351c502a3513f637e77e4root VAImage *image /* out */ 223886c93d9c46415cf7746351c502a3513f637e77e4root); 223986c93d9c46415cf7746351c502a3513f637e77e4root 224086c93d9c46415cf7746351c502a3513f637e77e4root/* 224186c93d9c46415cf7746351c502a3513f637e77e4root * Subpictures 224286c93d9c46415cf7746351c502a3513f637e77e4root * Subpicture is a special type of image that can be blended 224386c93d9c46415cf7746351c502a3513f637e77e4root * with a surface during vaPutSurface(). Subpicture can be used to render 224486c93d9c46415cf7746351c502a3513f637e77e4root * DVD sub-titles or closed captioning text etc. 224586c93d9c46415cf7746351c502a3513f637e77e4root */ 224686c93d9c46415cf7746351c502a3513f637e77e4root 224786c93d9c46415cf7746351c502a3513f637e77e4roottypedef VAGenericID VASubpictureID; 224886c93d9c46415cf7746351c502a3513f637e77e4root 224986c93d9c46415cf7746351c502a3513f637e77e4root/* Get maximum number of subpicture formats supported by the implementation */ 225086c93d9c46415cf7746351c502a3513f637e77e4rootint vaMaxNumSubpictureFormats ( 225186c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy 225286c93d9c46415cf7746351c502a3513f637e77e4root); 225386c93d9c46415cf7746351c502a3513f637e77e4root 225486c93d9c46415cf7746351c502a3513f637e77e4root/* flags for subpictures */ 2255cceaa0568f77a7452857559614100b71fb36ee3awangkun#define VA_SUBPICTURE_CHROMA_KEYING 0x0001 2256cceaa0568f77a7452857559614100b71fb36ee3awangkun#define VA_SUBPICTURE_GLOBAL_ALPHA 0x0002 2257cceaa0568f77a7452857559614100b71fb36ee3awangkun#define VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD 0x0004 225886c93d9c46415cf7746351c502a3513f637e77e4root/* 225986c93d9c46415cf7746351c502a3513f637e77e4root * Query supported subpicture formats 226086c93d9c46415cf7746351c502a3513f637e77e4root * The caller must provide a "format_list" array that can hold at 226186c93d9c46415cf7746351c502a3513f637e77e4root * least vaMaxNumSubpictureFormats() entries. The flags arrary holds the flag 226286c93d9c46415cf7746351c502a3513f637e77e4root * for each format to indicate additional capabilities for that format. The actual 226386c93d9c46415cf7746351c502a3513f637e77e4root * number of formats returned in "format_list" is returned in "num_formats". 226486c93d9c46415cf7746351c502a3513f637e77e4root * flags: returned value to indicate addtional capabilities 226586c93d9c46415cf7746351c502a3513f637e77e4root * VA_SUBPICTURE_CHROMA_KEYING - supports chroma-keying 2266cceaa0568f77a7452857559614100b71fb36ee3awangkun * VA_SUBPICTURE_GLOBAL_ALPHA - supports global alpha 2267cceaa0568f77a7452857559614100b71fb36ee3awangkun * VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD - supports unscaled screen relative subpictures for On Screen Display 226886c93d9c46415cf7746351c502a3513f637e77e4root */ 2269cceaa0568f77a7452857559614100b71fb36ee3awangkun 227086c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaQuerySubpictureFormats ( 227186c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 227286c93d9c46415cf7746351c502a3513f637e77e4root VAImageFormat *format_list, /* out */ 227386c93d9c46415cf7746351c502a3513f637e77e4root unsigned int *flags, /* out */ 227486c93d9c46415cf7746351c502a3513f637e77e4root unsigned int *num_formats /* out */ 227586c93d9c46415cf7746351c502a3513f637e77e4root); 227686c93d9c46415cf7746351c502a3513f637e77e4root 227786c93d9c46415cf7746351c502a3513f637e77e4root/* 227886c93d9c46415cf7746351c502a3513f637e77e4root * Subpictures are created with an image associated. 227986c93d9c46415cf7746351c502a3513f637e77e4root */ 228086c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaCreateSubpicture ( 228186c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 228286c93d9c46415cf7746351c502a3513f637e77e4root VAImageID image, 228386c93d9c46415cf7746351c502a3513f637e77e4root VASubpictureID *subpicture /* out */ 228486c93d9c46415cf7746351c502a3513f637e77e4root); 228586c93d9c46415cf7746351c502a3513f637e77e4root 228686c93d9c46415cf7746351c502a3513f637e77e4root/* 228786c93d9c46415cf7746351c502a3513f637e77e4root * Destroy the subpicture before destroying the image it is assocated to 228886c93d9c46415cf7746351c502a3513f637e77e4root */ 228986c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaDestroySubpicture ( 229086c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 229186c93d9c46415cf7746351c502a3513f637e77e4root VASubpictureID subpicture 229286c93d9c46415cf7746351c502a3513f637e77e4root); 229386c93d9c46415cf7746351c502a3513f637e77e4root 229486c93d9c46415cf7746351c502a3513f637e77e4root/* 229586c93d9c46415cf7746351c502a3513f637e77e4root * Bind an image to the subpicture. This image will now be associated with 229686c93d9c46415cf7746351c502a3513f637e77e4root * the subpicture instead of the one at creation. 229786c93d9c46415cf7746351c502a3513f637e77e4root */ 229886c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaSetSubpictureImage ( 229986c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 230086c93d9c46415cf7746351c502a3513f637e77e4root VASubpictureID subpicture, 230186c93d9c46415cf7746351c502a3513f637e77e4root VAImageID image 230286c93d9c46415cf7746351c502a3513f637e77e4root); 230386c93d9c46415cf7746351c502a3513f637e77e4root 230486c93d9c46415cf7746351c502a3513f637e77e4root/* 230586c93d9c46415cf7746351c502a3513f637e77e4root * If chromakey is enabled, then the area where the source value falls within 230686c93d9c46415cf7746351c502a3513f637e77e4root * the chromakey [min, max] range is transparent 230786c93d9c46415cf7746351c502a3513f637e77e4root * The chromakey component format is the following: 230886c93d9c46415cf7746351c502a3513f637e77e4root * For RGB: [0:7] Red [8:15] Blue [16:23] Green 230986c93d9c46415cf7746351c502a3513f637e77e4root * For YUV: [0:7] V [8:15] U [16:23] Y 231086c93d9c46415cf7746351c502a3513f637e77e4root * The chromakey mask can be used to mask out certain components for chromakey 231186c93d9c46415cf7746351c502a3513f637e77e4root * comparision 231286c93d9c46415cf7746351c502a3513f637e77e4root */ 231386c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaSetSubpictureChromakey ( 231486c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 231586c93d9c46415cf7746351c502a3513f637e77e4root VASubpictureID subpicture, 231686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int chromakey_min, 231786c93d9c46415cf7746351c502a3513f637e77e4root unsigned int chromakey_max, 231886c93d9c46415cf7746351c502a3513f637e77e4root unsigned int chromakey_mask 231986c93d9c46415cf7746351c502a3513f637e77e4root); 232086c93d9c46415cf7746351c502a3513f637e77e4root 232186c93d9c46415cf7746351c502a3513f637e77e4root/* 232286c93d9c46415cf7746351c502a3513f637e77e4root * Global alpha value is between 0 and 1. A value of 1 means fully opaque and 232386c93d9c46415cf7746351c502a3513f637e77e4root * a value of 0 means fully transparent. If per-pixel alpha is also specified then 232486c93d9c46415cf7746351c502a3513f637e77e4root * the overall alpha is per-pixel alpha multiplied by the global alpha 232586c93d9c46415cf7746351c502a3513f637e77e4root */ 232686c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaSetSubpictureGlobalAlpha ( 232786c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 232886c93d9c46415cf7746351c502a3513f637e77e4root VASubpictureID subpicture, 232986c93d9c46415cf7746351c502a3513f637e77e4root float global_alpha 233086c93d9c46415cf7746351c502a3513f637e77e4root); 233186c93d9c46415cf7746351c502a3513f637e77e4root 233286c93d9c46415cf7746351c502a3513f637e77e4root/* 233386c93d9c46415cf7746351c502a3513f637e77e4root * vaAssociateSubpicture associates the subpicture with target_surfaces. 233486c93d9c46415cf7746351c502a3513f637e77e4root * It defines the region mapping between the subpicture and the target 233586c93d9c46415cf7746351c502a3513f637e77e4root * surfaces through source and destination rectangles (with the same width and height). 233686c93d9c46415cf7746351c502a3513f637e77e4root * Both will be displayed at the next call to vaPutSurface. Additional 233786c93d9c46415cf7746351c502a3513f637e77e4root * associations before the call to vaPutSurface simply overrides the association. 233886c93d9c46415cf7746351c502a3513f637e77e4root */ 233986c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaAssociateSubpicture ( 234086c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 234186c93d9c46415cf7746351c502a3513f637e77e4root VASubpictureID subpicture, 234286c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceID *target_surfaces, 234386c93d9c46415cf7746351c502a3513f637e77e4root int num_surfaces, 234486c93d9c46415cf7746351c502a3513f637e77e4root short src_x, /* upper left offset in subpicture */ 234586c93d9c46415cf7746351c502a3513f637e77e4root short src_y, 234686c93d9c46415cf7746351c502a3513f637e77e4root unsigned short src_width, 234786c93d9c46415cf7746351c502a3513f637e77e4root unsigned short src_height, 234886c93d9c46415cf7746351c502a3513f637e77e4root short dest_x, /* upper left offset in surface */ 234986c93d9c46415cf7746351c502a3513f637e77e4root short dest_y, 235086c93d9c46415cf7746351c502a3513f637e77e4root unsigned short dest_width, 235186c93d9c46415cf7746351c502a3513f637e77e4root unsigned short dest_height, 235286c93d9c46415cf7746351c502a3513f637e77e4root /* 2353cceaa0568f77a7452857559614100b71fb36ee3awangkun * whether to enable chroma-keying, global-alpha, or screen relative mode 235486c93d9c46415cf7746351c502a3513f637e77e4root * see VA_SUBPICTURE_XXX values 235586c93d9c46415cf7746351c502a3513f637e77e4root */ 235686c93d9c46415cf7746351c502a3513f637e77e4root unsigned int flags 235786c93d9c46415cf7746351c502a3513f637e77e4root); 235886c93d9c46415cf7746351c502a3513f637e77e4root 235986c93d9c46415cf7746351c502a3513f637e77e4root/* 236086c93d9c46415cf7746351c502a3513f637e77e4root * vaDeassociateSubpicture removes the association of the subpicture with target_surfaces. 236186c93d9c46415cf7746351c502a3513f637e77e4root */ 236286c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaDeassociateSubpicture ( 236386c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 236486c93d9c46415cf7746351c502a3513f637e77e4root VASubpictureID subpicture, 236586c93d9c46415cf7746351c502a3513f637e77e4root VASurfaceID *target_surfaces, 236686c93d9c46415cf7746351c502a3513f637e77e4root int num_surfaces 236786c93d9c46415cf7746351c502a3513f637e77e4root); 236886c93d9c46415cf7746351c502a3513f637e77e4root 236986c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VARectangle 237086c93d9c46415cf7746351c502a3513f637e77e4root{ 237186c93d9c46415cf7746351c502a3513f637e77e4root short x; 237286c93d9c46415cf7746351c502a3513f637e77e4root short y; 237386c93d9c46415cf7746351c502a3513f637e77e4root unsigned short width; 237486c93d9c46415cf7746351c502a3513f637e77e4root unsigned short height; 237586c93d9c46415cf7746351c502a3513f637e77e4root} VARectangle; 237686c93d9c46415cf7746351c502a3513f637e77e4root 237786c93d9c46415cf7746351c502a3513f637e77e4root/* 237886c93d9c46415cf7746351c502a3513f637e77e4root * Display attributes 237986c93d9c46415cf7746351c502a3513f637e77e4root * Display attributes are used to control things such as contrast, hue, saturation, 238086c93d9c46415cf7746351c502a3513f637e77e4root * brightness etc. in the rendering process. The application can query what 238186c93d9c46415cf7746351c502a3513f637e77e4root * attributes are supported by the driver, and then set the appropriate attributes 238286c93d9c46415cf7746351c502a3513f637e77e4root * before calling vaPutSurface() 238386c93d9c46415cf7746351c502a3513f637e77e4root */ 2384b0fac498ca4863166252f1268fda83394db54153Fei Jiang 23857ce177f53f4c28c5fefb9259e106fc5a72f65b5eGwenole Beauchesne/** 23867ce177f53f4c28c5fefb9259e106fc5a72f65b5eGwenole Beauchesne * @name Rotation angles 23877ce177f53f4c28c5fefb9259e106fc5a72f65b5eGwenole Beauchesne * 23887ce177f53f4c28c5fefb9259e106fc5a72f65b5eGwenole Beauchesne * Those values could be used for VADisplayAttribRotation attribute or 23897ce177f53f4c28c5fefb9259e106fc5a72f65b5eGwenole Beauchesne * VAProcPipelineParameterBuffer::rotation_state. The rotation operation 23907ce177f53f4c28c5fefb9259e106fc5a72f65b5eGwenole Beauchesne * is clockwise. 23917ce177f53f4c28c5fefb9259e106fc5a72f65b5eGwenole Beauchesne */ 23927ce177f53f4c28c5fefb9259e106fc5a72f65b5eGwenole Beauchesne/**@{*/ 23937ce177f53f4c28c5fefb9259e106fc5a72f65b5eGwenole Beauchesne/** \brief No rotation. */ 2394b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define VA_ROTATION_NONE 0x00000000 23957ce177f53f4c28c5fefb9259e106fc5a72f65b5eGwenole Beauchesne/** \brief Rotation by 90° clockwise. */ 2396b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define VA_ROTATION_90 0x00000001 23977ce177f53f4c28c5fefb9259e106fc5a72f65b5eGwenole Beauchesne/** \brief Rotation by 180° clockwise. */ 2398b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define VA_ROTATION_180 0x00000002 23997ce177f53f4c28c5fefb9259e106fc5a72f65b5eGwenole Beauchesne/** \brief Rotation by 270° clockwise. */ 2400601e657275d5edf21b79d64a49d9d392628ae487Austin Yuan#define VA_ROTATION_270 0x00000003 24017ce177f53f4c28c5fefb9259e106fc5a72f65b5eGwenole Beauchesne/**@}*/ 2402b0fac498ca4863166252f1268fda83394db54153Fei Jiang 240335f195a578d0bec4a0aa84d6162eda7e3a4a4db9Austin Yuan/** 240435f195a578d0bec4a0aa84d6162eda7e3a4a4db9Austin Yuan * @name Mirroring directions 240535f195a578d0bec4a0aa84d6162eda7e3a4a4db9Austin Yuan * 240635f195a578d0bec4a0aa84d6162eda7e3a4a4db9Austin Yuan * Those values could be used for VADisplayAttribMirror attribute or 240735f195a578d0bec4a0aa84d6162eda7e3a4a4db9Austin Yuan * VAProcPipelineParameterBuffer::mirror_state. 240835f195a578d0bec4a0aa84d6162eda7e3a4a4db9Austin Yuan 240935f195a578d0bec4a0aa84d6162eda7e3a4a4db9Austin Yuan */ 241035f195a578d0bec4a0aa84d6162eda7e3a4a4db9Austin Yuan/**@{*/ 241135f195a578d0bec4a0aa84d6162eda7e3a4a4db9Austin Yuan/** \brief No Mirroring. */ 241235f195a578d0bec4a0aa84d6162eda7e3a4a4db9Austin Yuan#define VA_MIRROR_NONE 0x00000000 241335f195a578d0bec4a0aa84d6162eda7e3a4a4db9Austin Yuan/** \brief Horizontal Mirroring. */ 241435f195a578d0bec4a0aa84d6162eda7e3a4a4db9Austin Yuan#define VA_MIRROR_HORIZONTAL 0x00000001 241535f195a578d0bec4a0aa84d6162eda7e3a4a4db9Austin Yuan/** \brief Vertical Mirroring. */ 241635f195a578d0bec4a0aa84d6162eda7e3a4a4db9Austin Yuan#define VA_MIRROR_VERTICAL 0x00000002 241735f195a578d0bec4a0aa84d6162eda7e3a4a4db9Austin Yuan/**@}*/ 241835f195a578d0bec4a0aa84d6162eda7e3a4a4db9Austin Yuan 2419b0fac498ca4863166252f1268fda83394db54153Fei Jiang/* attribute value for VADisplayAttribOutOfLoopDeblock */ 2420b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define VA_OOL_DEBLOCKING_FALSE 0x00000000 2421b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define VA_OOL_DEBLOCKING_TRUE 0x00000001 2422b0fac498ca4863166252f1268fda83394db54153Fei Jiang 2423942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang/* Render mode */ 2424942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang#define VA_RENDER_MODE_UNDEFINED 0 2425942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang#define VA_RENDER_MODE_LOCAL_OVERLAY 1 2426942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang#define VA_RENDER_MODE_LOCAL_GPU 2 2427942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang#define VA_RENDER_MODE_EXTERNAL_OVERLAY 4 2428942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang#define VA_RENDER_MODE_EXTERNAL_GPU 8 2429942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang 2430942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang/* Render device */ 2431942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang#define VA_RENDER_DEVICE_UNDEFINED 0 2432942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang#define VA_RENDER_DEVICE_LOCAL 1 2433942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang#define VA_RENDER_DEVICE_EXTERNAL 2 2434942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang 243586c93d9c46415cf7746351c502a3513f637e77e4root/* Currently defined display attribute types */ 243686c93d9c46415cf7746351c502a3513f637e77e4roottypedef enum 243786c93d9c46415cf7746351c502a3513f637e77e4root{ 243886c93d9c46415cf7746351c502a3513f637e77e4root VADisplayAttribBrightness = 0, 243986c93d9c46415cf7746351c502a3513f637e77e4root VADisplayAttribContrast = 1, 244086c93d9c46415cf7746351c502a3513f637e77e4root VADisplayAttribHue = 2, 244186c93d9c46415cf7746351c502a3513f637e77e4root VADisplayAttribSaturation = 3, 244221e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan /* client can specifiy a background color for the target window 244321e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan * the new feature of video conference, 244421e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan * the uncovered area of the surface is filled by this color 2445942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang * also it will blend with the decoded video color 2446942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang */ 244786c93d9c46415cf7746351c502a3513f637e77e4root VADisplayAttribBackgroundColor = 4, 2448b0fac498ca4863166252f1268fda83394db54153Fei Jiang VADisplayAttribRotation = 6, 2449b0fac498ca4863166252f1268fda83394db54153Fei Jiang VADisplayAttribOutofLoopDeblock = 7, 2450b0fac498ca4863166252f1268fda83394db54153Fei Jiang 2451901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang /* 2452901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * For type VADisplayAttribCSCMatrix, "value" field is a pointer to the color 2453901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * conversion matrix. Each element in the matrix is float-point 2454901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang */ 2455901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang VADisplayAttribCSCMatrix = 12, 2456901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang /* specify the constant color used to blend with video surface 2457901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * Cd = Cv*Cc*Ac + Cb *(1 - Ac) C means the constant RGB 2458901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * d: the final color to overwrite into the frame buffer 2459901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * v: decoded video after color conversion, 2460901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * c: video color specified by VADisplayAttribBlendColor 2461901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * b: background color of the drawable 2462901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang */ 2463901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang VADisplayAttribBlendColor = 13, 2464942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang /* 2465942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang * Indicate driver to skip painting color key or not. 2466942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang * only applicable if the render is overlay 2467942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang */ 2468942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang VADisplayAttribOverlayAutoPaintColorKey = 14, 2469942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang /* 2470942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang * customized overlay color key, the format is RGB888 2471942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang * [23:16] = Red, [15:08] = Green, [07:00] = Blue. 2472942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang */ 2473942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang VADisplayAttribOverlayColorKey = 15, 2474942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang /* 2475942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang * The hint for the implementation of vaPutSurface 2476942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang * normally, the driver could use an overlay or GPU to render the surface on the screen 2477942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang * this flag provides APP the flexibity to switch the render dynamically 2478942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang */ 2479942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang VADisplayAttribRenderMode = 16, 2480942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang /* 2481942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang * specify if vaPutSurface needs to render into specified monitors 2482942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang * one example is that one external monitor (e.g. HDMI) is enabled, 2483942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang * but the window manager is not aware of it, and there is no associated drawable 2484942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang */ 2485942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang VADisplayAttribRenderDevice = 17, 2486942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang /* 2487942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang * specify vaPutSurface render area if there is no drawable on the monitor 2488942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang */ 2489942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang VADisplayAttribRenderRect = 18, 249086c93d9c46415cf7746351c502a3513f637e77e4root} VADisplayAttribType; 249186c93d9c46415cf7746351c502a3513f637e77e4root 249286c93d9c46415cf7746351c502a3513f637e77e4root/* flags for VADisplayAttribute */ 249386c93d9c46415cf7746351c502a3513f637e77e4root#define VA_DISPLAY_ATTRIB_NOT_SUPPORTED 0x0000 249486c93d9c46415cf7746351c502a3513f637e77e4root#define VA_DISPLAY_ATTRIB_GETTABLE 0x0001 249586c93d9c46415cf7746351c502a3513f637e77e4root#define VA_DISPLAY_ATTRIB_SETTABLE 0x0002 249686c93d9c46415cf7746351c502a3513f637e77e4root 249786c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VADisplayAttribute 249886c93d9c46415cf7746351c502a3513f637e77e4root{ 249986c93d9c46415cf7746351c502a3513f637e77e4root VADisplayAttribType type; 250086c93d9c46415cf7746351c502a3513f637e77e4root int min_value; 250186c93d9c46415cf7746351c502a3513f637e77e4root int max_value; 250286c93d9c46415cf7746351c502a3513f637e77e4root int value; /* used by the set/get attribute functions */ 250386c93d9c46415cf7746351c502a3513f637e77e4root/* flags can be VA_DISPLAY_ATTRIB_GETTABLE or VA_DISPLAY_ATTRIB_SETTABLE or OR'd together */ 250486c93d9c46415cf7746351c502a3513f637e77e4root unsigned int flags; 250586c93d9c46415cf7746351c502a3513f637e77e4root} VADisplayAttribute; 250686c93d9c46415cf7746351c502a3513f637e77e4root 250786c93d9c46415cf7746351c502a3513f637e77e4root/* Get maximum number of display attributs supported by the implementation */ 250886c93d9c46415cf7746351c502a3513f637e77e4rootint vaMaxNumDisplayAttributes ( 250986c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy 251086c93d9c46415cf7746351c502a3513f637e77e4root); 251186c93d9c46415cf7746351c502a3513f637e77e4root 251286c93d9c46415cf7746351c502a3513f637e77e4root/* 251386c93d9c46415cf7746351c502a3513f637e77e4root * Query display attributes 251486c93d9c46415cf7746351c502a3513f637e77e4root * The caller must provide a "attr_list" array that can hold at 251586c93d9c46415cf7746351c502a3513f637e77e4root * least vaMaxNumDisplayAttributes() entries. The actual number of attributes 251686c93d9c46415cf7746351c502a3513f637e77e4root * returned in "attr_list" is returned in "num_attributes". 251786c93d9c46415cf7746351c502a3513f637e77e4root */ 251886c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaQueryDisplayAttributes ( 251986c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 252086c93d9c46415cf7746351c502a3513f637e77e4root VADisplayAttribute *attr_list, /* out */ 252186c93d9c46415cf7746351c502a3513f637e77e4root int *num_attributes /* out */ 252286c93d9c46415cf7746351c502a3513f637e77e4root); 252386c93d9c46415cf7746351c502a3513f637e77e4root 252486c93d9c46415cf7746351c502a3513f637e77e4root/* 252586c93d9c46415cf7746351c502a3513f637e77e4root * Get display attributes 252686c93d9c46415cf7746351c502a3513f637e77e4root * This function returns the current attribute values in "attr_list". 252786c93d9c46415cf7746351c502a3513f637e77e4root * Only attributes returned with VA_DISPLAY_ATTRIB_GETTABLE set in the "flags" field 252886c93d9c46415cf7746351c502a3513f637e77e4root * from vaQueryDisplayAttributes() can have their values retrieved. 252986c93d9c46415cf7746351c502a3513f637e77e4root */ 253086c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaGetDisplayAttributes ( 253186c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 253286c93d9c46415cf7746351c502a3513f637e77e4root VADisplayAttribute *attr_list, /* in/out */ 253386c93d9c46415cf7746351c502a3513f637e77e4root int num_attributes 253486c93d9c46415cf7746351c502a3513f637e77e4root); 253586c93d9c46415cf7746351c502a3513f637e77e4root 253686c93d9c46415cf7746351c502a3513f637e77e4root/* 253786c93d9c46415cf7746351c502a3513f637e77e4root * Set display attributes 253886c93d9c46415cf7746351c502a3513f637e77e4root * Only attributes returned with VA_DISPLAY_ATTRIB_SETTABLE set in the "flags" field 253986c93d9c46415cf7746351c502a3513f637e77e4root * from vaQueryDisplayAttributes() can be set. If the attribute is not settable or 254086c93d9c46415cf7746351c502a3513f637e77e4root * the value is out of range, the function returns VA_STATUS_ERROR_ATTR_NOT_SUPPORTED 254186c93d9c46415cf7746351c502a3513f637e77e4root */ 254286c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaSetDisplayAttributes ( 254386c93d9c46415cf7746351c502a3513f637e77e4root VADisplay dpy, 254486c93d9c46415cf7746351c502a3513f637e77e4root VADisplayAttribute *attr_list, 254586c93d9c46415cf7746351c502a3513f637e77e4root int num_attributes 254686c93d9c46415cf7746351c502a3513f637e77e4root); 254786c93d9c46415cf7746351c502a3513f637e77e4root 25484b672db6ee89c9846451bbab23cf18e93c4260b2hding/**@}*/ 25494b672db6ee89c9846451bbab23cf18e93c4260b2hding 255086c93d9c46415cf7746351c502a3513f637e77e4root#ifdef __cplusplus 255186c93d9c46415cf7746351c502a3513f637e77e4root} 255286c93d9c46415cf7746351c502a3513f637e77e4root#endif 255386c93d9c46415cf7746351c502a3513f637e77e4root 255486c93d9c46415cf7746351c502a3513f637e77e4root#endif /* _VA_H_ */ 2555