va.h revision 901c77a7aa491f56b63af7b655b67439481e4177
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 *
2786c93d9c46415cf7746351c502a3513f637e77e4root * 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 *
59b0fac498ca4863166252f1268fda83394db54153Fei Jiang * rev 0.31.1 (03/29/2009) - Data structure for JPEG encode
60b0fac498ca4863166252f1268fda83394db54153Fei Jiang *
6186c93d9c46415cf7746351c502a3513f637e77e4root * Acknowledgements:
6286c93d9c46415cf7746351c502a3513f637e77e4root *  Some concepts borrowed from XvMC and XvImage.
6386c93d9c46415cf7746351c502a3513f637e77e4root *  Waldo Bastian (Intel), Matt Sottek (Intel),  Austin Yuan (Intel), and Gwenole Beauchesne (SDS)
6486c93d9c46415cf7746351c502a3513f637e77e4root *  contributed to various aspects of the API.
6586c93d9c46415cf7746351c502a3513f637e77e4root */
6686c93d9c46415cf7746351c502a3513f637e77e4root
6786c93d9c46415cf7746351c502a3513f637e77e4root#ifndef _VA_H_
6886c93d9c46415cf7746351c502a3513f637e77e4root#define _VA_H_
6986c93d9c46415cf7746351c502a3513f637e77e4root
7086c93d9c46415cf7746351c502a3513f637e77e4root#include <va/va_version.h>
7186c93d9c46415cf7746351c502a3513f637e77e4root
7286c93d9c46415cf7746351c502a3513f637e77e4root#ifdef __cplusplus
7386c93d9c46415cf7746351c502a3513f637e77e4rootextern "C" {
7486c93d9c46415cf7746351c502a3513f637e77e4root#endif
7586c93d9c46415cf7746351c502a3513f637e77e4root
7686c93d9c46415cf7746351c502a3513f637e77e4root/*
7786c93d9c46415cf7746351c502a3513f637e77e4rootOverview
7886c93d9c46415cf7746351c502a3513f637e77e4root
7986c93d9c46415cf7746351c502a3513f637e77e4rootThe VA API is intended to provide an interface between a video decode/encode/display
8086c93d9c46415cf7746351c502a3513f637e77e4rootapplication (client) and a hardware accelerator (server), to off-load
8186c93d9c46415cf7746351c502a3513f637e77e4rootvideo decode/encode/display operations from the host to the hardware accelerator at various
8286c93d9c46415cf7746351c502a3513f637e77e4rootentry-points.
8386c93d9c46415cf7746351c502a3513f637e77e4root
8486c93d9c46415cf7746351c502a3513f637e77e4rootThe basic operation steps are:
8586c93d9c46415cf7746351c502a3513f637e77e4root
8686c93d9c46415cf7746351c502a3513f637e77e4root- Negotiate a mutually acceptable configuration with the server to lock
8786c93d9c46415cf7746351c502a3513f637e77e4root  down profile, entrypoints, and other attributes that will not change on
8886c93d9c46415cf7746351c502a3513f637e77e4root  a frame-by-frame basis.
8986c93d9c46415cf7746351c502a3513f637e77e4root- Create a decode context which represents a "virtualized" hardware decode
9086c93d9c46415cf7746351c502a3513f637e77e4root  device
9186c93d9c46415cf7746351c502a3513f637e77e4root- Get and fill decode buffers with picture level, slice level and macroblock
9286c93d9c46415cf7746351c502a3513f637e77e4root  level data (depending on entrypoints)
9386c93d9c46415cf7746351c502a3513f637e77e4root- Pass the decode buffers to the server to decode the current frame
9486c93d9c46415cf7746351c502a3513f637e77e4root
9586c93d9c46415cf7746351c502a3513f637e77e4rootInitialization & Configuration Management
9686c93d9c46415cf7746351c502a3513f637e77e4root
9786c93d9c46415cf7746351c502a3513f637e77e4root- Find out supported profiles
9886c93d9c46415cf7746351c502a3513f637e77e4root- Find out entrypoints for a given profile
9986c93d9c46415cf7746351c502a3513f637e77e4root- Find out configuration attributes for a given profile/entrypoint pair
10086c93d9c46415cf7746351c502a3513f637e77e4root- Create a configuration for use by the decoder
10186c93d9c46415cf7746351c502a3513f637e77e4root
10286c93d9c46415cf7746351c502a3513f637e77e4root*/
10386c93d9c46415cf7746351c502a3513f637e77e4root
10486c93d9c46415cf7746351c502a3513f637e77e4roottypedef void* VADisplay;	/* window system dependent */
10586c93d9c46415cf7746351c502a3513f637e77e4root
10686c93d9c46415cf7746351c502a3513f637e77e4roottypedef int VAStatus;	/* Return status type from functions */
10786c93d9c46415cf7746351c502a3513f637e77e4root/* Values for the return status */
10886c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_SUCCESS			0x00000000
10986c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_OPERATION_FAILED	0x00000001
11086c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_ALLOCATION_FAILED	0x00000002
11186c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_INVALID_DISPLAY		0x00000003
11286c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_INVALID_CONFIG		0x00000004
11386c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_INVALID_CONTEXT		0x00000005
11486c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_INVALID_SURFACE		0x00000006
11586c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_INVALID_BUFFER		0x00000007
11686c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_INVALID_IMAGE		0x00000008
11786c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_INVALID_SUBPICTURE	0x00000009
11886c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_ATTR_NOT_SUPPORTED	0x0000000a
11986c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_MAX_NUM_EXCEEDED	0x0000000b
12086c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_UNSUPPORTED_PROFILE	0x0000000c
12186c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT	0x0000000d
12286c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT	0x0000000e
12386c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE	0x0000000f
12486c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_SURFACE_BUSY		0x00000010
12586c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_FLAG_NOT_SUPPORTED      0x00000011
12686c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_INVALID_PARAMETER	0x00000012
12786c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED 0x00000013
12886c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_UNIMPLEMENTED           0x00000014
12986c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_SURFACE_IN_DISPLAYING   0x00000015
130b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define VA_STATUS_ERROR_INVALID_IMAGE_FORMAT    0x00000016
13186c93d9c46415cf7746351c502a3513f637e77e4root#define VA_STATUS_ERROR_UNKNOWN			0xFFFFFFFF
13286c93d9c46415cf7746351c502a3513f637e77e4root
133b0fac498ca4863166252f1268fda83394db54153Fei Jiang/* De-interlacing flags for vaPutSurface() */
134b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define VA_FRAME_PICTURE        0x00000000
135b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define VA_TOP_FIELD            0x00000001
136b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define VA_BOTTOM_FIELD         0x00000002
137b0fac498ca4863166252f1268fda83394db54153Fei Jiang
138901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang#define VA_ENBLE_BLEND          0x00000004 /* video area blend with the constant color */
139901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang
140b0fac498ca4863166252f1268fda83394db54153Fei Jiang/*
141b0fac498ca4863166252f1268fda83394db54153Fei Jiang * Clears the drawable with background color.
142b0fac498ca4863166252f1268fda83394db54153Fei Jiang * for hardware overlay based implementation this flag
143b0fac498ca4863166252f1268fda83394db54153Fei Jiang * can be used to turn off the overlay
144b0fac498ca4863166252f1268fda83394db54153Fei Jiang */
145b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define VA_CLEAR_DRAWABLE       0x00000008
146b0fac498ca4863166252f1268fda83394db54153Fei Jiang
147b0fac498ca4863166252f1268fda83394db54153Fei Jiang/* Color space conversion flags for vaPutSurface() */
148b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define VA_SRC_BT601            0x00000010
149b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define VA_SRC_BT709            0x00000020
150901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang#define VA_SRC_SMPTE_240        0x00000040
151901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang
152901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang/* Scaling flags for vaPutSurface() */
153901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang#define VA_FILTER_SCALING_DEFAULT       0x00000000
154901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang#define VA_FILTER_SCALING_FAST          0x00000100
155901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang#define VA_FILTER_SCALING_HQ            0x00000200
156901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang#define VA_FILTER_SCALING_NL_ANAMORPHIC 0x00000300
157901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang#define VA_FILTER_SCALING_MASK          0x00000f00
158b0fac498ca4863166252f1268fda83394db54153Fei Jiang
15986c93d9c46415cf7746351c502a3513f637e77e4root/*
16086c93d9c46415cf7746351c502a3513f637e77e4root * Returns a short english description of error_status
16186c93d9c46415cf7746351c502a3513f637e77e4root */
16286c93d9c46415cf7746351c502a3513f637e77e4rootconst char *vaErrorStr(VAStatus error_status);
16386c93d9c46415cf7746351c502a3513f637e77e4root
16486c93d9c46415cf7746351c502a3513f637e77e4root/*
16586c93d9c46415cf7746351c502a3513f637e77e4root * Initialization:
16686c93d9c46415cf7746351c502a3513f637e77e4root * A display must be obtained by calling vaGetDisplay() before calling
16786c93d9c46415cf7746351c502a3513f637e77e4root * vaInitialize() and other functions. This connects the API to the
16886c93d9c46415cf7746351c502a3513f637e77e4root * native window system.
16986c93d9c46415cf7746351c502a3513f637e77e4root * For X Windows, native_dpy would be from XOpenDisplay()
17086c93d9c46415cf7746351c502a3513f637e77e4root */
17186c93d9c46415cf7746351c502a3513f637e77e4roottypedef void* NativeDisplay;	/* window system dependent */
17286c93d9c46415cf7746351c502a3513f637e77e4root
173b0fac498ca4863166252f1268fda83394db54153Fei Jiangint vaDisplayIsValid(VADisplay dpy);
174b0fac498ca4863166252f1268fda83394db54153Fei Jiang
17586c93d9c46415cf7746351c502a3513f637e77e4root/*
17686c93d9c46415cf7746351c502a3513f637e77e4root * Initialize the library
17786c93d9c46415cf7746351c502a3513f637e77e4root */
17886c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaInitialize (
17986c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
18086c93d9c46415cf7746351c502a3513f637e77e4root    int *major_version,	 /* out */
18186c93d9c46415cf7746351c502a3513f637e77e4root    int *minor_version 	 /* out */
18286c93d9c46415cf7746351c502a3513f637e77e4root);
18386c93d9c46415cf7746351c502a3513f637e77e4root
18486c93d9c46415cf7746351c502a3513f637e77e4root/*
18586c93d9c46415cf7746351c502a3513f637e77e4root * After this call, all library internal resources will be cleaned up
18686c93d9c46415cf7746351c502a3513f637e77e4root */
18786c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaTerminate (
18886c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy
18986c93d9c46415cf7746351c502a3513f637e77e4root);
19086c93d9c46415cf7746351c502a3513f637e77e4root
19186c93d9c46415cf7746351c502a3513f637e77e4root/*
19286c93d9c46415cf7746351c502a3513f637e77e4root * vaQueryVendorString returns a pointer to a zero-terminated string
19386c93d9c46415cf7746351c502a3513f637e77e4root * describing some aspects of the VA implemenation on a specific
19486c93d9c46415cf7746351c502a3513f637e77e4root * hardware accelerator. The format of the returned string is vendor
19586c93d9c46415cf7746351c502a3513f637e77e4root * specific and at the discretion of the implementer.
19686c93d9c46415cf7746351c502a3513f637e77e4root * e.g. for the Intel GMA500 implementation, an example would be:
19786c93d9c46415cf7746351c502a3513f637e77e4root * "Intel GMA500 - 2.0.0.32L.0005"
19886c93d9c46415cf7746351c502a3513f637e77e4root */
19986c93d9c46415cf7746351c502a3513f637e77e4rootconst char *vaQueryVendorString (
20086c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy
20186c93d9c46415cf7746351c502a3513f637e77e4root);
20286c93d9c46415cf7746351c502a3513f637e77e4root
20386c93d9c46415cf7746351c502a3513f637e77e4roottypedef int (*VAPrivFunc)();
20486c93d9c46415cf7746351c502a3513f637e77e4root
20586c93d9c46415cf7746351c502a3513f637e77e4root/*
20686c93d9c46415cf7746351c502a3513f637e77e4root * Return a function pointer given a function name in the library.
20786c93d9c46415cf7746351c502a3513f637e77e4root * This allows private interfaces into the library
20886c93d9c46415cf7746351c502a3513f637e77e4root */
20986c93d9c46415cf7746351c502a3513f637e77e4rootVAPrivFunc vaGetLibFunc (
21086c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
21186c93d9c46415cf7746351c502a3513f637e77e4root    const char *func
21286c93d9c46415cf7746351c502a3513f637e77e4root);
21386c93d9c46415cf7746351c502a3513f637e77e4root
21486c93d9c46415cf7746351c502a3513f637e77e4root/* Currently defined profiles */
21586c93d9c46415cf7746351c502a3513f637e77e4roottypedef enum
21686c93d9c46415cf7746351c502a3513f637e77e4root{
21786c93d9c46415cf7746351c502a3513f637e77e4root    VAProfileMPEG2Simple		= 0,
21886c93d9c46415cf7746351c502a3513f637e77e4root    VAProfileMPEG2Main			= 1,
21986c93d9c46415cf7746351c502a3513f637e77e4root    VAProfileMPEG4Simple		= 2,
22086c93d9c46415cf7746351c502a3513f637e77e4root    VAProfileMPEG4AdvancedSimple	= 3,
22186c93d9c46415cf7746351c502a3513f637e77e4root    VAProfileMPEG4Main			= 4,
22286c93d9c46415cf7746351c502a3513f637e77e4root    VAProfileH264Baseline		= 5,
22386c93d9c46415cf7746351c502a3513f637e77e4root    VAProfileH264Main			= 6,
22486c93d9c46415cf7746351c502a3513f637e77e4root    VAProfileH264High			= 7,
22586c93d9c46415cf7746351c502a3513f637e77e4root    VAProfileVC1Simple			= 8,
22686c93d9c46415cf7746351c502a3513f637e77e4root    VAProfileVC1Main			= 9,
22786c93d9c46415cf7746351c502a3513f637e77e4root    VAProfileVC1Advanced		= 10,
228b0fac498ca4863166252f1268fda83394db54153Fei Jiang    VAProfileH263Baseline		= 11,
229b0fac498ca4863166252f1268fda83394db54153Fei Jiang    VAProfileJPEGBaseline               = 12
23086c93d9c46415cf7746351c502a3513f637e77e4root} VAProfile;
23186c93d9c46415cf7746351c502a3513f637e77e4root
23286c93d9c46415cf7746351c502a3513f637e77e4root/*
23386c93d9c46415cf7746351c502a3513f637e77e4root *  Currently defined entrypoints
23486c93d9c46415cf7746351c502a3513f637e77e4root */
23586c93d9c46415cf7746351c502a3513f637e77e4roottypedef enum
23686c93d9c46415cf7746351c502a3513f637e77e4root{
23786c93d9c46415cf7746351c502a3513f637e77e4root    VAEntrypointVLD		= 1,
23886c93d9c46415cf7746351c502a3513f637e77e4root    VAEntrypointIZZ		= 2,
23986c93d9c46415cf7746351c502a3513f637e77e4root    VAEntrypointIDCT		= 3,
24086c93d9c46415cf7746351c502a3513f637e77e4root    VAEntrypointMoComp		= 4,
24186c93d9c46415cf7746351c502a3513f637e77e4root    VAEntrypointDeblocking	= 5,
242b0fac498ca4863166252f1268fda83394db54153Fei Jiang    VAEntrypointEncSlice	= 6,	/* slice level encode */
243b0fac498ca4863166252f1268fda83394db54153Fei Jiang    VAEntrypointEncPicture 	= 7	/* pictuer encode, JPEG, etc */
24486c93d9c46415cf7746351c502a3513f637e77e4root} VAEntrypoint;
24586c93d9c46415cf7746351c502a3513f637e77e4root
24686c93d9c46415cf7746351c502a3513f637e77e4root/* Currently defined configuration attribute types */
24786c93d9c46415cf7746351c502a3513f637e77e4roottypedef enum
24886c93d9c46415cf7746351c502a3513f637e77e4root{
24986c93d9c46415cf7746351c502a3513f637e77e4root    VAConfigAttribRTFormat		= 0,
25086c93d9c46415cf7746351c502a3513f637e77e4root    VAConfigAttribSpatialResidual	= 1,
25186c93d9c46415cf7746351c502a3513f637e77e4root    VAConfigAttribSpatialClipping	= 2,
25286c93d9c46415cf7746351c502a3513f637e77e4root    VAConfigAttribIntraResidual		= 3,
25386c93d9c46415cf7746351c502a3513f637e77e4root    VAConfigAttribEncryption		= 4,
25486c93d9c46415cf7746351c502a3513f637e77e4root    VAConfigAttribRateControl		= 5
25586c93d9c46415cf7746351c502a3513f637e77e4root} VAConfigAttribType;
25686c93d9c46415cf7746351c502a3513f637e77e4root
25786c93d9c46415cf7746351c502a3513f637e77e4root/*
25886c93d9c46415cf7746351c502a3513f637e77e4root * Configuration attributes
25986c93d9c46415cf7746351c502a3513f637e77e4root * If there is more than one value for an attribute, a default
26086c93d9c46415cf7746351c502a3513f637e77e4root * value will be assigned to the attribute if the client does not
26186c93d9c46415cf7746351c502a3513f637e77e4root * specify the attribute when creating a configuration
26286c93d9c46415cf7746351c502a3513f637e77e4root */
26386c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAConfigAttrib {
26486c93d9c46415cf7746351c502a3513f637e77e4root    VAConfigAttribType type;
26586c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int value; /* OR'd flags (bits) for this attribute */
26686c93d9c46415cf7746351c502a3513f637e77e4root} VAConfigAttrib;
26786c93d9c46415cf7746351c502a3513f637e77e4root
26886c93d9c46415cf7746351c502a3513f637e77e4root/* attribute value for VAConfigAttribRTFormat */
26986c93d9c46415cf7746351c502a3513f637e77e4root#define VA_RT_FORMAT_YUV420	0x00000001
27086c93d9c46415cf7746351c502a3513f637e77e4root#define VA_RT_FORMAT_YUV422	0x00000002
27186c93d9c46415cf7746351c502a3513f637e77e4root#define VA_RT_FORMAT_YUV444	0x00000004
27286c93d9c46415cf7746351c502a3513f637e77e4root#define VA_RT_FORMAT_PROTECTED	0x80000000
27386c93d9c46415cf7746351c502a3513f637e77e4root
27486c93d9c46415cf7746351c502a3513f637e77e4root/* attribute value for VAConfigAttribRateControl */
27586c93d9c46415cf7746351c502a3513f637e77e4root#define VA_RC_NONE	0x00000001
27686c93d9c46415cf7746351c502a3513f637e77e4root#define VA_RC_CBR	0x00000002
27786c93d9c46415cf7746351c502a3513f637e77e4root#define VA_RC_VBR	0x00000004
278901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang#define VA_RC_VCM	0x00000008 /* video conference mode */
27986c93d9c46415cf7746351c502a3513f637e77e4root
28086c93d9c46415cf7746351c502a3513f637e77e4root/*
28186c93d9c46415cf7746351c502a3513f637e77e4root * if an attribute is not applicable for a given
28286c93d9c46415cf7746351c502a3513f637e77e4root * profile/entrypoint pair, then set the value to the following
28386c93d9c46415cf7746351c502a3513f637e77e4root */
28486c93d9c46415cf7746351c502a3513f637e77e4root#define VA_ATTRIB_NOT_SUPPORTED 0x80000000
28586c93d9c46415cf7746351c502a3513f637e77e4root
28686c93d9c46415cf7746351c502a3513f637e77e4root/* Get maximum number of profiles supported by the implementation */
28786c93d9c46415cf7746351c502a3513f637e77e4rootint vaMaxNumProfiles (
28886c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy
28986c93d9c46415cf7746351c502a3513f637e77e4root);
29086c93d9c46415cf7746351c502a3513f637e77e4root
29186c93d9c46415cf7746351c502a3513f637e77e4root/* Get maximum number of entrypoints supported by the implementation */
29286c93d9c46415cf7746351c502a3513f637e77e4rootint vaMaxNumEntrypoints (
29386c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy
29486c93d9c46415cf7746351c502a3513f637e77e4root);
29586c93d9c46415cf7746351c502a3513f637e77e4root
29686c93d9c46415cf7746351c502a3513f637e77e4root/* Get maximum number of attributs supported by the implementation */
29786c93d9c46415cf7746351c502a3513f637e77e4rootint vaMaxNumConfigAttributes (
29886c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy
29986c93d9c46415cf7746351c502a3513f637e77e4root);
30086c93d9c46415cf7746351c502a3513f637e77e4root
30186c93d9c46415cf7746351c502a3513f637e77e4root/*
30286c93d9c46415cf7746351c502a3513f637e77e4root * Query supported profiles
30386c93d9c46415cf7746351c502a3513f637e77e4root * The caller must provide a "profile_list" array that can hold at
30486c93d9c46415cf7746351c502a3513f637e77e4root * least vaMaxNumProfile() entries. The actual number of profiles
30586c93d9c46415cf7746351c502a3513f637e77e4root * returned in "profile_list" is returned in "num_profile".
30686c93d9c46415cf7746351c502a3513f637e77e4root */
30786c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaQueryConfigProfiles (
30886c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
30986c93d9c46415cf7746351c502a3513f637e77e4root    VAProfile *profile_list,	/* out */
31086c93d9c46415cf7746351c502a3513f637e77e4root    int *num_profiles		/* out */
31186c93d9c46415cf7746351c502a3513f637e77e4root);
31286c93d9c46415cf7746351c502a3513f637e77e4root
31386c93d9c46415cf7746351c502a3513f637e77e4root/*
31486c93d9c46415cf7746351c502a3513f637e77e4root * Query supported entrypoints for a given profile
31586c93d9c46415cf7746351c502a3513f637e77e4root * The caller must provide an "entrypoint_list" array that can hold at
31686c93d9c46415cf7746351c502a3513f637e77e4root * least vaMaxNumEntrypoints() entries. The actual number of entrypoints
31786c93d9c46415cf7746351c502a3513f637e77e4root * returned in "entrypoint_list" is returned in "num_entrypoints".
31886c93d9c46415cf7746351c502a3513f637e77e4root */
31986c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaQueryConfigEntrypoints (
32086c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
32186c93d9c46415cf7746351c502a3513f637e77e4root    VAProfile profile,
32286c93d9c46415cf7746351c502a3513f637e77e4root    VAEntrypoint *entrypoint_list,	/* out */
32386c93d9c46415cf7746351c502a3513f637e77e4root    int *num_entrypoints		/* out */
32486c93d9c46415cf7746351c502a3513f637e77e4root);
32586c93d9c46415cf7746351c502a3513f637e77e4root
32686c93d9c46415cf7746351c502a3513f637e77e4root/*
32786c93d9c46415cf7746351c502a3513f637e77e4root * Get attributes for a given profile/entrypoint pair
32886c93d9c46415cf7746351c502a3513f637e77e4root * The caller must provide an "attrib_list" with all attributes to be
32986c93d9c46415cf7746351c502a3513f637e77e4root * retrieved.  Upon return, the attributes in "attrib_list" have been
33086c93d9c46415cf7746351c502a3513f637e77e4root * updated with their value.  Unknown attributes or attributes that are
33186c93d9c46415cf7746351c502a3513f637e77e4root * not supported for the given profile/entrypoint pair will have their
33286c93d9c46415cf7746351c502a3513f637e77e4root * value set to VA_ATTRIB_NOT_SUPPORTED
33386c93d9c46415cf7746351c502a3513f637e77e4root */
33486c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaGetConfigAttributes (
33586c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
33686c93d9c46415cf7746351c502a3513f637e77e4root    VAProfile profile,
33786c93d9c46415cf7746351c502a3513f637e77e4root    VAEntrypoint entrypoint,
33886c93d9c46415cf7746351c502a3513f637e77e4root    VAConfigAttrib *attrib_list, /* in/out */
33986c93d9c46415cf7746351c502a3513f637e77e4root    int num_attribs
34086c93d9c46415cf7746351c502a3513f637e77e4root);
34186c93d9c46415cf7746351c502a3513f637e77e4root
34286c93d9c46415cf7746351c502a3513f637e77e4root/* Generic ID type, can be re-typed for specific implementation */
34386c93d9c46415cf7746351c502a3513f637e77e4roottypedef unsigned int VAGenericID;
34486c93d9c46415cf7746351c502a3513f637e77e4root
34586c93d9c46415cf7746351c502a3513f637e77e4roottypedef VAGenericID VAConfigID;
34686c93d9c46415cf7746351c502a3513f637e77e4root
34786c93d9c46415cf7746351c502a3513f637e77e4root/*
34886c93d9c46415cf7746351c502a3513f637e77e4root * Create a configuration for the decode pipeline
34986c93d9c46415cf7746351c502a3513f637e77e4root * it passes in the attribute list that specifies the attributes it cares
35086c93d9c46415cf7746351c502a3513f637e77e4root * about, with the rest taking default values.
35186c93d9c46415cf7746351c502a3513f637e77e4root */
35286c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaCreateConfig (
35386c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
35486c93d9c46415cf7746351c502a3513f637e77e4root    VAProfile profile,
35586c93d9c46415cf7746351c502a3513f637e77e4root    VAEntrypoint entrypoint,
35686c93d9c46415cf7746351c502a3513f637e77e4root    VAConfigAttrib *attrib_list,
35786c93d9c46415cf7746351c502a3513f637e77e4root    int num_attribs,
35886c93d9c46415cf7746351c502a3513f637e77e4root    VAConfigID *config_id /* out */
35986c93d9c46415cf7746351c502a3513f637e77e4root);
36086c93d9c46415cf7746351c502a3513f637e77e4root
36186c93d9c46415cf7746351c502a3513f637e77e4root/*
36286c93d9c46415cf7746351c502a3513f637e77e4root * Free resources associdated with a given config
36386c93d9c46415cf7746351c502a3513f637e77e4root */
36486c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaDestroyConfig (
36586c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
36686c93d9c46415cf7746351c502a3513f637e77e4root    VAConfigID config_id
36786c93d9c46415cf7746351c502a3513f637e77e4root);
36886c93d9c46415cf7746351c502a3513f637e77e4root
36986c93d9c46415cf7746351c502a3513f637e77e4root/*
37086c93d9c46415cf7746351c502a3513f637e77e4root * Query all attributes for a given configuration
37186c93d9c46415cf7746351c502a3513f637e77e4root * The profile of the configuration is returned in "profile"
37286c93d9c46415cf7746351c502a3513f637e77e4root * The entrypoint of the configuration is returned in "entrypoint"
37386c93d9c46415cf7746351c502a3513f637e77e4root * The caller must provide an "attrib_list" array that can hold at least
37486c93d9c46415cf7746351c502a3513f637e77e4root * vaMaxNumConfigAttributes() entries. The actual number of attributes
37586c93d9c46415cf7746351c502a3513f637e77e4root * returned in "attrib_list" is returned in "num_attribs"
37686c93d9c46415cf7746351c502a3513f637e77e4root */
37786c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaQueryConfigAttributes (
37886c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
37986c93d9c46415cf7746351c502a3513f637e77e4root    VAConfigID config_id,
38086c93d9c46415cf7746351c502a3513f637e77e4root    VAProfile *profile, 	/* out */
38186c93d9c46415cf7746351c502a3513f637e77e4root    VAEntrypoint *entrypoint, 	/* out */
38286c93d9c46415cf7746351c502a3513f637e77e4root    VAConfigAttrib *attrib_list,/* out */
38386c93d9c46415cf7746351c502a3513f637e77e4root    int *num_attribs 		/* out */
38486c93d9c46415cf7746351c502a3513f637e77e4root);
38586c93d9c46415cf7746351c502a3513f637e77e4root
38686c93d9c46415cf7746351c502a3513f637e77e4root
38786c93d9c46415cf7746351c502a3513f637e77e4root/*
38886c93d9c46415cf7746351c502a3513f637e77e4root * Contexts and Surfaces
38986c93d9c46415cf7746351c502a3513f637e77e4root *
39086c93d9c46415cf7746351c502a3513f637e77e4root * Context represents a "virtual" video decode pipeline. Surfaces are render
39186c93d9c46415cf7746351c502a3513f637e77e4root * targets for a given context. The data in the surfaces are not accessible
39286c93d9c46415cf7746351c502a3513f637e77e4root * to the client and the internal data format of the surface is implementatin
39386c93d9c46415cf7746351c502a3513f637e77e4root * specific.
39486c93d9c46415cf7746351c502a3513f637e77e4root *
39586c93d9c46415cf7746351c502a3513f637e77e4root * Surfaces will be bound to a context when the context is created. Once
39686c93d9c46415cf7746351c502a3513f637e77e4root * a surface is bound to a given context, it can not be used to create
39786c93d9c46415cf7746351c502a3513f637e77e4root * another context. The association is removed when the context is destroyed
39886c93d9c46415cf7746351c502a3513f637e77e4root *
39986c93d9c46415cf7746351c502a3513f637e77e4root * Both contexts and surfaces are identified by unique IDs and its
40086c93d9c46415cf7746351c502a3513f637e77e4root * implementation specific internals are kept opaque to the clients
40186c93d9c46415cf7746351c502a3513f637e77e4root */
40286c93d9c46415cf7746351c502a3513f637e77e4root
40386c93d9c46415cf7746351c502a3513f637e77e4roottypedef VAGenericID VAContextID;
40486c93d9c46415cf7746351c502a3513f637e77e4root
40586c93d9c46415cf7746351c502a3513f637e77e4roottypedef VAGenericID VASurfaceID;
40686c93d9c46415cf7746351c502a3513f637e77e4root
40786c93d9c46415cf7746351c502a3513f637e77e4root#define VA_INVALID_ID		0xffffffff
40886c93d9c46415cf7746351c502a3513f637e77e4root#define VA_INVALID_SURFACE	VA_INVALID_ID
40986c93d9c46415cf7746351c502a3513f637e77e4root
41086c93d9c46415cf7746351c502a3513f637e77e4root/*
41186c93d9c46415cf7746351c502a3513f637e77e4root * vaCreateSurfaces - Create an array of surfaces used for decode and display
41286c93d9c46415cf7746351c502a3513f637e77e4root *  dpy: display
41386c93d9c46415cf7746351c502a3513f637e77e4root *  width: surface width
41486c93d9c46415cf7746351c502a3513f637e77e4root *  height: surface height
41586c93d9c46415cf7746351c502a3513f637e77e4root *  format: VA_RT_FORMAT_YUV420, VA_RT_FORMAT_YUV422 or VA_RT_FORMAT_YUV444
41686c93d9c46415cf7746351c502a3513f637e77e4root *  num_surfaces: number of surfaces to be created
41786c93d9c46415cf7746351c502a3513f637e77e4root *  surfaces: array of surfaces created upon return
41886c93d9c46415cf7746351c502a3513f637e77e4root */
41986c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaCreateSurfaces (
42086c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
42186c93d9c46415cf7746351c502a3513f637e77e4root    int width,
42286c93d9c46415cf7746351c502a3513f637e77e4root    int height,
42386c93d9c46415cf7746351c502a3513f637e77e4root    int format,
42486c93d9c46415cf7746351c502a3513f637e77e4root    int num_surfaces,
42586c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID *surfaces	/* out */
42686c93d9c46415cf7746351c502a3513f637e77e4root);
42786c93d9c46415cf7746351c502a3513f637e77e4root
42886c93d9c46415cf7746351c502a3513f637e77e4root
42986c93d9c46415cf7746351c502a3513f637e77e4root/*
43086c93d9c46415cf7746351c502a3513f637e77e4root * vaDestroySurfaces - Destroy resources associated with surfaces.
43186c93d9c46415cf7746351c502a3513f637e77e4root *  Surfaces can only be destroyed after the context associated has been
43286c93d9c46415cf7746351c502a3513f637e77e4root *  destroyed.
43386c93d9c46415cf7746351c502a3513f637e77e4root *  dpy: display
43486c93d9c46415cf7746351c502a3513f637e77e4root *  surfaces: array of surfaces to destroy
43586c93d9c46415cf7746351c502a3513f637e77e4root *  num_surfaces: number of surfaces in the array to be destroyed.
43686c93d9c46415cf7746351c502a3513f637e77e4root */
43786c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaDestroySurfaces (
43886c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
43986c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID *surfaces,
44086c93d9c46415cf7746351c502a3513f637e77e4root    int num_surfaces
44186c93d9c46415cf7746351c502a3513f637e77e4root);
44286c93d9c46415cf7746351c502a3513f637e77e4root
44386c93d9c46415cf7746351c502a3513f637e77e4root#define VA_PROGRESSIVE 0x1
44486c93d9c46415cf7746351c502a3513f637e77e4root/*
44586c93d9c46415cf7746351c502a3513f637e77e4root * vaCreateContext - Create a context
44686c93d9c46415cf7746351c502a3513f637e77e4root *  dpy: display
44786c93d9c46415cf7746351c502a3513f637e77e4root *  config_id: configuration for the context
44886c93d9c46415cf7746351c502a3513f637e77e4root *  picture_width: coded picture width
44986c93d9c46415cf7746351c502a3513f637e77e4root *  picture_height: coded picture height
45086c93d9c46415cf7746351c502a3513f637e77e4root *  flag: any combination of the following:
45186c93d9c46415cf7746351c502a3513f637e77e4root *    VA_PROGRESSIVE (only progressive frame pictures in the sequence when set)
45286c93d9c46415cf7746351c502a3513f637e77e4root *  render_targets: render targets (surfaces) tied to the context
45386c93d9c46415cf7746351c502a3513f637e77e4root *  num_render_targets: number of render targets in the above array
45486c93d9c46415cf7746351c502a3513f637e77e4root *  context: created context id upon return
45586c93d9c46415cf7746351c502a3513f637e77e4root */
45686c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaCreateContext (
45786c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
45886c93d9c46415cf7746351c502a3513f637e77e4root    VAConfigID config_id,
45986c93d9c46415cf7746351c502a3513f637e77e4root    int picture_width,
46086c93d9c46415cf7746351c502a3513f637e77e4root    int picture_height,
46186c93d9c46415cf7746351c502a3513f637e77e4root    int flag,
46286c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID *render_targets,
46386c93d9c46415cf7746351c502a3513f637e77e4root    int num_render_targets,
46486c93d9c46415cf7746351c502a3513f637e77e4root    VAContextID *context		/* out */
46586c93d9c46415cf7746351c502a3513f637e77e4root);
46686c93d9c46415cf7746351c502a3513f637e77e4root
46786c93d9c46415cf7746351c502a3513f637e77e4root/*
46886c93d9c46415cf7746351c502a3513f637e77e4root * vaDestroyContext - Destroy a context
46986c93d9c46415cf7746351c502a3513f637e77e4root *  dpy: display
47086c93d9c46415cf7746351c502a3513f637e77e4root *  context: context to be destroyed
47186c93d9c46415cf7746351c502a3513f637e77e4root */
47286c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaDestroyContext (
47386c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
47486c93d9c46415cf7746351c502a3513f637e77e4root    VAContextID context
47586c93d9c46415cf7746351c502a3513f637e77e4root);
47686c93d9c46415cf7746351c502a3513f637e77e4root
47786c93d9c46415cf7746351c502a3513f637e77e4root/*
47886c93d9c46415cf7746351c502a3513f637e77e4root * Buffers
47986c93d9c46415cf7746351c502a3513f637e77e4root * Buffers are used to pass various types of data from the
48086c93d9c46415cf7746351c502a3513f637e77e4root * client to the server. The server maintains a data store
48186c93d9c46415cf7746351c502a3513f637e77e4root * for each buffer created, and the client idenfies a buffer
48286c93d9c46415cf7746351c502a3513f637e77e4root * through a unique buffer id assigned by the server.
48386c93d9c46415cf7746351c502a3513f637e77e4root */
48486c93d9c46415cf7746351c502a3513f637e77e4root
48586c93d9c46415cf7746351c502a3513f637e77e4roottypedef VAGenericID VABufferID;
48686c93d9c46415cf7746351c502a3513f637e77e4root
48786c93d9c46415cf7746351c502a3513f637e77e4roottypedef enum
48886c93d9c46415cf7746351c502a3513f637e77e4root{
48986c93d9c46415cf7746351c502a3513f637e77e4root    VAPictureParameterBufferType	= 0,
49086c93d9c46415cf7746351c502a3513f637e77e4root    VAIQMatrixBufferType		= 1,
49186c93d9c46415cf7746351c502a3513f637e77e4root    VABitPlaneBufferType		= 2,
49286c93d9c46415cf7746351c502a3513f637e77e4root    VASliceGroupMapBufferType		= 3,
49386c93d9c46415cf7746351c502a3513f637e77e4root    VASliceParameterBufferType		= 4,
49486c93d9c46415cf7746351c502a3513f637e77e4root    VASliceDataBufferType		= 5,
49586c93d9c46415cf7746351c502a3513f637e77e4root    VAMacroblockParameterBufferType	= 6,
49686c93d9c46415cf7746351c502a3513f637e77e4root    VAResidualDataBufferType		= 7,
49786c93d9c46415cf7746351c502a3513f637e77e4root    VADeblockingParameterBufferType	= 8,
49886c93d9c46415cf7746351c502a3513f637e77e4root    VAImageBufferType			= 9,
49986c93d9c46415cf7746351c502a3513f637e77e4root    VAProtectedSliceDataBufferType	= 10,
500b0fac498ca4863166252f1268fda83394db54153Fei Jiang    VAQMatrixBufferType                 = 11,
50186c93d9c46415cf7746351c502a3513f637e77e4root/* Following are encode buffer types */
50286c93d9c46415cf7746351c502a3513f637e77e4root    VAEncCodedBufferType		= 21,
50386c93d9c46415cf7746351c502a3513f637e77e4root    VAEncSequenceParameterBufferType	= 22,
50486c93d9c46415cf7746351c502a3513f637e77e4root    VAEncPictureParameterBufferType	= 23,
50586c93d9c46415cf7746351c502a3513f637e77e4root    VAEncSliceParameterBufferType	= 24,
50686c93d9c46415cf7746351c502a3513f637e77e4root    VAEncH264VUIBufferType		= 25,
50786c93d9c46415cf7746351c502a3513f637e77e4root    VAEncH264SEIBufferType		= 26,
508901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    VAEncMiscParameterBufferType	= 27
50986c93d9c46415cf7746351c502a3513f637e77e4root} VABufferType;
51086c93d9c46415cf7746351c502a3513f637e77e4root
511901c77a7aa491f56b63af7b655b67439481e4177Fei Jiangtypedef enum
512901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang{
513901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    VAEncMiscParameterTypeFrameRate 	= 0,
514901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    VAEncMiscParameterTypeBitRate    	= 1,
515901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    VAEncMiscParameterTypeMaxSliceSize	= 2,
516901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    VAEncMiscParameterTypeAIR    	= 3,
517901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang} VAEncMiscParameterType;
518901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang
519901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang/*
520901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang *  For application, e.g. set a new bitrate
521901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang *    VABufferID buf_id;
522901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang *    VAEncMiscParameterBuffer *misc_param;
523901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang *    VAEncMiscParameterBitRate *misc_bitrate;
524901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang *
525901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang *    vaCreateBuffer(dpy, context, VAEncMiscParameterBufferType,
526901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang *              sizeof(VAEncMiscParameterBuffer) + sizeof(VAEncMiscParameterBitRate),
527901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang *              1, NULL, &buf_id);
528901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang *
529901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang *    vaMapBuffer(dpy,buf_id,(void **)&misc_param);
530901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang *    misc_param->type = VAEncMiscParameterTypeAIR;
531901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang *    misc_bitrate = (VAEncMiscParameterBitRate *)misc_param->data;
532901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang *    misc_bitrate->bitrate = 6400000;
533901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang *
534901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang *    vaRenderPicture(dpy, context, &buf_id, 1);
535901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang */
536901c77a7aa491f56b63af7b655b67439481e4177Fei Jiangtypedef struct _VAEncMiscParameterBuffer
537901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang{
538901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    VAEncMiscParameterType type;
539901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    unsigned int data[0];
540901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang} VAEncMiscParameterBuffer;
541901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang
542901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang
543901c77a7aa491f56b63af7b655b67439481e4177Fei Jiangtypedef struct _VAEncMiscParameterBitRate
544901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang{
545901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    unsigned int bitrate;
546901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang} VAEncMiscParameterBitRate;
547901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang
548901c77a7aa491f56b63af7b655b67439481e4177Fei Jiangtypedef struct _VAEncMiscParameterFrameRate
549901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang{
550901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    unsigned int framerate;
551901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang} VAEncMiscParameterFrameRate;
552901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang
553901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang/*
554901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * Allow a maximum slice size to be specified (in bits).
555901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * The encoder will attempt to make sure that individual slices do not exceed this size
556901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * Or to signal applicate if the slice size exceed this size, see "status" of VACodedBufferSegment
557901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang */
558901c77a7aa491f56b63af7b655b67439481e4177Fei Jiangtypedef struct _VAEncMiscParameterMaxSliceSize
559901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang{
560901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    unsigned int max_slice_size;
561901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang} VAEncMiscParameterMaxSliceSize;
562901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang
563901c77a7aa491f56b63af7b655b67439481e4177Fei Jiangtypedef struct _VAEncMiscParameterAIR
564901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang{
565901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    unsigned int air_num_mbs;
566901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    unsigned int air_threshold;
567901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    unsigned int air_auto; /* if set to 1 then hardware auto-tune the AIR threshold */
568901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang} VAEncMiscParameterAIR;
569901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang
57086c93d9c46415cf7746351c502a3513f637e77e4root
57186c93d9c46415cf7746351c502a3513f637e77e4root/*
57286c93d9c46415cf7746351c502a3513f637e77e4root * There will be cases where the bitstream buffer will not have enough room to hold
57386c93d9c46415cf7746351c502a3513f637e77e4root * the data for the entire slice, and the following flags will be used in the slice
57486c93d9c46415cf7746351c502a3513f637e77e4root * parameter to signal to the server for the possible cases.
57586c93d9c46415cf7746351c502a3513f637e77e4root * If a slice parameter buffer and slice data buffer pair is sent to the server with
57686c93d9c46415cf7746351c502a3513f637e77e4root * the slice data partially in the slice data buffer (BEGIN and MIDDLE cases below),
57786c93d9c46415cf7746351c502a3513f637e77e4root * then a slice parameter and data buffer needs to be sent again to complete this slice.
57886c93d9c46415cf7746351c502a3513f637e77e4root */
57986c93d9c46415cf7746351c502a3513f637e77e4root#define VA_SLICE_DATA_FLAG_ALL		0x00	/* whole slice is in the buffer */
58086c93d9c46415cf7746351c502a3513f637e77e4root#define VA_SLICE_DATA_FLAG_BEGIN	0x01	/* The beginning of the slice is in the buffer but the end if not */
58186c93d9c46415cf7746351c502a3513f637e77e4root#define VA_SLICE_DATA_FLAG_MIDDLE	0x02	/* Neither beginning nor end of the slice is in the buffer */
58286c93d9c46415cf7746351c502a3513f637e77e4root#define VA_SLICE_DATA_FLAG_END		0x04	/* end of the slice is in the buffer */
58386c93d9c46415cf7746351c502a3513f637e77e4root
58486c93d9c46415cf7746351c502a3513f637e77e4root/* Codec-independent Slice Parameter Buffer base */
58586c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VASliceParameterBufferBase
58686c93d9c46415cf7746351c502a3513f637e77e4root{
58786c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int slice_data_size;	/* number of bytes in the slice data buffer for this slice */
58886c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int slice_data_offset;	/* the offset to the first byte of slice data */
58986c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int slice_data_flag;	/* see VA_SLICE_DATA_FLAG_XXX definitions */
59086c93d9c46415cf7746351c502a3513f637e77e4root} VASliceParameterBufferBase;
59186c93d9c46415cf7746351c502a3513f637e77e4root
592b0fac498ca4863166252f1268fda83394db54153Fei Jiang
593b0fac498ca4863166252f1268fda83394db54153Fei Jiang/****************************
594b0fac498ca4863166252f1268fda83394db54153Fei Jiang * JEPG data structure
595b0fac498ca4863166252f1268fda83394db54153Fei Jiang ***************************/
596b0fac498ca4863166252f1268fda83394db54153Fei Jiangtypedef struct _VAQMatrixBufferJPEG
597b0fac498ca4863166252f1268fda83394db54153Fei Jiang{
598b0fac498ca4863166252f1268fda83394db54153Fei Jiang    int load_lum_quantiser_matrix;
599b0fac498ca4863166252f1268fda83394db54153Fei Jiang    int load_chroma_quantiser_matrix;
600b0fac498ca4863166252f1268fda83394db54153Fei Jiang    unsigned char lum_quantiser_matrix[64];
601b0fac498ca4863166252f1268fda83394db54153Fei Jiang    unsigned char chroma_quantiser_matrix[64];
602b0fac498ca4863166252f1268fda83394db54153Fei Jiang} VAQMatrixBufferJPEG;
603b0fac498ca4863166252f1268fda83394db54153Fei Jiang
604b0fac498ca4863166252f1268fda83394db54153Fei Jiangtypedef struct _VAEncPictureParameterBufferJPEG
605b0fac498ca4863166252f1268fda83394db54153Fei Jiang{
606b0fac498ca4863166252f1268fda83394db54153Fei Jiang    VASurfaceID reconstructed_picture;
607b0fac498ca4863166252f1268fda83394db54153Fei Jiang    unsigned short picture_width;
608b0fac498ca4863166252f1268fda83394db54153Fei Jiang    unsigned short picture_height;
609b0fac498ca4863166252f1268fda83394db54153Fei Jiang    VABufferID coded_buf;
610b0fac498ca4863166252f1268fda83394db54153Fei Jiang} VAEncPictureParameterBufferJPEG;
611b0fac498ca4863166252f1268fda83394db54153Fei Jiang
612b0fac498ca4863166252f1268fda83394db54153Fei Jiang
61386c93d9c46415cf7746351c502a3513f637e77e4root/****************************
61486c93d9c46415cf7746351c502a3513f637e77e4root * MPEG-2 data structures
61586c93d9c46415cf7746351c502a3513f637e77e4root ****************************/
61686c93d9c46415cf7746351c502a3513f637e77e4root
61786c93d9c46415cf7746351c502a3513f637e77e4root/* MPEG-2 Picture Parameter Buffer */
61886c93d9c46415cf7746351c502a3513f637e77e4root/*
61986c93d9c46415cf7746351c502a3513f637e77e4root * For each frame or field, and before any slice data, a single
62086c93d9c46415cf7746351c502a3513f637e77e4root * picture parameter buffer must be send.
62186c93d9c46415cf7746351c502a3513f637e77e4root */
62286c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAPictureParameterBufferMPEG2
62386c93d9c46415cf7746351c502a3513f637e77e4root{
62486c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short horizontal_size;
62586c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short vertical_size;
62686c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID forward_reference_picture;
62786c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID backward_reference_picture;
62886c93d9c46415cf7746351c502a3513f637e77e4root    /* meanings of the following fields are the same as in the standard */
62986c93d9c46415cf7746351c502a3513f637e77e4root    int picture_coding_type;
63086c93d9c46415cf7746351c502a3513f637e77e4root    int f_code; /* pack all four fcode into this */
63186c93d9c46415cf7746351c502a3513f637e77e4root    union {
63286c93d9c46415cf7746351c502a3513f637e77e4root        struct {
63386c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int intra_dc_precision		: 2;
63486c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int picture_structure		: 2;
63586c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int top_field_first		: 1;
63686c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int frame_pred_frame_dct		: 1;
63786c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int concealment_motion_vectors	: 1;
63886c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int q_scale_type			: 1;
63986c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int intra_vlc_format		: 1;
64086c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int alternate_scan			: 1;
64186c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int repeat_first_field		: 1;
64286c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int progressive_frame		: 1;
64386c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int is_first_field			: 1; /* indicate whether the current field
64486c93d9c46415cf7746351c502a3513f637e77e4root                                                              * is the first field for field picture
64586c93d9c46415cf7746351c502a3513f637e77e4root                                                              */
64686c93d9c46415cf7746351c502a3513f637e77e4root        } bits;
64786c93d9c46415cf7746351c502a3513f637e77e4root        unsigned int value;
64886c93d9c46415cf7746351c502a3513f637e77e4root    } picture_coding_extension;
64986c93d9c46415cf7746351c502a3513f637e77e4root} VAPictureParameterBufferMPEG2;
65086c93d9c46415cf7746351c502a3513f637e77e4root
65186c93d9c46415cf7746351c502a3513f637e77e4root/* MPEG-2 Inverse Quantization Matrix Buffer */
65286c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAIQMatrixBufferMPEG2
65386c93d9c46415cf7746351c502a3513f637e77e4root{
65486c93d9c46415cf7746351c502a3513f637e77e4root    int load_intra_quantiser_matrix;
65586c93d9c46415cf7746351c502a3513f637e77e4root    int load_non_intra_quantiser_matrix;
65686c93d9c46415cf7746351c502a3513f637e77e4root    int load_chroma_intra_quantiser_matrix;
65786c93d9c46415cf7746351c502a3513f637e77e4root    int load_chroma_non_intra_quantiser_matrix;
65886c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char intra_quantiser_matrix[64];
65986c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char non_intra_quantiser_matrix[64];
66086c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char chroma_intra_quantiser_matrix[64];
66186c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char chroma_non_intra_quantiser_matrix[64];
66286c93d9c46415cf7746351c502a3513f637e77e4root} VAIQMatrixBufferMPEG2;
66386c93d9c46415cf7746351c502a3513f637e77e4root
66486c93d9c46415cf7746351c502a3513f637e77e4root/* MPEG-2 Slice Parameter Buffer */
66586c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VASliceParameterBufferMPEG2
66686c93d9c46415cf7746351c502a3513f637e77e4root{
66786c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int slice_data_size;/* number of bytes in the slice data buffer for this slice */
66886c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int slice_data_offset;/* the offset to the first byte of slice data */
66986c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */
67086c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */
67186c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int slice_horizontal_position;
67286c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int slice_vertical_position;
67386c93d9c46415cf7746351c502a3513f637e77e4root    int quantiser_scale_code;
67486c93d9c46415cf7746351c502a3513f637e77e4root    int intra_slice_flag;
67586c93d9c46415cf7746351c502a3513f637e77e4root} VASliceParameterBufferMPEG2;
67686c93d9c46415cf7746351c502a3513f637e77e4root
67786c93d9c46415cf7746351c502a3513f637e77e4root/* MPEG-2 Macroblock Parameter Buffer */
67886c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAMacroblockParameterBufferMPEG2
67986c93d9c46415cf7746351c502a3513f637e77e4root{
68086c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short macroblock_address;
68186c93d9c46415cf7746351c502a3513f637e77e4root    /*
68286c93d9c46415cf7746351c502a3513f637e77e4root     * macroblock_address (in raster scan order)
68386c93d9c46415cf7746351c502a3513f637e77e4root     * top-left: 0
68486c93d9c46415cf7746351c502a3513f637e77e4root     * bottom-right: picture-height-in-mb*picture-width-in-mb - 1
68586c93d9c46415cf7746351c502a3513f637e77e4root     */
68686c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char macroblock_type;  /* see definition below */
68786c93d9c46415cf7746351c502a3513f637e77e4root    union {
68886c93d9c46415cf7746351c502a3513f637e77e4root        struct {
68986c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int frame_motion_type		: 2;
69086c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int field_motion_type		: 2;
69186c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int dct_type			: 1;
69286c93d9c46415cf7746351c502a3513f637e77e4root        } bits;
69386c93d9c46415cf7746351c502a3513f637e77e4root        unsigned int value;
69486c93d9c46415cf7746351c502a3513f637e77e4root    } macroblock_modes;
69586c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char motion_vertical_field_select;
69686c93d9c46415cf7746351c502a3513f637e77e4root    /*
69786c93d9c46415cf7746351c502a3513f637e77e4root     * motion_vertical_field_select:
69886c93d9c46415cf7746351c502a3513f637e77e4root     * see section 6.3.17.2 in the spec
69986c93d9c46415cf7746351c502a3513f637e77e4root     * only the lower 4 bits are used
70086c93d9c46415cf7746351c502a3513f637e77e4root     * bit 0: first vector forward
70186c93d9c46415cf7746351c502a3513f637e77e4root     * bit 1: first vector backward
70286c93d9c46415cf7746351c502a3513f637e77e4root     * bit 2: second vector forward
70386c93d9c46415cf7746351c502a3513f637e77e4root     * bit 3: second vector backward
70486c93d9c46415cf7746351c502a3513f637e77e4root     */
70586c93d9c46415cf7746351c502a3513f637e77e4root    short PMV[2][2][2]; /* see Table 7-7 in the spec */
70686c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short coded_block_pattern;
70786c93d9c46415cf7746351c502a3513f637e77e4root    /*
70886c93d9c46415cf7746351c502a3513f637e77e4root     * The bitplanes for coded_block_pattern are described
70986c93d9c46415cf7746351c502a3513f637e77e4root     * in Figure 6.10-12 in the spec
71086c93d9c46415cf7746351c502a3513f637e77e4root     */
71186c93d9c46415cf7746351c502a3513f637e77e4root
71286c93d9c46415cf7746351c502a3513f637e77e4root    /* Number of skipped macroblocks after this macroblock */
71386c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short num_skipped_macroblocks;
71486c93d9c46415cf7746351c502a3513f637e77e4root} VAMacroblockParameterBufferMPEG2;
71586c93d9c46415cf7746351c502a3513f637e77e4root
71686c93d9c46415cf7746351c502a3513f637e77e4root/*
71786c93d9c46415cf7746351c502a3513f637e77e4root * OR'd flags for macroblock_type (section 6.3.17.1 in the spec)
71886c93d9c46415cf7746351c502a3513f637e77e4root */
71986c93d9c46415cf7746351c502a3513f637e77e4root#define VA_MB_TYPE_MOTION_FORWARD	0x02
72086c93d9c46415cf7746351c502a3513f637e77e4root#define VA_MB_TYPE_MOTION_BACKWARD	0x04
72186c93d9c46415cf7746351c502a3513f637e77e4root#define VA_MB_TYPE_MOTION_PATTERN	0x08
72286c93d9c46415cf7746351c502a3513f637e77e4root#define VA_MB_TYPE_MOTION_INTRA		0x10
72386c93d9c46415cf7746351c502a3513f637e77e4root
72486c93d9c46415cf7746351c502a3513f637e77e4root/*
72586c93d9c46415cf7746351c502a3513f637e77e4root * MPEG-2 Residual Data Buffer
72686c93d9c46415cf7746351c502a3513f637e77e4root * For each macroblock, there wil be 64 shorts (16-bit) in the
72786c93d9c46415cf7746351c502a3513f637e77e4root * residual data buffer
72886c93d9c46415cf7746351c502a3513f637e77e4root */
72986c93d9c46415cf7746351c502a3513f637e77e4root
73086c93d9c46415cf7746351c502a3513f637e77e4root/****************************
73186c93d9c46415cf7746351c502a3513f637e77e4root * MPEG-4 Part 2 data structures
73286c93d9c46415cf7746351c502a3513f637e77e4root ****************************/
73386c93d9c46415cf7746351c502a3513f637e77e4root
73486c93d9c46415cf7746351c502a3513f637e77e4root/* MPEG-4 Picture Parameter Buffer */
73586c93d9c46415cf7746351c502a3513f637e77e4root/*
73686c93d9c46415cf7746351c502a3513f637e77e4root * For each frame or field, and before any slice data, a single
73786c93d9c46415cf7746351c502a3513f637e77e4root * picture parameter buffer must be send.
73886c93d9c46415cf7746351c502a3513f637e77e4root */
73986c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAPictureParameterBufferMPEG4
74086c93d9c46415cf7746351c502a3513f637e77e4root{
74186c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short vop_width;
74286c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short vop_height;
74386c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID forward_reference_picture;
74486c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID backward_reference_picture;
74586c93d9c46415cf7746351c502a3513f637e77e4root    union {
74686c93d9c46415cf7746351c502a3513f637e77e4root        struct {
74786c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int short_video_header		: 1;
74886c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int chroma_format			: 2;
74986c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int interlaced			: 1;
75086c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int obmc_disable			: 1;
75186c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int sprite_enable			: 2;
75286c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int sprite_warping_accuracy	: 2;
75386c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int quant_type			: 1;
75486c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int quarter_sample			: 1;
75586c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int data_partitioned		: 1;
75686c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int reversible_vlc			: 1;
75786c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int resync_marker_disable		: 1;
75886c93d9c46415cf7746351c502a3513f637e77e4root        } bits;
75986c93d9c46415cf7746351c502a3513f637e77e4root        unsigned int value;
76086c93d9c46415cf7746351c502a3513f637e77e4root    } vol_fields;
76186c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char no_of_sprite_warping_points;
76286c93d9c46415cf7746351c502a3513f637e77e4root    short sprite_trajectory_du[3];
76386c93d9c46415cf7746351c502a3513f637e77e4root    short sprite_trajectory_dv[3];
76486c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char quant_precision;
76586c93d9c46415cf7746351c502a3513f637e77e4root    union {
76686c93d9c46415cf7746351c502a3513f637e77e4root        struct {
76786c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int vop_coding_type		: 2;
76886c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int backward_reference_vop_coding_type	: 2;
76986c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int vop_rounding_type		: 1;
77086c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int intra_dc_vlc_thr		: 3;
77186c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int top_field_first		: 1;
77286c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int alternate_vertical_scan_flag	: 1;
77386c93d9c46415cf7746351c502a3513f637e77e4root        } bits;
77486c93d9c46415cf7746351c502a3513f637e77e4root        unsigned int value;
77586c93d9c46415cf7746351c502a3513f637e77e4root    } vop_fields;
77686c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char vop_fcode_forward;
77786c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char vop_fcode_backward;
77886c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short vop_time_increment_resolution;
77986c93d9c46415cf7746351c502a3513f637e77e4root    /* short header related */
78086c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char num_gobs_in_vop;
78186c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char num_macroblocks_in_gob;
78286c93d9c46415cf7746351c502a3513f637e77e4root    /* for direct mode prediction */
78386c93d9c46415cf7746351c502a3513f637e77e4root    short TRB;
78486c93d9c46415cf7746351c502a3513f637e77e4root    short TRD;
78586c93d9c46415cf7746351c502a3513f637e77e4root} VAPictureParameterBufferMPEG4;
78686c93d9c46415cf7746351c502a3513f637e77e4root
78786c93d9c46415cf7746351c502a3513f637e77e4root/* MPEG-4 Inverse Quantization Matrix Buffer */
78886c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAIQMatrixBufferMPEG4
78986c93d9c46415cf7746351c502a3513f637e77e4root{
79086c93d9c46415cf7746351c502a3513f637e77e4root    int load_intra_quant_mat;
79186c93d9c46415cf7746351c502a3513f637e77e4root    int load_non_intra_quant_mat;
79286c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char intra_quant_mat[64];
79386c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char non_intra_quant_mat[64];
79486c93d9c46415cf7746351c502a3513f637e77e4root} VAIQMatrixBufferMPEG4;
79586c93d9c46415cf7746351c502a3513f637e77e4root
79686c93d9c46415cf7746351c502a3513f637e77e4root/* MPEG-4 Slice Parameter Buffer */
79786c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VASliceParameterBufferMPEG4
79886c93d9c46415cf7746351c502a3513f637e77e4root{
79986c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int slice_data_size;/* number of bytes in the slice data buffer for this slice */
80086c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int slice_data_offset;/* the offset to the first byte of slice data */
80186c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */
80286c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */
80386c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int macroblock_number;
80486c93d9c46415cf7746351c502a3513f637e77e4root    int quant_scale;
80586c93d9c46415cf7746351c502a3513f637e77e4root} VASliceParameterBufferMPEG4;
80686c93d9c46415cf7746351c502a3513f637e77e4root
80786c93d9c46415cf7746351c502a3513f637e77e4root/*
80886c93d9c46415cf7746351c502a3513f637e77e4root VC-1 data structures
80986c93d9c46415cf7746351c502a3513f637e77e4root*/
81086c93d9c46415cf7746351c502a3513f637e77e4root
81186c93d9c46415cf7746351c502a3513f637e77e4roottypedef enum   /* see 7.1.1.32 */
81286c93d9c46415cf7746351c502a3513f637e77e4root{
81386c93d9c46415cf7746351c502a3513f637e77e4root    VAMvMode1Mv                        = 0,
81486c93d9c46415cf7746351c502a3513f637e77e4root    VAMvMode1MvHalfPel                 = 1,
81586c93d9c46415cf7746351c502a3513f637e77e4root    VAMvMode1MvHalfPelBilinear         = 2,
81686c93d9c46415cf7746351c502a3513f637e77e4root    VAMvModeMixedMv                    = 3,
81786c93d9c46415cf7746351c502a3513f637e77e4root    VAMvModeIntensityCompensation      = 4
81886c93d9c46415cf7746351c502a3513f637e77e4root} VAMvModeVC1;
81986c93d9c46415cf7746351c502a3513f637e77e4root
82086c93d9c46415cf7746351c502a3513f637e77e4root/* VC-1 Picture Parameter Buffer */
82186c93d9c46415cf7746351c502a3513f637e77e4root/*
82286c93d9c46415cf7746351c502a3513f637e77e4root * For each picture, and before any slice data, a picture parameter
82386c93d9c46415cf7746351c502a3513f637e77e4root * buffer must be send. Multiple picture parameter buffers may be
82486c93d9c46415cf7746351c502a3513f637e77e4root * sent for a single picture. In that case picture parameters will
82586c93d9c46415cf7746351c502a3513f637e77e4root * apply to all slice data that follow it until a new picture
82686c93d9c46415cf7746351c502a3513f637e77e4root * parameter buffer is sent.
82786c93d9c46415cf7746351c502a3513f637e77e4root *
82886c93d9c46415cf7746351c502a3513f637e77e4root * Notes:
82986c93d9c46415cf7746351c502a3513f637e77e4root *   pic_quantizer_type should be set to the applicable quantizer
83086c93d9c46415cf7746351c502a3513f637e77e4root *   type as defined by QUANTIZER (J.1.19) and either
83186c93d9c46415cf7746351c502a3513f637e77e4root *   PQUANTIZER (7.1.1.8) or PQINDEX (7.1.1.6)
83286c93d9c46415cf7746351c502a3513f637e77e4root */
83386c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAPictureParameterBufferVC1
83486c93d9c46415cf7746351c502a3513f637e77e4root{
83586c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID forward_reference_picture;
83686c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID backward_reference_picture;
83786c93d9c46415cf7746351c502a3513f637e77e4root    /* if out-of-loop post-processing is done on the render
83886c93d9c46415cf7746351c502a3513f637e77e4root       target, then we need to keep the in-loop decoded
83986c93d9c46415cf7746351c502a3513f637e77e4root       picture as a reference picture */
84086c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID inloop_decoded_picture;
84186c93d9c46415cf7746351c502a3513f637e77e4root
84286c93d9c46415cf7746351c502a3513f637e77e4root    /* sequence layer for AP or meta data for SP and MP */
84386c93d9c46415cf7746351c502a3513f637e77e4root    union {
84486c93d9c46415cf7746351c502a3513f637e77e4root        struct {
84586c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int pulldown	: 1; /* SEQUENCE_LAYER::PULLDOWN */
84686c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int interlace	: 1; /* SEQUENCE_LAYER::INTERLACE */
84786c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int tfcntrflag	: 1; /* SEQUENCE_LAYER::TFCNTRFLAG */
84886c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int finterpflag	: 1; /* SEQUENCE_LAYER::FINTERPFLAG */
84986c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int psf		: 1; /* SEQUENCE_LAYER::PSF */
85086c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int multires	: 1; /* METADATA::MULTIRES */
85186c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int overlap	: 1; /* METADATA::OVERLAP */
85286c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int syncmarker	: 1; /* METADATA::SYNCMARKER */
85386c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int rangered	: 1; /* METADATA::RANGERED */
85486c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int max_b_frames	: 3; /* METADATA::MAXBFRAMES */
85586c93d9c46415cf7746351c502a3513f637e77e4root        } bits;
85686c93d9c46415cf7746351c502a3513f637e77e4root        unsigned int value;
85786c93d9c46415cf7746351c502a3513f637e77e4root    } sequence_fields;
85886c93d9c46415cf7746351c502a3513f637e77e4root
85986c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short coded_width;		/* ENTRY_POINT_LAYER::CODED_WIDTH */
86086c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short coded_height;	/* ENTRY_POINT_LAYER::CODED_HEIGHT */
86186c93d9c46415cf7746351c502a3513f637e77e4root    union {
86286c93d9c46415cf7746351c502a3513f637e77e4root	struct {
86386c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int broken_link	: 1; /* ENTRY_POINT_LAYER::BROKEN_LINK */
86486c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int closed_entry	: 1; /* ENTRY_POINT_LAYER::CLOSED_ENTRY */
86586c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int panscan_flag	: 1; /* ENTRY_POINT_LAYER::PANSCAN_FLAG */
86686c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int loopfilter	: 1; /* ENTRY_POINT_LAYER::LOOPFILTER */
86786c93d9c46415cf7746351c502a3513f637e77e4root	} bits;
86886c93d9c46415cf7746351c502a3513f637e77e4root	unsigned int value;
86986c93d9c46415cf7746351c502a3513f637e77e4root    } entrypoint_fields;
87086c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char conditional_overlap_flag; /* ENTRY_POINT_LAYER::CONDOVER */
87186c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char fast_uvmc_flag;	/* ENTRY_POINT_LAYER::FASTUVMC */
87286c93d9c46415cf7746351c502a3513f637e77e4root    union {
87386c93d9c46415cf7746351c502a3513f637e77e4root        struct {
87486c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int luma_flag	: 1; /* ENTRY_POINT_LAYER::RANGE_MAPY_FLAG */
87586c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int luma		: 3; /* ENTRY_POINT_LAYER::RANGE_MAPY */
87686c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int chroma_flag	: 1; /* ENTRY_POINT_LAYER::RANGE_MAPUV_FLAG */
87786c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int chroma		: 3; /* ENTRY_POINT_LAYER::RANGE_MAPUV */
87886c93d9c46415cf7746351c502a3513f637e77e4root        } bits;
87986c93d9c46415cf7746351c502a3513f637e77e4root        unsigned int value;
88086c93d9c46415cf7746351c502a3513f637e77e4root    } range_mapping_fields;
88186c93d9c46415cf7746351c502a3513f637e77e4root
88286c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char b_picture_fraction;	/* PICTURE_LAYER::BFRACTION */
88386c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char cbp_table;		/* PICTURE_LAYER::CBPTAB/ICBPTAB */
88486c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char mb_mode_table;	/* PICTURE_LAYER::MBMODETAB */
88586c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char range_reduction_frame;/* PICTURE_LAYER::RANGEREDFRM */
88686c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char rounding_control;	/* PICTURE_LAYER::RNDCTRL */
88786c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char post_processing;	/* PICTURE_LAYER::POSTPROC */
88886c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char picture_resolution_index;	/* PICTURE_LAYER::RESPIC */
88986c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char luma_scale;		/* PICTURE_LAYER::LUMSCALE */
89086c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char luma_shift;		/* PICTURE_LAYER::LUMSHIFT */
89186c93d9c46415cf7746351c502a3513f637e77e4root    union {
89286c93d9c46415cf7746351c502a3513f637e77e4root        struct {
89386c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int picture_type		: 3; /* PICTURE_LAYER::PTYPE */
89486c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int frame_coding_mode	: 3; /* PICTURE_LAYER::FCM */
89586c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int top_field_first	: 1; /* PICTURE_LAYER::TFF */
89686c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int is_first_field		: 1; /* set to 1 if it is the first field */
89786c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int intensity_compensation	: 1; /* PICTURE_LAYER::INTCOMP */
89886c93d9c46415cf7746351c502a3513f637e77e4root        } bits;
89986c93d9c46415cf7746351c502a3513f637e77e4root        unsigned int value;
90086c93d9c46415cf7746351c502a3513f637e77e4root    } picture_fields;
90186c93d9c46415cf7746351c502a3513f637e77e4root    union {
90286c93d9c46415cf7746351c502a3513f637e77e4root        struct {
90386c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int mv_type_mb	: 1; 	/* PICTURE::MVTYPEMB */
90486c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int direct_mb	: 1; 	/* PICTURE::DIRECTMB */
90586c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int skip_mb	: 1; 	/* PICTURE::SKIPMB */
90686c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int field_tx	: 1; 	/* PICTURE::FIELDTX */
90786c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int forward_mb	: 1;	/* PICTURE::FORWARDMB */
90886c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int ac_pred	: 1;	/* PICTURE::ACPRED */
90986c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int overflags	: 1;	/* PICTURE::OVERFLAGS */
91086c93d9c46415cf7746351c502a3513f637e77e4root        } flags;
91186c93d9c46415cf7746351c502a3513f637e77e4root        unsigned int value;
91286c93d9c46415cf7746351c502a3513f637e77e4root    } raw_coding;
91386c93d9c46415cf7746351c502a3513f637e77e4root    union {
91486c93d9c46415cf7746351c502a3513f637e77e4root        struct {
91586c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int bp_mv_type_mb   : 1;    /* PICTURE::MVTYPEMB */
91686c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int bp_direct_mb    : 1;    /* PICTURE::DIRECTMB */
91786c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int bp_skip_mb      : 1;    /* PICTURE::SKIPMB */
91886c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int bp_field_tx     : 1;    /* PICTURE::FIELDTX */
91986c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int bp_forward_mb   : 1;    /* PICTURE::FORWARDMB */
92086c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int bp_ac_pred      : 1;    /* PICTURE::ACPRED */
92186c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int bp_overflags    : 1;    /* PICTURE::OVERFLAGS */
92286c93d9c46415cf7746351c502a3513f637e77e4root        } flags;
92386c93d9c46415cf7746351c502a3513f637e77e4root        unsigned int value;
92486c93d9c46415cf7746351c502a3513f637e77e4root    } bitplane_present; /* signal what bitplane is being passed via the bitplane buffer */
92586c93d9c46415cf7746351c502a3513f637e77e4root    union {
92686c93d9c46415cf7746351c502a3513f637e77e4root        struct {
92786c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int reference_distance_flag : 1;/* PICTURE_LAYER::REFDIST_FLAG */
92886c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int reference_distance	: 5;/* PICTURE_LAYER::REFDIST */
92986c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int num_reference_pictures: 1;/* PICTURE_LAYER::NUMREF */
93086c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int reference_field_pic_indicator	: 1;/* PICTURE_LAYER::REFFIELD */
93186c93d9c46415cf7746351c502a3513f637e77e4root        } bits;
93286c93d9c46415cf7746351c502a3513f637e77e4root        unsigned int value;
93386c93d9c46415cf7746351c502a3513f637e77e4root    } reference_fields;
93486c93d9c46415cf7746351c502a3513f637e77e4root    union {
93586c93d9c46415cf7746351c502a3513f637e77e4root        struct {
93686c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int mv_mode		: 3; /* PICTURE_LAYER::MVMODE */
93786c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int mv_mode2		: 3; /* PICTURE_LAYER::MVMODE2 */
93886c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int mv_table		: 3; /* PICTURE_LAYER::MVTAB/IMVTAB */
93986c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int two_mv_block_pattern_table: 2; /* PICTURE_LAYER::2MVBPTAB */
94086c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int four_mv_switch		: 1; /* PICTURE_LAYER::4MVSWITCH */
94186c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int four_mv_block_pattern_table : 2; /* PICTURE_LAYER::4MVBPTAB */
94286c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int extended_mv_flag	: 1; /* ENTRY_POINT_LAYER::EXTENDED_MV */
94386c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int extended_mv_range	: 2; /* PICTURE_LAYER::MVRANGE */
94486c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int extended_dmv_flag	: 1; /* ENTRY_POINT_LAYER::EXTENDED_DMV */
94586c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int extended_dmv_range	: 2; /* PICTURE_LAYER::DMVRANGE */
94686c93d9c46415cf7746351c502a3513f637e77e4root        } bits;
94786c93d9c46415cf7746351c502a3513f637e77e4root        unsigned int value;
94886c93d9c46415cf7746351c502a3513f637e77e4root    } mv_fields;
94986c93d9c46415cf7746351c502a3513f637e77e4root    union {
95086c93d9c46415cf7746351c502a3513f637e77e4root        struct {
95186c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int dquant	: 2; 	/* ENTRY_POINT_LAYER::DQUANT */
95286c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int quantizer     : 2; 	/* ENTRY_POINT_LAYER::QUANTIZER */
95386c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int half_qp	: 1; 	/* PICTURE_LAYER::HALFQP */
95486c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int pic_quantizer_scale : 5;/* PICTURE_LAYER::PQUANT */
95586c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int pic_quantizer_type : 1;/* PICTURE_LAYER::PQUANTIZER */
95686c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int dq_frame	: 1; 	/* VOPDQUANT::DQUANTFRM */
95786c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int dq_profile	: 2; 	/* VOPDQUANT::DQPROFILE */
95886c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int dq_sb_edge	: 2; 	/* VOPDQUANT::DQSBEDGE */
95986c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int dq_db_edge 	: 2; 	/* VOPDQUANT::DQDBEDGE */
96086c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int dq_binary_level : 1; 	/* VOPDQUANT::DQBILEVEL */
96186c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int alt_pic_quantizer : 5;/* VOPDQUANT::ALTPQUANT */
96286c93d9c46415cf7746351c502a3513f637e77e4root        } bits;
96386c93d9c46415cf7746351c502a3513f637e77e4root        unsigned int value;
96486c93d9c46415cf7746351c502a3513f637e77e4root    } pic_quantizer_fields;
96586c93d9c46415cf7746351c502a3513f637e77e4root    union {
96686c93d9c46415cf7746351c502a3513f637e77e4root        struct {
96786c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int variable_sized_transform_flag	: 1;/* ENTRY_POINT_LAYER::VSTRANSFORM */
96886c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int mb_level_transform_type_flag	: 1;/* PICTURE_LAYER::TTMBF */
96986c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int frame_level_transform_type	: 2;/* PICTURE_LAYER::TTFRM */
97086c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int transform_ac_codingset_idx1	: 2;/* PICTURE_LAYER::TRANSACFRM */
97186c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int transform_ac_codingset_idx2	: 2;/* PICTURE_LAYER::TRANSACFRM2 */
97286c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int intra_transform_dc_table	: 1;/* PICTURE_LAYER::TRANSDCTAB */
97386c93d9c46415cf7746351c502a3513f637e77e4root        } bits;
97486c93d9c46415cf7746351c502a3513f637e77e4root        unsigned int value;
97586c93d9c46415cf7746351c502a3513f637e77e4root    } transform_fields;
97686c93d9c46415cf7746351c502a3513f637e77e4root} VAPictureParameterBufferVC1;
97786c93d9c46415cf7746351c502a3513f637e77e4root
97886c93d9c46415cf7746351c502a3513f637e77e4root/* VC-1 Bitplane Buffer
97986c93d9c46415cf7746351c502a3513f637e77e4rootThere will be at most three bitplanes coded in any picture header. To send
98086c93d9c46415cf7746351c502a3513f637e77e4rootthe bitplane data more efficiently, each byte is divided in two nibbles, with
98186c93d9c46415cf7746351c502a3513f637e77e4rooteach nibble carrying three bitplanes for one macroblock.  The following table
98286c93d9c46415cf7746351c502a3513f637e77e4rootshows the bitplane data arrangement within each nibble based on the picture
98386c93d9c46415cf7746351c502a3513f637e77e4roottype.
98486c93d9c46415cf7746351c502a3513f637e77e4root
98586c93d9c46415cf7746351c502a3513f637e77e4rootPicture Type	Bit3		Bit2		Bit1		Bit0
98686c93d9c46415cf7746351c502a3513f637e77e4rootI or BI				OVERFLAGS	ACPRED		FIELDTX
98786c93d9c46415cf7746351c502a3513f637e77e4rootP				MYTYPEMB	SKIPMB		DIRECTMB
98886c93d9c46415cf7746351c502a3513f637e77e4rootB				FORWARDMB	SKIPMB		DIRECTMB
98986c93d9c46415cf7746351c502a3513f637e77e4root
99086c93d9c46415cf7746351c502a3513f637e77e4rootWithin each byte, the lower nibble is for the first MB and the upper nibble is
99186c93d9c46415cf7746351c502a3513f637e77e4rootfor the second MB.  E.g. the lower nibble of the first byte in the bitplane
99286c93d9c46415cf7746351c502a3513f637e77e4rootbuffer is for Macroblock #1 and the upper nibble of the first byte is for
99386c93d9c46415cf7746351c502a3513f637e77e4rootMacroblock #2 in the first row.
99486c93d9c46415cf7746351c502a3513f637e77e4root*/
99586c93d9c46415cf7746351c502a3513f637e77e4root
99686c93d9c46415cf7746351c502a3513f637e77e4root/* VC-1 Slice Parameter Buffer */
99786c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VASliceParameterBufferVC1
99886c93d9c46415cf7746351c502a3513f637e77e4root{
99986c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int slice_data_size;/* number of bytes in the slice data buffer for this slice */
100086c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int slice_data_offset;/* the offset to the first byte of slice data */
100186c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */
100286c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */
100386c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int slice_vertical_position;
100486c93d9c46415cf7746351c502a3513f637e77e4root} VASliceParameterBufferVC1;
100586c93d9c46415cf7746351c502a3513f637e77e4root
100686c93d9c46415cf7746351c502a3513f637e77e4root/* VC-1 Slice Data Buffer */
100786c93d9c46415cf7746351c502a3513f637e77e4root/*
100886c93d9c46415cf7746351c502a3513f637e77e4rootThis is simplely a buffer containing raw bit-stream bytes
100986c93d9c46415cf7746351c502a3513f637e77e4root*/
101086c93d9c46415cf7746351c502a3513f637e77e4root
101186c93d9c46415cf7746351c502a3513f637e77e4root/****************************
101286c93d9c46415cf7746351c502a3513f637e77e4root * H.264/AVC data structures
101386c93d9c46415cf7746351c502a3513f637e77e4root ****************************/
101486c93d9c46415cf7746351c502a3513f637e77e4root
101586c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAPictureH264
101686c93d9c46415cf7746351c502a3513f637e77e4root{
101786c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID picture_id;
101886c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int frame_idx;
101986c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int flags;
102086c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int TopFieldOrderCnt;
102186c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int BottomFieldOrderCnt;
102286c93d9c46415cf7746351c502a3513f637e77e4root} VAPictureH264;
102386c93d9c46415cf7746351c502a3513f637e77e4root/* flags in VAPictureH264 could be OR of the following */
102486c93d9c46415cf7746351c502a3513f637e77e4root#define VA_PICTURE_H264_INVALID			0x00000001
102586c93d9c46415cf7746351c502a3513f637e77e4root#define VA_PICTURE_H264_TOP_FIELD		0x00000002
102686c93d9c46415cf7746351c502a3513f637e77e4root#define VA_PICTURE_H264_BOTTOM_FIELD		0x00000004
102786c93d9c46415cf7746351c502a3513f637e77e4root#define VA_PICTURE_H264_SHORT_TERM_REFERENCE	0x00000008
102886c93d9c46415cf7746351c502a3513f637e77e4root#define VA_PICTURE_H264_LONG_TERM_REFERENCE	0x00000010
102986c93d9c46415cf7746351c502a3513f637e77e4root
103086c93d9c46415cf7746351c502a3513f637e77e4root/* H.264 Picture Parameter Buffer */
103186c93d9c46415cf7746351c502a3513f637e77e4root/*
103286c93d9c46415cf7746351c502a3513f637e77e4root * For each picture, and before any slice data, a single
103386c93d9c46415cf7746351c502a3513f637e77e4root * picture parameter buffer must be send.
103486c93d9c46415cf7746351c502a3513f637e77e4root */
103586c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAPictureParameterBufferH264
103686c93d9c46415cf7746351c502a3513f637e77e4root{
103786c93d9c46415cf7746351c502a3513f637e77e4root    VAPictureH264 CurrPic;
103886c93d9c46415cf7746351c502a3513f637e77e4root    VAPictureH264 ReferenceFrames[16];	/* in DPB */
103986c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short picture_width_in_mbs_minus1;
104086c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short picture_height_in_mbs_minus1;
104186c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char bit_depth_luma_minus8;
104286c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char bit_depth_chroma_minus8;
104386c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char num_ref_frames;
104486c93d9c46415cf7746351c502a3513f637e77e4root    union {
104586c93d9c46415cf7746351c502a3513f637e77e4root        struct {
104686c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int chroma_format_idc			: 2;
104786c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int residual_colour_transform_flag		: 1;
104886c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int gaps_in_frame_num_value_allowed_flag	: 1;
104986c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int frame_mbs_only_flag			: 1;
105086c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int mb_adaptive_frame_field_flag		: 1;
105186c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int direct_8x8_inference_flag		: 1;
105286c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int MinLumaBiPredSize8x8			: 1; /* see A.3.3.2 */
105386c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int log2_max_frame_num_minus4		: 4;
105486c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int pic_order_cnt_type			: 2;
105586c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int log2_max_pic_order_cnt_lsb_minus4	: 4;
105686c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int delta_pic_order_always_zero_flag	: 1;
105786c93d9c46415cf7746351c502a3513f637e77e4root        } bits;
105886c93d9c46415cf7746351c502a3513f637e77e4root        unsigned int value;
105986c93d9c46415cf7746351c502a3513f637e77e4root    } seq_fields;
106086c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char num_slice_groups_minus1;
106186c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char slice_group_map_type;
106286c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short slice_group_change_rate_minus1;
106386c93d9c46415cf7746351c502a3513f637e77e4root    signed char pic_init_qp_minus26;
106486c93d9c46415cf7746351c502a3513f637e77e4root    signed char pic_init_qs_minus26;
106586c93d9c46415cf7746351c502a3513f637e77e4root    signed char chroma_qp_index_offset;
106686c93d9c46415cf7746351c502a3513f637e77e4root    signed char second_chroma_qp_index_offset;
106786c93d9c46415cf7746351c502a3513f637e77e4root    union {
106886c93d9c46415cf7746351c502a3513f637e77e4root        struct {
106986c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int entropy_coding_mode_flag	: 1;
107086c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int weighted_pred_flag		: 1;
107186c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int weighted_bipred_idc		: 2;
107286c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int transform_8x8_mode_flag	: 1;
107386c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int field_pic_flag			: 1;
107486c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int constrained_intra_pred_flag	: 1;
107586c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int pic_order_present_flag			: 1;
107686c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int deblocking_filter_control_present_flag : 1;
107786c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int redundant_pic_cnt_present_flag		: 1;
107886c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int reference_pic_flag			: 1; /* nal_ref_idc != 0 */
107986c93d9c46415cf7746351c502a3513f637e77e4root        } bits;
108086c93d9c46415cf7746351c502a3513f637e77e4root        unsigned int value;
108186c93d9c46415cf7746351c502a3513f637e77e4root    } pic_fields;
108286c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short frame_num;
108386c93d9c46415cf7746351c502a3513f637e77e4root} VAPictureParameterBufferH264;
108486c93d9c46415cf7746351c502a3513f637e77e4root
108586c93d9c46415cf7746351c502a3513f637e77e4root/* H.264 Inverse Quantization Matrix Buffer */
108686c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAIQMatrixBufferH264
108786c93d9c46415cf7746351c502a3513f637e77e4root{
108886c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char ScalingList4x4[6][16];
108986c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char ScalingList8x8[2][64];
109086c93d9c46415cf7746351c502a3513f637e77e4root} VAIQMatrixBufferH264;
109186c93d9c46415cf7746351c502a3513f637e77e4root
109286c93d9c46415cf7746351c502a3513f637e77e4root/*
109386c93d9c46415cf7746351c502a3513f637e77e4root * H.264 Slice Group Map Buffer
109486c93d9c46415cf7746351c502a3513f637e77e4root * When VAPictureParameterBufferH264::num_slice_group_minus1 is not equal to 0,
109586c93d9c46415cf7746351c502a3513f637e77e4root * A slice group map buffer should be sent for each picture if required. The buffer
109686c93d9c46415cf7746351c502a3513f637e77e4root * is sent only when there is a change in the mapping values.
109786c93d9c46415cf7746351c502a3513f637e77e4root * The slice group map buffer map "map units" to slice groups as specified in
109886c93d9c46415cf7746351c502a3513f637e77e4root * section 8.2.2 of the H.264 spec. The buffer will contain one byte for each macroblock
109986c93d9c46415cf7746351c502a3513f637e77e4root * in raster scan order
110086c93d9c46415cf7746351c502a3513f637e77e4root */
110186c93d9c46415cf7746351c502a3513f637e77e4root
110286c93d9c46415cf7746351c502a3513f637e77e4root/* H.264 Slice Parameter Buffer */
110386c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VASliceParameterBufferH264
110486c93d9c46415cf7746351c502a3513f637e77e4root{
110586c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int slice_data_size;/* number of bytes in the slice data buffer for this slice */
110686c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int slice_data_offset;/* the offset to the NAL start code for this slice */
110786c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */
110886c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short slice_data_bit_offset; /* bit offset from NAL start code to the beginning of slice data */
110986c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short first_mb_in_slice;
111086c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char slice_type;
111186c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char direct_spatial_mv_pred_flag;
111286c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char num_ref_idx_l0_active_minus1;
111386c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char num_ref_idx_l1_active_minus1;
111486c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char cabac_init_idc;
111586c93d9c46415cf7746351c502a3513f637e77e4root    char slice_qp_delta;
111686c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char disable_deblocking_filter_idc;
111786c93d9c46415cf7746351c502a3513f637e77e4root    char slice_alpha_c0_offset_div2;
111886c93d9c46415cf7746351c502a3513f637e77e4root    char slice_beta_offset_div2;
111986c93d9c46415cf7746351c502a3513f637e77e4root    VAPictureH264 RefPicList0[32];	/* See 8.2.4.2 */
112086c93d9c46415cf7746351c502a3513f637e77e4root    VAPictureH264 RefPicList1[32];	/* See 8.2.4.2 */
112186c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char luma_log2_weight_denom;
112286c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char chroma_log2_weight_denom;
112386c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char luma_weight_l0_flag;
112486c93d9c46415cf7746351c502a3513f637e77e4root    short luma_weight_l0[32];
112586c93d9c46415cf7746351c502a3513f637e77e4root    short luma_offset_l0[32];
112686c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char chroma_weight_l0_flag;
112786c93d9c46415cf7746351c502a3513f637e77e4root    short chroma_weight_l0[32][2];
112886c93d9c46415cf7746351c502a3513f637e77e4root    short chroma_offset_l0[32][2];
112986c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char luma_weight_l1_flag;
113086c93d9c46415cf7746351c502a3513f637e77e4root    short luma_weight_l1[32];
113186c93d9c46415cf7746351c502a3513f637e77e4root    short luma_offset_l1[32];
113286c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char chroma_weight_l1_flag;
113386c93d9c46415cf7746351c502a3513f637e77e4root    short chroma_weight_l1[32][2];
113486c93d9c46415cf7746351c502a3513f637e77e4root    short chroma_offset_l1[32][2];
113586c93d9c46415cf7746351c502a3513f637e77e4root} VASliceParameterBufferH264;
113686c93d9c46415cf7746351c502a3513f637e77e4root
113786c93d9c46415cf7746351c502a3513f637e77e4root/****************************
113886c93d9c46415cf7746351c502a3513f637e77e4root * Common encode data structures
113986c93d9c46415cf7746351c502a3513f637e77e4root ****************************/
114086c93d9c46415cf7746351c502a3513f637e77e4roottypedef enum
114186c93d9c46415cf7746351c502a3513f637e77e4root{
114286c93d9c46415cf7746351c502a3513f637e77e4root    VAEncPictureTypeIntra		= 0,
114386c93d9c46415cf7746351c502a3513f637e77e4root    VAEncPictureTypePredictive		= 1,
114486c93d9c46415cf7746351c502a3513f637e77e4root    VAEncPictureTypeBidirectional	= 2,
114586c93d9c46415cf7746351c502a3513f637e77e4root} VAEncPictureType;
114686c93d9c46415cf7746351c502a3513f637e77e4root
114786c93d9c46415cf7746351c502a3513f637e77e4root/* Encode Slice Parameter Buffer */
114886c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAEncSliceParameterBuffer
114986c93d9c46415cf7746351c502a3513f637e77e4root{
115086c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int start_row_number;	/* starting MB row number for this slice */
115186c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int slice_height;	/* slice height measured in MB */
115286c93d9c46415cf7746351c502a3513f637e77e4root    union {
115386c93d9c46415cf7746351c502a3513f637e77e4root        struct {
115486c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int is_intra	: 1;
115586c93d9c46415cf7746351c502a3513f637e77e4root            unsigned int disable_deblocking_filter_idc : 2;
115686c93d9c46415cf7746351c502a3513f637e77e4root        } bits;
115786c93d9c46415cf7746351c502a3513f637e77e4root        unsigned int value;
115886c93d9c46415cf7746351c502a3513f637e77e4root    } slice_flags;
115986c93d9c46415cf7746351c502a3513f637e77e4root} VAEncSliceParameterBuffer;
116086c93d9c46415cf7746351c502a3513f637e77e4root
116186c93d9c46415cf7746351c502a3513f637e77e4root/****************************
116286c93d9c46415cf7746351c502a3513f637e77e4root * H.264 specific encode data structures
116386c93d9c46415cf7746351c502a3513f637e77e4root ****************************/
116486c93d9c46415cf7746351c502a3513f637e77e4root
116586c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAEncSequenceParameterBufferH264
116686c93d9c46415cf7746351c502a3513f637e77e4root{
116786c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char seq_parameter_set_id;
116886c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char level_idc;
116986c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int intra_period;
1170b0fac498ca4863166252f1268fda83394db54153Fei Jiang    unsigned int intra_idr_period;
117186c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int picture_width_in_mbs;
117286c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int picture_height_in_mbs;
117386c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int bits_per_second;
117486c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int frame_rate;
117586c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int initial_qp;
117686c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int min_qp;
117786c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int basic_unit_size;
117886c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char vui_flag;
117986c93d9c46415cf7746351c502a3513f637e77e4root} VAEncSequenceParameterBufferH264;
118086c93d9c46415cf7746351c502a3513f637e77e4root
1181901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang#define H264_LAST_PICTURE_EOSEQ     0x01 /* the last picture in the sequence */
1182901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang#define H264_LAST_PICTURE_EOSTREAM  0x02 /* the last picture in the stream */
118386c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAEncPictureParameterBufferH264
118486c93d9c46415cf7746351c502a3513f637e77e4root{
118586c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID reference_picture;
118686c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID reconstructed_picture;
118786c93d9c46415cf7746351c502a3513f637e77e4root    VABufferID coded_buf;
118886c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short picture_width;
118986c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short picture_height;
1190901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    unsigned char last_picture;
119186c93d9c46415cf7746351c502a3513f637e77e4root} VAEncPictureParameterBufferH264;
119286c93d9c46415cf7746351c502a3513f637e77e4root
119386c93d9c46415cf7746351c502a3513f637e77e4root/****************************
119486c93d9c46415cf7746351c502a3513f637e77e4root * H.263 specific encode data structures
119586c93d9c46415cf7746351c502a3513f637e77e4root ****************************/
119686c93d9c46415cf7746351c502a3513f637e77e4root
119786c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAEncSequenceParameterBufferH263
119886c93d9c46415cf7746351c502a3513f637e77e4root{
119986c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int intra_period;
120086c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int bits_per_second;
120186c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int frame_rate;
120286c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int initial_qp;
120386c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int min_qp;
120486c93d9c46415cf7746351c502a3513f637e77e4root} VAEncSequenceParameterBufferH263;
120586c93d9c46415cf7746351c502a3513f637e77e4root
120686c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAEncPictureParameterBufferH263
120786c93d9c46415cf7746351c502a3513f637e77e4root{
120886c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID reference_picture;
120986c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID reconstructed_picture;
121086c93d9c46415cf7746351c502a3513f637e77e4root    VABufferID coded_buf;
121186c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short picture_width;
121286c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short picture_height;
121386c93d9c46415cf7746351c502a3513f637e77e4root    VAEncPictureType picture_type;
121486c93d9c46415cf7746351c502a3513f637e77e4root} VAEncPictureParameterBufferH263;
121586c93d9c46415cf7746351c502a3513f637e77e4root
121686c93d9c46415cf7746351c502a3513f637e77e4root/****************************
121786c93d9c46415cf7746351c502a3513f637e77e4root * MPEG-4 specific encode data structures
121886c93d9c46415cf7746351c502a3513f637e77e4root ****************************/
121986c93d9c46415cf7746351c502a3513f637e77e4root
122086c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAEncSequenceParameterBufferMPEG4
122186c93d9c46415cf7746351c502a3513f637e77e4root{
122286c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char profile_and_level_indication;
122386c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int intra_period;
122486c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int video_object_layer_width;
122586c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int video_object_layer_height;
122686c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int vop_time_increment_resolution;
122786c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int fixed_vop_rate;
122886c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int fixed_vop_time_increment;
122986c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int bits_per_second;
123086c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int frame_rate;
123186c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int initial_qp;
123286c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int min_qp;
123386c93d9c46415cf7746351c502a3513f637e77e4root} VAEncSequenceParameterBufferMPEG4;
123486c93d9c46415cf7746351c502a3513f637e77e4root
123586c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAEncPictureParameterBufferMPEG4
123686c93d9c46415cf7746351c502a3513f637e77e4root{
123786c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID reference_picture;
123886c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID reconstructed_picture;
123986c93d9c46415cf7746351c502a3513f637e77e4root    VABufferID coded_buf;
124086c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short picture_width;
124186c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short picture_height;
124286c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int modulo_time_base; /* number of 1s */
124386c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int vop_time_increment;
124486c93d9c46415cf7746351c502a3513f637e77e4root    VAEncPictureType picture_type;
124586c93d9c46415cf7746351c502a3513f637e77e4root} VAEncPictureParameterBufferMPEG4;
124686c93d9c46415cf7746351c502a3513f637e77e4root
124786c93d9c46415cf7746351c502a3513f637e77e4root
124886c93d9c46415cf7746351c502a3513f637e77e4root
124986c93d9c46415cf7746351c502a3513f637e77e4root/* Buffer functions */
125086c93d9c46415cf7746351c502a3513f637e77e4root
125186c93d9c46415cf7746351c502a3513f637e77e4root/*
125286c93d9c46415cf7746351c502a3513f637e77e4root * Creates a buffer for "num_elements" elements of "size" bytes and
125386c93d9c46415cf7746351c502a3513f637e77e4root * initalize with "data".
125486c93d9c46415cf7746351c502a3513f637e77e4root * if "data" is null, then the contents of the buffer data store
125586c93d9c46415cf7746351c502a3513f637e77e4root * are undefined.
125686c93d9c46415cf7746351c502a3513f637e77e4root * Basically there are two ways to get buffer data to the server side. One is
125786c93d9c46415cf7746351c502a3513f637e77e4root * to call vaCreateBuffer() with a non-null "data", which results the data being
125886c93d9c46415cf7746351c502a3513f637e77e4root * copied to the data store on the server side.  A different method that
125986c93d9c46415cf7746351c502a3513f637e77e4root * eliminates this copy is to pass null as "data" when calling vaCreateBuffer(),
126086c93d9c46415cf7746351c502a3513f637e77e4root * and then use vaMapBuffer() to map the data store from the server side to the
126186c93d9c46415cf7746351c502a3513f637e77e4root * client address space for access.
126286c93d9c46415cf7746351c502a3513f637e77e4root *  Note: image buffers are created by the library, not the client. Please see
126386c93d9c46415cf7746351c502a3513f637e77e4root *        vaCreateImage on how image buffers are managed.
126486c93d9c46415cf7746351c502a3513f637e77e4root */
126586c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaCreateBuffer (
126686c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
126786c93d9c46415cf7746351c502a3513f637e77e4root    VAContextID context,
126886c93d9c46415cf7746351c502a3513f637e77e4root    VABufferType type,	/* in */
126986c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int size,	/* in */
127086c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int num_elements, /* in */
127186c93d9c46415cf7746351c502a3513f637e77e4root    void *data,		/* in */
127286c93d9c46415cf7746351c502a3513f637e77e4root    VABufferID *buf_id	/* out */
127386c93d9c46415cf7746351c502a3513f637e77e4root);
127486c93d9c46415cf7746351c502a3513f637e77e4root
127586c93d9c46415cf7746351c502a3513f637e77e4root/*
127686c93d9c46415cf7746351c502a3513f637e77e4root * Convey to the server how many valid elements are in the buffer.
127786c93d9c46415cf7746351c502a3513f637e77e4root * e.g. if multiple slice parameters are being held in a single buffer,
127886c93d9c46415cf7746351c502a3513f637e77e4root * this will communicate to the server the number of slice parameters
127986c93d9c46415cf7746351c502a3513f637e77e4root * that are valid in the buffer.
128086c93d9c46415cf7746351c502a3513f637e77e4root */
128186c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaBufferSetNumElements (
128286c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
128386c93d9c46415cf7746351c502a3513f637e77e4root    VABufferID buf_id,	/* in */
128486c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int num_elements /* in */
128586c93d9c46415cf7746351c502a3513f637e77e4root);
128686c93d9c46415cf7746351c502a3513f637e77e4root
1287b0fac498ca4863166252f1268fda83394db54153Fei Jiang
1288b0fac498ca4863166252f1268fda83394db54153Fei Jiang/*
1289b0fac498ca4863166252f1268fda83394db54153Fei Jiang * device independent data structure for codedbuffer
1290b0fac498ca4863166252f1268fda83394db54153Fei Jiang */
1291901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang
1292901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang/*
1293901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * FICTURE_AVE_QP(bit7-0): The average Qp value used during this frame
1294901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * LARGE_SLICE(bit8):At least one slice in the current frame was large
1295901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang *              enough for the encoder to attempt to limit its size.
1296901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * SLICE_OVERFLOW(bit9): At least one slice in the current frame has
1297901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang *              exceeded the maximum slice size specified.
1298901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang */
1299901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang#define VA_CODED_BUF_STATUS_PICTURE_AVE_QP_MASK         0xff
1300901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang#define VA_CODED_BUF_STATUS_LARGE_SLICE_MASK            0x100
1301901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang#define VA_CODED_BUF_STATUS_SLICE_OVERFLOW_MASK         0x200
1302901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang
1303901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang/*
1304901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang * device independent data structure for codedbuffer
1305901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang */
1306901c77a7aa491f56b63af7b655b67439481e4177Fei Jiangtypedef  struct _VACodedBufferSegment  {
1307901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    unsigned int size;/* size of the data buffer in the coded buffer segment, in bytes */
1308901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    unsigned int bit_offset; /* bit offset into the data buffer where valid bitstream data begins */
1309901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    unsigned int status; /* status set by the driver on the coded buffer*/
1310901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    unsigned int reserved; /* for future use */
1311b0fac498ca4863166252f1268fda83394db54153Fei Jiang    void *buf; /* pointer to the beginning of the data buffer in the coded buffer segment */
1312b0fac498ca4863166252f1268fda83394db54153Fei Jiang    void *next; /* pointer to the next VACodedBufferSegment */
1313b0fac498ca4863166252f1268fda83394db54153Fei Jiang} VACodedBufferSegment;
1314b0fac498ca4863166252f1268fda83394db54153Fei Jiang
131586c93d9c46415cf7746351c502a3513f637e77e4root/*
131686c93d9c46415cf7746351c502a3513f637e77e4root * Map data store of the buffer into the client's address space
131786c93d9c46415cf7746351c502a3513f637e77e4root * vaCreateBuffer() needs to be called with "data" set to NULL before
131886c93d9c46415cf7746351c502a3513f637e77e4root * calling vaMapBuffer()
1319b0fac498ca4863166252f1268fda83394db54153Fei Jiang *
1320b0fac498ca4863166252f1268fda83394db54153Fei Jiang * if buffer type is VAEncCodedBufferType, pbuf points to link-list of
1321b0fac498ca4863166252f1268fda83394db54153Fei Jiang * VACodedBufferSegment, and the list is terminated if "next" is NULL
132286c93d9c46415cf7746351c502a3513f637e77e4root */
132386c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaMapBuffer (
132486c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
132586c93d9c46415cf7746351c502a3513f637e77e4root    VABufferID buf_id,	/* in */
132686c93d9c46415cf7746351c502a3513f637e77e4root    void **pbuf 	/* out */
132786c93d9c46415cf7746351c502a3513f637e77e4root);
132886c93d9c46415cf7746351c502a3513f637e77e4root
132986c93d9c46415cf7746351c502a3513f637e77e4root/*
133086c93d9c46415cf7746351c502a3513f637e77e4root * After client making changes to a mapped data store, it needs to
133186c93d9c46415cf7746351c502a3513f637e77e4root * "Unmap" it to let the server know that the data is ready to be
133286c93d9c46415cf7746351c502a3513f637e77e4root * consumed by the server
133386c93d9c46415cf7746351c502a3513f637e77e4root */
133486c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaUnmapBuffer (
133586c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
133686c93d9c46415cf7746351c502a3513f637e77e4root    VABufferID buf_id	/* in */
133786c93d9c46415cf7746351c502a3513f637e77e4root);
133886c93d9c46415cf7746351c502a3513f637e77e4root
133986c93d9c46415cf7746351c502a3513f637e77e4root/*
134086c93d9c46415cf7746351c502a3513f637e77e4root * After this call, the buffer is deleted and this buffer_id is no longer valid
134186c93d9c46415cf7746351c502a3513f637e77e4root * Only call this if the buffer is not going to be passed to vaRenderBuffer
134286c93d9c46415cf7746351c502a3513f637e77e4root */
134386c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaDestroyBuffer (
134486c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
134586c93d9c46415cf7746351c502a3513f637e77e4root    VABufferID buffer_id
134686c93d9c46415cf7746351c502a3513f637e77e4root);
134786c93d9c46415cf7746351c502a3513f637e77e4root
134886c93d9c46415cf7746351c502a3513f637e77e4root/*
134986c93d9c46415cf7746351c502a3513f637e77e4rootRender (Decode) Pictures
135086c93d9c46415cf7746351c502a3513f637e77e4root
135186c93d9c46415cf7746351c502a3513f637e77e4rootA picture represents either a frame or a field.
135286c93d9c46415cf7746351c502a3513f637e77e4root
135386c93d9c46415cf7746351c502a3513f637e77e4rootThe Begin/Render/End sequence sends the decode buffers to the server
135486c93d9c46415cf7746351c502a3513f637e77e4root*/
135586c93d9c46415cf7746351c502a3513f637e77e4root
135686c93d9c46415cf7746351c502a3513f637e77e4root/*
135786c93d9c46415cf7746351c502a3513f637e77e4root * Get ready to decode a picture to a target surface
135886c93d9c46415cf7746351c502a3513f637e77e4root */
135986c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaBeginPicture (
136086c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
136186c93d9c46415cf7746351c502a3513f637e77e4root    VAContextID context,
136286c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID render_target
136386c93d9c46415cf7746351c502a3513f637e77e4root);
136486c93d9c46415cf7746351c502a3513f637e77e4root
136586c93d9c46415cf7746351c502a3513f637e77e4root/*
136686c93d9c46415cf7746351c502a3513f637e77e4root * Send decode buffers to the server.
136786c93d9c46415cf7746351c502a3513f637e77e4root * Buffers are automatically destroyed afterwards
136886c93d9c46415cf7746351c502a3513f637e77e4root */
136986c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaRenderPicture (
137086c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
137186c93d9c46415cf7746351c502a3513f637e77e4root    VAContextID context,
137286c93d9c46415cf7746351c502a3513f637e77e4root    VABufferID *buffers,
137386c93d9c46415cf7746351c502a3513f637e77e4root    int num_buffers
137486c93d9c46415cf7746351c502a3513f637e77e4root);
137586c93d9c46415cf7746351c502a3513f637e77e4root
137686c93d9c46415cf7746351c502a3513f637e77e4root/*
137786c93d9c46415cf7746351c502a3513f637e77e4root * Make the end of rendering for a picture.
137886c93d9c46415cf7746351c502a3513f637e77e4root * The server should start processing all pending operations for this
137986c93d9c46415cf7746351c502a3513f637e77e4root * surface. This call is non-blocking. The client can start another
138086c93d9c46415cf7746351c502a3513f637e77e4root * Begin/Render/End sequence on a different render target.
138186c93d9c46415cf7746351c502a3513f637e77e4root */
138286c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaEndPicture (
138386c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
138486c93d9c46415cf7746351c502a3513f637e77e4root    VAContextID context
138586c93d9c46415cf7746351c502a3513f637e77e4root);
138686c93d9c46415cf7746351c502a3513f637e77e4root
138786c93d9c46415cf7746351c502a3513f637e77e4root/*
138886c93d9c46415cf7746351c502a3513f637e77e4root
138986c93d9c46415cf7746351c502a3513f637e77e4rootSynchronization
139086c93d9c46415cf7746351c502a3513f637e77e4root
139186c93d9c46415cf7746351c502a3513f637e77e4root*/
139286c93d9c46415cf7746351c502a3513f637e77e4root
139386c93d9c46415cf7746351c502a3513f637e77e4root/*
139486c93d9c46415cf7746351c502a3513f637e77e4root * This function blocks until all pending operations on the render target
139586c93d9c46415cf7746351c502a3513f637e77e4root * have been completed.  Upon return it is safe to use the render target for a
139686c93d9c46415cf7746351c502a3513f637e77e4root * different picture.
139786c93d9c46415cf7746351c502a3513f637e77e4root */
139886c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaSyncSurface (
139986c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
140086c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID render_target
140186c93d9c46415cf7746351c502a3513f637e77e4root);
140286c93d9c46415cf7746351c502a3513f637e77e4root
140386c93d9c46415cf7746351c502a3513f637e77e4roottypedef enum
140486c93d9c46415cf7746351c502a3513f637e77e4root{
140586c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceRendering	= 1, /* Rendering in progress */
140686c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceDisplaying	= 2, /* Displaying in progress (not safe to render into it) */
140786c93d9c46415cf7746351c502a3513f637e77e4root                             /* this status is useful if surface is used as the source */
140886c93d9c46415cf7746351c502a3513f637e77e4root                             /* of an overlay */
140986c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceReady	= 4, /* not being rendered or displayed */
141086c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceSkipped	= 8  /* Indicate a skipped frame during encode */
141186c93d9c46415cf7746351c502a3513f637e77e4root} VASurfaceStatus;
141286c93d9c46415cf7746351c502a3513f637e77e4root
141386c93d9c46415cf7746351c502a3513f637e77e4root/*
141486c93d9c46415cf7746351c502a3513f637e77e4root * Find out any pending ops on the render target
141586c93d9c46415cf7746351c502a3513f637e77e4root */
141686c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaQuerySurfaceStatus (
141786c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
141886c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID render_target,
141986c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceStatus *status	/* out */
142086c93d9c46415cf7746351c502a3513f637e77e4root);
142186c93d9c46415cf7746351c502a3513f637e77e4root
142286c93d9c46415cf7746351c502a3513f637e77e4root/*
142386c93d9c46415cf7746351c502a3513f637e77e4root * Images and Subpictures
142486c93d9c46415cf7746351c502a3513f637e77e4root * VAImage is used to either get the surface data to client memory, or
142586c93d9c46415cf7746351c502a3513f637e77e4root * to copy image data in client memory to a surface.
142686c93d9c46415cf7746351c502a3513f637e77e4root * Both images, subpictures and surfaces follow the same 2D coordinate system where origin
142786c93d9c46415cf7746351c502a3513f637e77e4root * is at the upper left corner with positive X to the right and positive Y down
142886c93d9c46415cf7746351c502a3513f637e77e4root */
142986c93d9c46415cf7746351c502a3513f637e77e4root#define VA_FOURCC(ch0, ch1, ch2, ch3) \
143086c93d9c46415cf7746351c502a3513f637e77e4root    ((unsigned long)(unsigned char) (ch0) | ((unsigned long)(unsigned char) (ch1) << 8) | \
143186c93d9c46415cf7746351c502a3513f637e77e4root    ((unsigned long)(unsigned char) (ch2) << 16) | ((unsigned long)(unsigned char) (ch3) << 24 ))
143286c93d9c46415cf7746351c502a3513f637e77e4root
143386c93d9c46415cf7746351c502a3513f637e77e4root/* a few common FourCCs */
143486c93d9c46415cf7746351c502a3513f637e77e4root#define VA_FOURCC_NV12		0x3231564E
143586c93d9c46415cf7746351c502a3513f637e77e4root#define VA_FOURCC_AI44		0x34344149
143686c93d9c46415cf7746351c502a3513f637e77e4root#define VA_FOURCC_RGBA		0x41424752
143786c93d9c46415cf7746351c502a3513f637e77e4root#define VA_FOURCC_UYVY          0x59565955
143886c93d9c46415cf7746351c502a3513f637e77e4root#define VA_FOURCC_YUY2          0x32595559
143986c93d9c46415cf7746351c502a3513f637e77e4root#define VA_FOURCC_AYUV          0x56555941
144086c93d9c46415cf7746351c502a3513f637e77e4root#define VA_FOURCC_NV11          0x3131564e
144186c93d9c46415cf7746351c502a3513f637e77e4root#define VA_FOURCC_YV12          0x32315659
144286c93d9c46415cf7746351c502a3513f637e77e4root#define VA_FOURCC_P208          0x38303250
144386c93d9c46415cf7746351c502a3513f637e77e4root#define VA_FOURCC_IYUV          0x56555949
144486c93d9c46415cf7746351c502a3513f637e77e4root
144586c93d9c46415cf7746351c502a3513f637e77e4root/* byte order */
144686c93d9c46415cf7746351c502a3513f637e77e4root#define VA_LSB_FIRST		1
144786c93d9c46415cf7746351c502a3513f637e77e4root#define VA_MSB_FIRST		2
144886c93d9c46415cf7746351c502a3513f637e77e4root
144986c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAImageFormat
145086c93d9c46415cf7746351c502a3513f637e77e4root{
145186c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int	fourcc;
145286c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int	byte_order; /* VA_LSB_FIRST, VA_MSB_FIRST */
145386c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int	bits_per_pixel;
145486c93d9c46415cf7746351c502a3513f637e77e4root    /* for RGB formats */
145586c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int	depth; /* significant bits per pixel */
145686c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int	red_mask;
145786c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int	green_mask;
145886c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int	blue_mask;
145986c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int	alpha_mask;
146086c93d9c46415cf7746351c502a3513f637e77e4root} VAImageFormat;
146186c93d9c46415cf7746351c502a3513f637e77e4root
146286c93d9c46415cf7746351c502a3513f637e77e4roottypedef VAGenericID VAImageID;
146386c93d9c46415cf7746351c502a3513f637e77e4root
146486c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VAImage
146586c93d9c46415cf7746351c502a3513f637e77e4root{
146686c93d9c46415cf7746351c502a3513f637e77e4root    VAImageID		image_id; /* uniquely identify this image */
146786c93d9c46415cf7746351c502a3513f637e77e4root    VAImageFormat	format;
146886c93d9c46415cf7746351c502a3513f637e77e4root    VABufferID		buf;	/* image data buffer */
146986c93d9c46415cf7746351c502a3513f637e77e4root    /*
147086c93d9c46415cf7746351c502a3513f637e77e4root     * Image data will be stored in a buffer of type VAImageBufferType to facilitate
147186c93d9c46415cf7746351c502a3513f637e77e4root     * data store on the server side for optimal performance. The buffer will be
147286c93d9c46415cf7746351c502a3513f637e77e4root     * created by the CreateImage function, and proper storage allocated based on the image
147386c93d9c46415cf7746351c502a3513f637e77e4root     * size and format. This buffer is managed by the library implementation, and
147486c93d9c46415cf7746351c502a3513f637e77e4root     * accessed by the client through the buffer Map/Unmap functions.
147586c93d9c46415cf7746351c502a3513f637e77e4root     */
147686c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short	width;
147786c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short	height;
147886c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int	data_size;
147986c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int	num_planes;	/* can not be greater than 3 */
148086c93d9c46415cf7746351c502a3513f637e77e4root    /*
148186c93d9c46415cf7746351c502a3513f637e77e4root     * An array indicating the scanline pitch in bytes for each plane.
148286c93d9c46415cf7746351c502a3513f637e77e4root     * Each plane may have a different pitch. Maximum 3 planes for planar formats
148386c93d9c46415cf7746351c502a3513f637e77e4root     */
148486c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int	pitches[3];
148586c93d9c46415cf7746351c502a3513f637e77e4root    /*
148686c93d9c46415cf7746351c502a3513f637e77e4root     * An array indicating the byte offset from the beginning of the image data
148786c93d9c46415cf7746351c502a3513f637e77e4root     * to the start of each plane.
148886c93d9c46415cf7746351c502a3513f637e77e4root     */
148986c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int	offsets[3];
149086c93d9c46415cf7746351c502a3513f637e77e4root
149186c93d9c46415cf7746351c502a3513f637e77e4root    /* The following fields are only needed for paletted formats */
149286c93d9c46415cf7746351c502a3513f637e77e4root    int num_palette_entries;   /* set to zero for non-palette images */
149386c93d9c46415cf7746351c502a3513f637e77e4root    /*
149486c93d9c46415cf7746351c502a3513f637e77e4root     * Each component is one byte and entry_bytes indicates the number of components in
149586c93d9c46415cf7746351c502a3513f637e77e4root     * each entry (eg. 3 for YUV palette entries). set to zero for non-palette images
149686c93d9c46415cf7746351c502a3513f637e77e4root     */
149786c93d9c46415cf7746351c502a3513f637e77e4root    int entry_bytes;
149886c93d9c46415cf7746351c502a3513f637e77e4root    /*
149986c93d9c46415cf7746351c502a3513f637e77e4root     * An array of ascii characters describing the order of the components within the bytes.
150086c93d9c46415cf7746351c502a3513f637e77e4root     * Only entry_bytes characters of the string are used.
150186c93d9c46415cf7746351c502a3513f637e77e4root     */
150286c93d9c46415cf7746351c502a3513f637e77e4root    char component_order[4];
150386c93d9c46415cf7746351c502a3513f637e77e4root} VAImage;
150486c93d9c46415cf7746351c502a3513f637e77e4root
150586c93d9c46415cf7746351c502a3513f637e77e4root/* Get maximum number of image formats supported by the implementation */
150686c93d9c46415cf7746351c502a3513f637e77e4rootint vaMaxNumImageFormats (
150786c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy
150886c93d9c46415cf7746351c502a3513f637e77e4root);
150986c93d9c46415cf7746351c502a3513f637e77e4root
151086c93d9c46415cf7746351c502a3513f637e77e4root/*
151186c93d9c46415cf7746351c502a3513f637e77e4root * Query supported image formats
151286c93d9c46415cf7746351c502a3513f637e77e4root * The caller must provide a "format_list" array that can hold at
151386c93d9c46415cf7746351c502a3513f637e77e4root * least vaMaxNumImageFormats() entries. The actual number of formats
151486c93d9c46415cf7746351c502a3513f637e77e4root * returned in "format_list" is returned in "num_formats".
151586c93d9c46415cf7746351c502a3513f637e77e4root */
151686c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaQueryImageFormats (
151786c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
151886c93d9c46415cf7746351c502a3513f637e77e4root    VAImageFormat *format_list,	/* out */
151986c93d9c46415cf7746351c502a3513f637e77e4root    int *num_formats		/* out */
152086c93d9c46415cf7746351c502a3513f637e77e4root);
152186c93d9c46415cf7746351c502a3513f637e77e4root
152286c93d9c46415cf7746351c502a3513f637e77e4root/*
152386c93d9c46415cf7746351c502a3513f637e77e4root * Create a VAImage structure
152486c93d9c46415cf7746351c502a3513f637e77e4root * The width and height fields returned in the VAImage structure may get
152586c93d9c46415cf7746351c502a3513f637e77e4root * enlarged for some YUV formats. Upon return from this function,
152686c93d9c46415cf7746351c502a3513f637e77e4root * image->buf has been created and proper storage allocated by the library.
152786c93d9c46415cf7746351c502a3513f637e77e4root * The client can access the image through the Map/Unmap calls.
152886c93d9c46415cf7746351c502a3513f637e77e4root */
152986c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaCreateImage (
153086c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
153186c93d9c46415cf7746351c502a3513f637e77e4root    VAImageFormat *format,
153286c93d9c46415cf7746351c502a3513f637e77e4root    int width,
153386c93d9c46415cf7746351c502a3513f637e77e4root    int height,
153486c93d9c46415cf7746351c502a3513f637e77e4root    VAImage *image	/* out */
153586c93d9c46415cf7746351c502a3513f637e77e4root);
153686c93d9c46415cf7746351c502a3513f637e77e4root
153786c93d9c46415cf7746351c502a3513f637e77e4root/*
153886c93d9c46415cf7746351c502a3513f637e77e4root * Should call DestroyImage before destroying the surface it is bound to
153986c93d9c46415cf7746351c502a3513f637e77e4root */
154086c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaDestroyImage (
154186c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
154286c93d9c46415cf7746351c502a3513f637e77e4root    VAImageID image
154386c93d9c46415cf7746351c502a3513f637e77e4root);
154486c93d9c46415cf7746351c502a3513f637e77e4root
154586c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaSetImagePalette (
154686c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
154786c93d9c46415cf7746351c502a3513f637e77e4root    VAImageID image,
154886c93d9c46415cf7746351c502a3513f637e77e4root    /*
154986c93d9c46415cf7746351c502a3513f637e77e4root     * pointer to an array holding the palette data.  The size of the array is
155086c93d9c46415cf7746351c502a3513f637e77e4root     * num_palette_entries * entry_bytes in size.  The order of the components
155186c93d9c46415cf7746351c502a3513f637e77e4root     * in the palette is described by the component_order in VAImage struct
155286c93d9c46415cf7746351c502a3513f637e77e4root     */
155386c93d9c46415cf7746351c502a3513f637e77e4root    unsigned char *palette
155486c93d9c46415cf7746351c502a3513f637e77e4root);
155586c93d9c46415cf7746351c502a3513f637e77e4root
155686c93d9c46415cf7746351c502a3513f637e77e4root/*
155786c93d9c46415cf7746351c502a3513f637e77e4root * Retrive surface data into a VAImage
155886c93d9c46415cf7746351c502a3513f637e77e4root * Image must be in a format supported by the implementation
155986c93d9c46415cf7746351c502a3513f637e77e4root */
156086c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaGetImage (
156186c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
156286c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID surface,
156386c93d9c46415cf7746351c502a3513f637e77e4root    int x,	/* coordinates of the upper left source pixel */
156486c93d9c46415cf7746351c502a3513f637e77e4root    int y,
156586c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int width, /* width and height of the region */
156686c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int height,
156786c93d9c46415cf7746351c502a3513f637e77e4root    VAImageID image
156886c93d9c46415cf7746351c502a3513f637e77e4root);
156986c93d9c46415cf7746351c502a3513f637e77e4root
157086c93d9c46415cf7746351c502a3513f637e77e4root/*
157186c93d9c46415cf7746351c502a3513f637e77e4root * Copy data from a VAImage to a surface
157286c93d9c46415cf7746351c502a3513f637e77e4root * Image must be in a format supported by the implementation
157386c93d9c46415cf7746351c502a3513f637e77e4root * Returns a VA_STATUS_ERROR_SURFACE_BUSY if the surface
157486c93d9c46415cf7746351c502a3513f637e77e4root * shouldn't be rendered into when this is called
157586c93d9c46415cf7746351c502a3513f637e77e4root */
157686c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaPutImage (
157786c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
157886c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID surface,
157986c93d9c46415cf7746351c502a3513f637e77e4root    VAImageID image,
158086c93d9c46415cf7746351c502a3513f637e77e4root    int src_x,
158186c93d9c46415cf7746351c502a3513f637e77e4root    int src_y,
158286c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int src_width,
158386c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int src_height,
158486c93d9c46415cf7746351c502a3513f637e77e4root    int dest_x,
158586c93d9c46415cf7746351c502a3513f637e77e4root    int dest_y,
158686c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int dest_width,
158786c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int dest_height
158886c93d9c46415cf7746351c502a3513f637e77e4root);
158986c93d9c46415cf7746351c502a3513f637e77e4root
159086c93d9c46415cf7746351c502a3513f637e77e4root/*
159186c93d9c46415cf7746351c502a3513f637e77e4root * Derive an VAImage from an existing surface.
159286c93d9c46415cf7746351c502a3513f637e77e4root * This interface will derive a VAImage and corresponding image buffer from
159386c93d9c46415cf7746351c502a3513f637e77e4root * an existing VA Surface. The image buffer can then be mapped/unmapped for
159486c93d9c46415cf7746351c502a3513f637e77e4root * direct CPU access. This operation is only possible on implementations with
159586c93d9c46415cf7746351c502a3513f637e77e4root * direct rendering capabilities and internal surface formats that can be
159686c93d9c46415cf7746351c502a3513f637e77e4root * represented with a VAImage. When the operation is not possible this interface
159786c93d9c46415cf7746351c502a3513f637e77e4root * will return VA_STATUS_ERROR_OPERATION_FAILED. Clients should then fall back
159886c93d9c46415cf7746351c502a3513f637e77e4root * to using vaCreateImage + vaPutImage to accomplish the same task in an
159986c93d9c46415cf7746351c502a3513f637e77e4root * indirect manner.
160086c93d9c46415cf7746351c502a3513f637e77e4root *
160186c93d9c46415cf7746351c502a3513f637e77e4root * Implementations should only return success when the resulting image buffer
160286c93d9c46415cf7746351c502a3513f637e77e4root * would be useable with vaMap/Unmap.
160386c93d9c46415cf7746351c502a3513f637e77e4root *
160486c93d9c46415cf7746351c502a3513f637e77e4root * When directly accessing a surface special care must be taken to insure
160586c93d9c46415cf7746351c502a3513f637e77e4root * proper synchronization with the graphics hardware. Clients should call
160686c93d9c46415cf7746351c502a3513f637e77e4root * vaQuerySurfaceStatus to insure that a surface is not the target of concurrent
160786c93d9c46415cf7746351c502a3513f637e77e4root * rendering or currently being displayed by an overlay.
160886c93d9c46415cf7746351c502a3513f637e77e4root *
160986c93d9c46415cf7746351c502a3513f637e77e4root * Additionally nothing about the contents of a surface should be assumed
161086c93d9c46415cf7746351c502a3513f637e77e4root * following a vaPutSurface. Implementations are free to modify the surface for
161186c93d9c46415cf7746351c502a3513f637e77e4root * scaling or subpicture blending within a call to vaPutImage.
161286c93d9c46415cf7746351c502a3513f637e77e4root *
161386c93d9c46415cf7746351c502a3513f637e77e4root * Calls to vaPutImage or vaGetImage using the same surface from which the image
161486c93d9c46415cf7746351c502a3513f637e77e4root * has been derived will return VA_STATUS_ERROR_SURFACE_BUSY. vaPutImage or
161586c93d9c46415cf7746351c502a3513f637e77e4root * vaGetImage with other surfaces is supported.
161686c93d9c46415cf7746351c502a3513f637e77e4root *
161786c93d9c46415cf7746351c502a3513f637e77e4root * An image created with vaDeriveImage should be freed with vaDestroyImage. The
161886c93d9c46415cf7746351c502a3513f637e77e4root * image and image buffer structures will be destroyed; however, the underlying
161986c93d9c46415cf7746351c502a3513f637e77e4root * surface will remain unchanged until freed with vaDestroySurfaces.
162086c93d9c46415cf7746351c502a3513f637e77e4root */
162186c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaDeriveImage (
162286c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
162386c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID surface,
162486c93d9c46415cf7746351c502a3513f637e77e4root    VAImage *image	/* out */
162586c93d9c46415cf7746351c502a3513f637e77e4root);
162686c93d9c46415cf7746351c502a3513f637e77e4root
162786c93d9c46415cf7746351c502a3513f637e77e4root/*
162886c93d9c46415cf7746351c502a3513f637e77e4root * Subpictures
162986c93d9c46415cf7746351c502a3513f637e77e4root * Subpicture is a special type of image that can be blended
163086c93d9c46415cf7746351c502a3513f637e77e4root * with a surface during vaPutSurface(). Subpicture can be used to render
163186c93d9c46415cf7746351c502a3513f637e77e4root * DVD sub-titles or closed captioning text etc.
163286c93d9c46415cf7746351c502a3513f637e77e4root */
163386c93d9c46415cf7746351c502a3513f637e77e4root
163486c93d9c46415cf7746351c502a3513f637e77e4roottypedef VAGenericID VASubpictureID;
163586c93d9c46415cf7746351c502a3513f637e77e4root
163686c93d9c46415cf7746351c502a3513f637e77e4root/* Get maximum number of subpicture formats supported by the implementation */
163786c93d9c46415cf7746351c502a3513f637e77e4rootint vaMaxNumSubpictureFormats (
163886c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy
163986c93d9c46415cf7746351c502a3513f637e77e4root);
164086c93d9c46415cf7746351c502a3513f637e77e4root
164186c93d9c46415cf7746351c502a3513f637e77e4root/* flags for subpictures */
164286c93d9c46415cf7746351c502a3513f637e77e4root#define VA_SUBPICTURE_CHROMA_KEYING	0x0001
164386c93d9c46415cf7746351c502a3513f637e77e4root#define VA_SUBPICTURE_GLOBAL_ALPHA	0x0002
164486c93d9c46415cf7746351c502a3513f637e77e4root/*
164586c93d9c46415cf7746351c502a3513f637e77e4root * Query supported subpicture formats
164686c93d9c46415cf7746351c502a3513f637e77e4root * The caller must provide a "format_list" array that can hold at
164786c93d9c46415cf7746351c502a3513f637e77e4root * least vaMaxNumSubpictureFormats() entries. The flags arrary holds the flag
164886c93d9c46415cf7746351c502a3513f637e77e4root * for each format to indicate additional capabilities for that format. The actual
164986c93d9c46415cf7746351c502a3513f637e77e4root * number of formats returned in "format_list" is returned in "num_formats".
165086c93d9c46415cf7746351c502a3513f637e77e4root *  flags: returned value to indicate addtional capabilities
165186c93d9c46415cf7746351c502a3513f637e77e4root *         VA_SUBPICTURE_CHROMA_KEYING - supports chroma-keying
165286c93d9c46415cf7746351c502a3513f637e77e4root *         VA_SUBPICTURE_GLOBAL_ALPHA - supports global alpha
165386c93d9c46415cf7746351c502a3513f637e77e4root */
165486c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaQuerySubpictureFormats (
165586c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
165686c93d9c46415cf7746351c502a3513f637e77e4root    VAImageFormat *format_list,	/* out */
165786c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int *flags,	/* out */
165886c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int *num_formats	/* out */
165986c93d9c46415cf7746351c502a3513f637e77e4root);
166086c93d9c46415cf7746351c502a3513f637e77e4root
166186c93d9c46415cf7746351c502a3513f637e77e4root/*
166286c93d9c46415cf7746351c502a3513f637e77e4root * Subpictures are created with an image associated.
166386c93d9c46415cf7746351c502a3513f637e77e4root */
166486c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaCreateSubpicture (
166586c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
166686c93d9c46415cf7746351c502a3513f637e77e4root    VAImageID image,
166786c93d9c46415cf7746351c502a3513f637e77e4root    VASubpictureID *subpicture	/* out */
166886c93d9c46415cf7746351c502a3513f637e77e4root);
166986c93d9c46415cf7746351c502a3513f637e77e4root
167086c93d9c46415cf7746351c502a3513f637e77e4root/*
167186c93d9c46415cf7746351c502a3513f637e77e4root * Destroy the subpicture before destroying the image it is assocated to
167286c93d9c46415cf7746351c502a3513f637e77e4root */
167386c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaDestroySubpicture (
167486c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
167586c93d9c46415cf7746351c502a3513f637e77e4root    VASubpictureID subpicture
167686c93d9c46415cf7746351c502a3513f637e77e4root);
167786c93d9c46415cf7746351c502a3513f637e77e4root
167886c93d9c46415cf7746351c502a3513f637e77e4root/*
167986c93d9c46415cf7746351c502a3513f637e77e4root * Bind an image to the subpicture. This image will now be associated with
168086c93d9c46415cf7746351c502a3513f637e77e4root * the subpicture instead of the one at creation.
168186c93d9c46415cf7746351c502a3513f637e77e4root */
168286c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaSetSubpictureImage (
168386c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
168486c93d9c46415cf7746351c502a3513f637e77e4root    VASubpictureID subpicture,
168586c93d9c46415cf7746351c502a3513f637e77e4root    VAImageID image
168686c93d9c46415cf7746351c502a3513f637e77e4root);
168786c93d9c46415cf7746351c502a3513f637e77e4root
168886c93d9c46415cf7746351c502a3513f637e77e4root/*
168986c93d9c46415cf7746351c502a3513f637e77e4root * If chromakey is enabled, then the area where the source value falls within
169086c93d9c46415cf7746351c502a3513f637e77e4root * the chromakey [min, max] range is transparent
169186c93d9c46415cf7746351c502a3513f637e77e4root * The chromakey component format is the following:
169286c93d9c46415cf7746351c502a3513f637e77e4root *  For RGB: [0:7] Red [8:15] Blue [16:23] Green
169386c93d9c46415cf7746351c502a3513f637e77e4root *  For YUV: [0:7] V [8:15] U [16:23] Y
169486c93d9c46415cf7746351c502a3513f637e77e4root * The chromakey mask can be used to mask out certain components for chromakey
169586c93d9c46415cf7746351c502a3513f637e77e4root * comparision
169686c93d9c46415cf7746351c502a3513f637e77e4root */
169786c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaSetSubpictureChromakey (
169886c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
169986c93d9c46415cf7746351c502a3513f637e77e4root    VASubpictureID subpicture,
170086c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int chromakey_min,
170186c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int chromakey_max,
170286c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int chromakey_mask
170386c93d9c46415cf7746351c502a3513f637e77e4root);
170486c93d9c46415cf7746351c502a3513f637e77e4root
170586c93d9c46415cf7746351c502a3513f637e77e4root/*
170686c93d9c46415cf7746351c502a3513f637e77e4root * Global alpha value is between 0 and 1. A value of 1 means fully opaque and
170786c93d9c46415cf7746351c502a3513f637e77e4root * a value of 0 means fully transparent. If per-pixel alpha is also specified then
170886c93d9c46415cf7746351c502a3513f637e77e4root * the overall alpha is per-pixel alpha multiplied by the global alpha
170986c93d9c46415cf7746351c502a3513f637e77e4root */
171086c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaSetSubpictureGlobalAlpha (
171186c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
171286c93d9c46415cf7746351c502a3513f637e77e4root    VASubpictureID subpicture,
171386c93d9c46415cf7746351c502a3513f637e77e4root    float global_alpha
171486c93d9c46415cf7746351c502a3513f637e77e4root);
171586c93d9c46415cf7746351c502a3513f637e77e4root
171686c93d9c46415cf7746351c502a3513f637e77e4root/*
171786c93d9c46415cf7746351c502a3513f637e77e4root * vaAssociateSubpicture associates the subpicture with target_surfaces.
171886c93d9c46415cf7746351c502a3513f637e77e4root * It defines the region mapping between the subpicture and the target
171986c93d9c46415cf7746351c502a3513f637e77e4root * surfaces through source and destination rectangles (with the same width and height).
172086c93d9c46415cf7746351c502a3513f637e77e4root * Both will be displayed at the next call to vaPutSurface.  Additional
172186c93d9c46415cf7746351c502a3513f637e77e4root * associations before the call to vaPutSurface simply overrides the association.
172286c93d9c46415cf7746351c502a3513f637e77e4root */
172386c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaAssociateSubpicture (
172486c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
172586c93d9c46415cf7746351c502a3513f637e77e4root    VASubpictureID subpicture,
172686c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID *target_surfaces,
172786c93d9c46415cf7746351c502a3513f637e77e4root    int num_surfaces,
172886c93d9c46415cf7746351c502a3513f637e77e4root    short src_x, /* upper left offset in subpicture */
172986c93d9c46415cf7746351c502a3513f637e77e4root    short src_y,
173086c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short src_width,
173186c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short src_height,
173286c93d9c46415cf7746351c502a3513f637e77e4root    short dest_x, /* upper left offset in surface */
173386c93d9c46415cf7746351c502a3513f637e77e4root    short dest_y,
173486c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short dest_width,
173586c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short dest_height,
173686c93d9c46415cf7746351c502a3513f637e77e4root    /*
173786c93d9c46415cf7746351c502a3513f637e77e4root     * whether to enable chroma-keying or global-alpha
173886c93d9c46415cf7746351c502a3513f637e77e4root     * see VA_SUBPICTURE_XXX values
173986c93d9c46415cf7746351c502a3513f637e77e4root     */
174086c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int flags
174186c93d9c46415cf7746351c502a3513f637e77e4root);
174286c93d9c46415cf7746351c502a3513f637e77e4root
174386c93d9c46415cf7746351c502a3513f637e77e4root/*
174486c93d9c46415cf7746351c502a3513f637e77e4root * vaDeassociateSubpicture removes the association of the subpicture with target_surfaces.
174586c93d9c46415cf7746351c502a3513f637e77e4root */
174686c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaDeassociateSubpicture (
174786c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
174886c93d9c46415cf7746351c502a3513f637e77e4root    VASubpictureID subpicture,
174986c93d9c46415cf7746351c502a3513f637e77e4root    VASurfaceID *target_surfaces,
175086c93d9c46415cf7746351c502a3513f637e77e4root    int num_surfaces
175186c93d9c46415cf7746351c502a3513f637e77e4root);
175286c93d9c46415cf7746351c502a3513f637e77e4root
175386c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VARectangle
175486c93d9c46415cf7746351c502a3513f637e77e4root{
175586c93d9c46415cf7746351c502a3513f637e77e4root    short x;
175686c93d9c46415cf7746351c502a3513f637e77e4root    short y;
175786c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short width;
175886c93d9c46415cf7746351c502a3513f637e77e4root    unsigned short height;
175986c93d9c46415cf7746351c502a3513f637e77e4root} VARectangle;
176086c93d9c46415cf7746351c502a3513f637e77e4root
176186c93d9c46415cf7746351c502a3513f637e77e4root/*
176286c93d9c46415cf7746351c502a3513f637e77e4root * Display attributes
176386c93d9c46415cf7746351c502a3513f637e77e4root * Display attributes are used to control things such as contrast, hue, saturation,
176486c93d9c46415cf7746351c502a3513f637e77e4root * brightness etc. in the rendering process.  The application can query what
176586c93d9c46415cf7746351c502a3513f637e77e4root * attributes are supported by the driver, and then set the appropriate attributes
176686c93d9c46415cf7746351c502a3513f637e77e4root * before calling vaPutSurface()
176786c93d9c46415cf7746351c502a3513f637e77e4root */
1768b0fac498ca4863166252f1268fda83394db54153Fei Jiang/* PowerVR IEP Lite attributes */
1769b0fac498ca4863166252f1268fda83394db54153Fei Jiangtypedef enum
1770b0fac498ca4863166252f1268fda83394db54153Fei Jiang{
1771b0fac498ca4863166252f1268fda83394db54153Fei Jiang    VADISPLAYATTRIB_BLE_OFF              = 0x00,
1772b0fac498ca4863166252f1268fda83394db54153Fei Jiang    VADISPLAYATTRIB_BLE_LOW,
1773b0fac498ca4863166252f1268fda83394db54153Fei Jiang    VADISPLAYATTRIB_BLE_MEDIUM,
1774b0fac498ca4863166252f1268fda83394db54153Fei Jiang    VADISPLAYATTRIB_BLE_HIGH,
1775b0fac498ca4863166252f1268fda83394db54153Fei Jiang    VADISPLAYATTRIB_BLE_NONE,
1776b0fac498ca4863166252f1268fda83394db54153Fei Jiang} VADisplayAttribBLEMode;
1777b0fac498ca4863166252f1268fda83394db54153Fei Jiang
1778b0fac498ca4863166252f1268fda83394db54153Fei Jiang/* attribute value for VADisplayAttribRotation   */
1779b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define VA_ROTATION_NONE        0x00000000
1780b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define VA_ROTATION_90          0x00000001
1781b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define VA_ROTATION_180         0x00000002
1782b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define VA_ROTATION_270         0x00000004
1783b0fac498ca4863166252f1268fda83394db54153Fei Jiang
1784b0fac498ca4863166252f1268fda83394db54153Fei Jiang/* attribute value for VADisplayAttribOutOfLoopDeblock */
1785b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define VA_OOL_DEBLOCKING_FALSE 0x00000000
1786b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define VA_OOL_DEBLOCKING_TRUE  0x00000001
1787b0fac498ca4863166252f1268fda83394db54153Fei Jiang
178886c93d9c46415cf7746351c502a3513f637e77e4root
178986c93d9c46415cf7746351c502a3513f637e77e4root/* Currently defined display attribute types */
179086c93d9c46415cf7746351c502a3513f637e77e4roottypedef enum
179186c93d9c46415cf7746351c502a3513f637e77e4root{
179286c93d9c46415cf7746351c502a3513f637e77e4root    VADisplayAttribBrightness		= 0,
179386c93d9c46415cf7746351c502a3513f637e77e4root    VADisplayAttribContrast		= 1,
179486c93d9c46415cf7746351c502a3513f637e77e4root    VADisplayAttribHue			= 2,
179586c93d9c46415cf7746351c502a3513f637e77e4root    VADisplayAttribSaturation		= 3,
179686c93d9c46415cf7746351c502a3513f637e77e4root    /* client can specifiy a background color for the target window */
179786c93d9c46415cf7746351c502a3513f637e77e4root    VADisplayAttribBackgroundColor      = 4,
179886c93d9c46415cf7746351c502a3513f637e77e4root    /*
179986c93d9c46415cf7746351c502a3513f637e77e4root     * this is a gettable only attribute. For some implementations that use the
180086c93d9c46415cf7746351c502a3513f637e77e4root     * hardware overlay, after PutSurface is called, the surface can not be
180186c93d9c46415cf7746351c502a3513f637e77e4root     * re-used until after the subsequent PutSurface call. If this is the case
180286c93d9c46415cf7746351c502a3513f637e77e4root     * then the value for this attribute will be set to 1 so that the client
180386c93d9c46415cf7746351c502a3513f637e77e4root     * will not attempt to re-use the surface right after returning from a call
180486c93d9c46415cf7746351c502a3513f637e77e4root     * to PutSurface.
1805901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang     *
1806901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang     * Don't use it, use flag VASurfaceDisplaying of vaQuerySurfaceStatus since
1807901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang     * driver may use overlay or GPU alternatively
180886c93d9c46415cf7746351c502a3513f637e77e4root     */
180986c93d9c46415cf7746351c502a3513f637e77e4root    VADisplayAttribDirectSurface       = 5,
1810b0fac498ca4863166252f1268fda83394db54153Fei Jiang    VADisplayAttribRotation            = 6,
1811b0fac498ca4863166252f1268fda83394db54153Fei Jiang    VADisplayAttribOutofLoopDeblock    = 7,
1812b0fac498ca4863166252f1268fda83394db54153Fei Jiang
1813b0fac498ca4863166252f1268fda83394db54153Fei Jiang    /* PowerVR IEP Lite specific attributes */
1814b0fac498ca4863166252f1268fda83394db54153Fei Jiang    VADisplayAttribBLEBlackMode        = 8,
1815b0fac498ca4863166252f1268fda83394db54153Fei Jiang    VADisplayAttribBLEWhiteMode        = 9,
1816b0fac498ca4863166252f1268fda83394db54153Fei Jiang    VADisplayAttribBlueStretch         = 10,
1817b0fac498ca4863166252f1268fda83394db54153Fei Jiang    VADisplayAttribSkinColorCorrection = 11,
1818901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    /*
1819901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang     * For type VADisplayAttribCSCMatrix, "value" field is a pointer to the color
1820901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang     * conversion matrix. Each element in the matrix is float-point
1821901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang     */
1822901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    VADisplayAttribCSCMatrix           = 12,
1823901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    /* specify the constant color used to blend with video surface
1824901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang     * Cd = Cv*Cc*Ac + Cb *(1 - Ac) C means the constant RGB
1825901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang     *      d: the final color to overwrite into the frame buffer
1826901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang     *      v: decoded video after color conversion,
1827901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang     *      c: video color specified by VADisplayAttribBlendColor
1828901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang     *      b: background color of the drawable
1829901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang     */
1830901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    VADisplayAttribBlendColor          = 13,
183186c93d9c46415cf7746351c502a3513f637e77e4root} VADisplayAttribType;
183286c93d9c46415cf7746351c502a3513f637e77e4root
183386c93d9c46415cf7746351c502a3513f637e77e4root/* flags for VADisplayAttribute */
183486c93d9c46415cf7746351c502a3513f637e77e4root#define VA_DISPLAY_ATTRIB_NOT_SUPPORTED	0x0000
183586c93d9c46415cf7746351c502a3513f637e77e4root#define VA_DISPLAY_ATTRIB_GETTABLE	0x0001
183686c93d9c46415cf7746351c502a3513f637e77e4root#define VA_DISPLAY_ATTRIB_SETTABLE	0x0002
183786c93d9c46415cf7746351c502a3513f637e77e4root
183886c93d9c46415cf7746351c502a3513f637e77e4roottypedef struct _VADisplayAttribute
183986c93d9c46415cf7746351c502a3513f637e77e4root{
184086c93d9c46415cf7746351c502a3513f637e77e4root    VADisplayAttribType type;
184186c93d9c46415cf7746351c502a3513f637e77e4root    int min_value;
184286c93d9c46415cf7746351c502a3513f637e77e4root    int max_value;
184386c93d9c46415cf7746351c502a3513f637e77e4root    int value;	/* used by the set/get attribute functions */
184486c93d9c46415cf7746351c502a3513f637e77e4root/* flags can be VA_DISPLAY_ATTRIB_GETTABLE or VA_DISPLAY_ATTRIB_SETTABLE or OR'd together */
184586c93d9c46415cf7746351c502a3513f637e77e4root    unsigned int flags;
184686c93d9c46415cf7746351c502a3513f637e77e4root} VADisplayAttribute;
184786c93d9c46415cf7746351c502a3513f637e77e4root
184886c93d9c46415cf7746351c502a3513f637e77e4root/* Get maximum number of display attributs supported by the implementation */
184986c93d9c46415cf7746351c502a3513f637e77e4rootint vaMaxNumDisplayAttributes (
185086c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy
185186c93d9c46415cf7746351c502a3513f637e77e4root);
185286c93d9c46415cf7746351c502a3513f637e77e4root
185386c93d9c46415cf7746351c502a3513f637e77e4root/*
185486c93d9c46415cf7746351c502a3513f637e77e4root * Query display attributes
185586c93d9c46415cf7746351c502a3513f637e77e4root * The caller must provide a "attr_list" array that can hold at
185686c93d9c46415cf7746351c502a3513f637e77e4root * least vaMaxNumDisplayAttributes() entries. The actual number of attributes
185786c93d9c46415cf7746351c502a3513f637e77e4root * returned in "attr_list" is returned in "num_attributes".
185886c93d9c46415cf7746351c502a3513f637e77e4root */
185986c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaQueryDisplayAttributes (
186086c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
186186c93d9c46415cf7746351c502a3513f637e77e4root    VADisplayAttribute *attr_list,	/* out */
186286c93d9c46415cf7746351c502a3513f637e77e4root    int *num_attributes			/* out */
186386c93d9c46415cf7746351c502a3513f637e77e4root);
186486c93d9c46415cf7746351c502a3513f637e77e4root
186586c93d9c46415cf7746351c502a3513f637e77e4root/*
186686c93d9c46415cf7746351c502a3513f637e77e4root * Get display attributes
186786c93d9c46415cf7746351c502a3513f637e77e4root * This function returns the current attribute values in "attr_list".
186886c93d9c46415cf7746351c502a3513f637e77e4root * Only attributes returned with VA_DISPLAY_ATTRIB_GETTABLE set in the "flags" field
186986c93d9c46415cf7746351c502a3513f637e77e4root * from vaQueryDisplayAttributes() can have their values retrieved.
187086c93d9c46415cf7746351c502a3513f637e77e4root */
187186c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaGetDisplayAttributes (
187286c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
187386c93d9c46415cf7746351c502a3513f637e77e4root    VADisplayAttribute *attr_list,	/* in/out */
187486c93d9c46415cf7746351c502a3513f637e77e4root    int num_attributes
187586c93d9c46415cf7746351c502a3513f637e77e4root);
187686c93d9c46415cf7746351c502a3513f637e77e4root
187786c93d9c46415cf7746351c502a3513f637e77e4root/*
187886c93d9c46415cf7746351c502a3513f637e77e4root * Set display attributes
187986c93d9c46415cf7746351c502a3513f637e77e4root * Only attributes returned with VA_DISPLAY_ATTRIB_SETTABLE set in the "flags" field
188086c93d9c46415cf7746351c502a3513f637e77e4root * from vaQueryDisplayAttributes() can be set.  If the attribute is not settable or
188186c93d9c46415cf7746351c502a3513f637e77e4root * the value is out of range, the function returns VA_STATUS_ERROR_ATTR_NOT_SUPPORTED
188286c93d9c46415cf7746351c502a3513f637e77e4root */
188386c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus vaSetDisplayAttributes (
188486c93d9c46415cf7746351c502a3513f637e77e4root    VADisplay dpy,
188586c93d9c46415cf7746351c502a3513f637e77e4root    VADisplayAttribute *attr_list,
188686c93d9c46415cf7746351c502a3513f637e77e4root    int num_attributes
188786c93d9c46415cf7746351c502a3513f637e77e4root);
188886c93d9c46415cf7746351c502a3513f637e77e4root
188986c93d9c46415cf7746351c502a3513f637e77e4root#ifdef __cplusplus
189086c93d9c46415cf7746351c502a3513f637e77e4root}
189186c93d9c46415cf7746351c502a3513f637e77e4root#endif
189286c93d9c46415cf7746351c502a3513f637e77e4root
189386c93d9c46415cf7746351c502a3513f637e77e4root#endif /* _VA_H_ */
1894