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