va.h   va.h 
skipping to change at line 71 skipping to change at line 71
* screen relative rather than sourc e video relative. * screen relative rather than sourc e video relative.
* rev 0.32.0 (01/13/2011 Xiang Haihao) - Add profile into VAPictureParamet erBufferVC1 * rev 0.32.0 (01/13/2011 Xiang Haihao) - Add profile into VAPictureParamet erBufferVC1
* update VAAPI to 0.32.0 * update VAAPI to 0.32.0
* *
* Acknowledgements: * Acknowledgements:
* Some concepts borrowed from XvMC and XvImage. * Some concepts borrowed from XvMC and XvImage.
* Waldo Bastian (Intel), Matt Sottek (Intel), Austin Yuan (Intel), and G wenole Beauchesne (SDS) * Waldo Bastian (Intel), Matt Sottek (Intel), Austin Yuan (Intel), and G wenole Beauchesne (SDS)
* contributed to various aspects of the API. * contributed to various aspects of the API.
*/ */
/**
* \file va.h
* \brief The Core API
*
* This file contains the \ref api_core "Core API".
*/
#ifndef _VA_H_ #ifndef _VA_H_
#define _VA_H_ #define _VA_H_
#include <va/va_version.h> #include <va/va_version.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
/**
* \mainpage Video Acceleration (VA) API
*
* \section intro Introduction
*
* The main motivation for VA-API (Video Acceleration API) is to
* enable hardware accelerated video decode and encode at various
* entry-points (VLD, IDCT, Motion Compensation etc.) for the
* prevailing coding standards today (MPEG-2, MPEG-4 ASP/H.263, MPEG-4
* AVC/H.264, VC-1/VMW3, and JPEG).
*
* VA-API is split into several modules:
* - \ref api_core
* - \ref api_enc_core
* - \ref api_enc_h264
* - \ref api_vpp
*/
/**
* \defgroup api_core Core API
*
* @{
*/
/* /*
Overview Overview
The VA API is intended to provide an interface between a video decode/encod e/display The VA API is intended to provide an interface between a video decode/encod e/display
application (client) and a hardware accelerator (server), to off-load application (client) and a hardware accelerator (server), to off-load
video decode/encode/display operations from the host to the hardware accele rator at various video decode/encode/display operations from the host to the hardware accele rator at various
entry-points. entry-points.
The basic operation steps are: The basic operation steps are:
skipping to change at line 137 skipping to change at line 168
#define VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE 0x0000000f #define VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE 0x0000000f
#define VA_STATUS_ERROR_SURFACE_BUSY 0x00000010 #define VA_STATUS_ERROR_SURFACE_BUSY 0x00000010
#define VA_STATUS_ERROR_FLAG_NOT_SUPPORTED 0x00000011 #define VA_STATUS_ERROR_FLAG_NOT_SUPPORTED 0x00000011
#define VA_STATUS_ERROR_INVALID_PARAMETER 0x00000012 #define VA_STATUS_ERROR_INVALID_PARAMETER 0x00000012
#define VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED 0x00000013 #define VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED 0x00000013
#define VA_STATUS_ERROR_UNIMPLEMENTED 0x00000014 #define VA_STATUS_ERROR_UNIMPLEMENTED 0x00000014
#define VA_STATUS_ERROR_SURFACE_IN_DISPLAYING 0x00000015 #define VA_STATUS_ERROR_SURFACE_IN_DISPLAYING 0x00000015
#define VA_STATUS_ERROR_INVALID_IMAGE_FORMAT 0x00000016 #define VA_STATUS_ERROR_INVALID_IMAGE_FORMAT 0x00000016
#define VA_STATUS_ERROR_DECODING_ERROR 0x00000017 #define VA_STATUS_ERROR_DECODING_ERROR 0x00000017
#define VA_STATUS_ERROR_ENCODING_ERROR 0x00000018 #define VA_STATUS_ERROR_ENCODING_ERROR 0x00000018
/**
* \brief An invalid/unsupported value was supplied.
*
* This is a catch-all error code for invalid or unsupported values.
* e.g. value exceeding the valid range, invalid type in the context
* of generic attribute values.
*/
#define VA_STATUS_ERROR_INVALID_VALUE 0x00000019
/** \brief An unsupported filter was supplied. */
#define VA_STATUS_ERROR_UNSUPPORTED_FILTER 0x00000020
/** \brief An invalid filter chain was supplied. */
#define VA_STATUS_ERROR_INVALID_FILTER_CHAIN 0x00000021
/** \brief Indicate HW busy (e.g. run multiple encoding simultaneously). */
#define VA_STATUS_ERROR_HW_BUSY 0x00000022
#define VA_STATUS_ERROR_UNKNOWN 0xFFFFFFFF #define VA_STATUS_ERROR_UNKNOWN 0xFFFFFFFF
/* De-interlacing flags for vaPutSurface() */ /* De-interlacing flags for vaPutSurface() */
#define VA_FRAME_PICTURE 0x00000000 #define VA_FRAME_PICTURE 0x00000000
#define VA_TOP_FIELD 0x00000001 #define VA_TOP_FIELD 0x00000001
#define VA_BOTTOM_FIELD 0x00000002 #define VA_BOTTOM_FIELD 0x00000002
/* /*
* Enabled the positioning/cropping/blending feature: * Enabled the positioning/cropping/blending feature:
* 1, specify the video playback position in the isurface * 1, specify the video playback position in the isurface
skipping to change at line 229 skipping to change at line 274
* This allows private interfaces into the library * This allows private interfaces into the library
*/ */
VAPrivFunc vaGetLibFunc ( VAPrivFunc vaGetLibFunc (
VADisplay dpy, VADisplay dpy,
const char *func const char *func
); );
/* Currently defined profiles */ /* Currently defined profiles */
typedef enum typedef enum
{ {
/** \brief Profile ID used for video processing. */
VAProfileNone = -1,
VAProfileMPEG2Simple = 0, VAProfileMPEG2Simple = 0,
VAProfileMPEG2Main = 1, VAProfileMPEG2Main = 1,
VAProfileMPEG4Simple = 2, VAProfileMPEG4Simple = 2,
VAProfileMPEG4AdvancedSimple = 3, VAProfileMPEG4AdvancedSimple = 3,
VAProfileMPEG4Main = 4, VAProfileMPEG4Main = 4,
VAProfileH264Baseline = 5, VAProfileH264Baseline = 5,
VAProfileH264Main = 6, VAProfileH264Main = 6,
VAProfileH264High = 7, VAProfileH264High = 7,
VAProfileVC1Simple = 8, VAProfileVC1Simple = 8,
VAProfileVC1Main = 9, VAProfileVC1Main = 9,
skipping to change at line 256 skipping to change at line 303
* Currently defined entrypoints * Currently defined entrypoints
*/ */
typedef enum typedef enum
{ {
VAEntrypointVLD = 1, VAEntrypointVLD = 1,
VAEntrypointIZZ = 2, VAEntrypointIZZ = 2,
VAEntrypointIDCT = 3, VAEntrypointIDCT = 3,
VAEntrypointMoComp = 4, VAEntrypointMoComp = 4,
VAEntrypointDeblocking = 5, VAEntrypointDeblocking = 5,
VAEntrypointEncSlice = 6, /* slice level encode */ VAEntrypointEncSlice = 6, /* slice level encode */
VAEntrypointEncPicture = 7 /* pictuer encode, JPEG, etc */ VAEntrypointEncPicture = 7, /* pictuer encode, JPEG, etc */
VAEntrypointVideoProc = 10, /**< Video pre/post-processing. */
VAEntrypointMax
} VAEntrypoint; } VAEntrypoint;
/* Currently defined configuration attribute types */ /* Currently defined configuration attribute types */
typedef enum typedef enum
{ {
VAConfigAttribRTFormat = 0, VAConfigAttribRTFormat = 0,
VAConfigAttribSpatialResidual = 1, VAConfigAttribSpatialResidual = 1,
VAConfigAttribSpatialClipping = 2, VAConfigAttribSpatialClipping = 2,
VAConfigAttribIntraResidual = 3, VAConfigAttribIntraResidual = 3,
VAConfigAttribEncryption = 4, VAConfigAttribEncryption = 4,
VAConfigAttribRateControl = 5 VAConfigAttribRateControl = 5,
/** @name Attributes for encoding */
/**@{*/
/**
* \brief Packed headers mode. Read/write.
*
* This attribute determines what packed headers the driver supports,
* through vaGetConfigAttributes(); and what packed headers the user
* will be providing to the driver, through vaCreateConfig(), if the
* driver supports those.
*
* See \c VA_ENC_PACKED_HEADER_xxx for the list of packed headers.
*/
VAConfigAttribEncPackedHeaders = 10,
/**
* \brief Interlaced mode. Read/write.
*
* This attribute determines what kind of interlaced encoding mode
* the driver supports.
*
* See \c VA_ENC_INTERLACED_xxx for the list of interlaced modes.
*/
VAConfigAttribEncInterlaced = 11,
/**
* \brief Maximum number of reference frames. Read-only.
*
* This attribute determines the maximum number of reference
* frames supported for encoding.
*
* Note: for H.264 encoding, the value represents the maximum number
* of reference frames for both the reference picture list 0 (bottom
* 16 bits) and the reference picture list 1 (top 16 bits).
*/
VAConfigAttribEncMaxRefFrames = 13,
/**
* \brief Maximum number of slices per frame. Read-only.
*
* This attribute determines the maximum number of slices the
* driver can support to encode a single frame.
*/
VAConfigAttribEncMaxSlices = 14,
/**
* \brief Slice structure. Read-only.
*
* This attribute determines slice structures supported by the
* driver for encoding. This attribute is a hint to the user so
* that he can choose a suitable surface size and how to arrange
* the encoding process of multiple slices per frame.
*
* More specifically, for H.264 encoding, this attribute
* determines the range of accepted values to
* VAEncSliceParameterBufferH264::macroblock_address and
* VAEncSliceParameterBufferH264::num_macroblocks.
*
* See \c VA_ENC_SLICE_STRUCTURE_xxx for the supported slice
* structure types.
*/
VAConfigAttribEncSliceStructure = 15,
/**
* \brief Macroblock information. Read-only.
*
* This attribute determines whether the driver supports extra
* encoding information per-macroblock. e.g. QP.
*
* More specifically, for H.264 encoding, if the driver returns a non-z
ero
* value for this attribute, this means the application can create
* additional #VAEncMacroblockParameterBufferH264 buffers referenced
* through VAEncSliceParameterBufferH264::macroblock_info.
*/
VAConfigAttribEncMacroblockInfo = 16,
/**@}*/
VAConfigAttribTypeMax
} VAConfigAttribType; } VAConfigAttribType;
/* /*
* Configuration attributes * Configuration attributes
* If there is more than one value for an attribute, a default * If there is more than one value for an attribute, a default
* value will be assigned to the attribute if the client does not * value will be assigned to the attribute if the client does not
* specify the attribute when creating a configuration * specify the attribute when creating a configuration
*/ */
typedef struct _VAConfigAttrib { typedef struct _VAConfigAttrib {
VAConfigAttribType type; VAConfigAttribType type;
unsigned int value; /* OR'd flags (bits) for this attribute */ unsigned int value; /* OR'd flags (bits) for this attribute */
} VAConfigAttrib; } VAConfigAttrib;
/* attribute value for VAConfigAttribRTFormat */ /* attribute value for VAConfigAttribRTFormat */
#define VA_RT_FORMAT_YUV420 0x00000001 #define VA_RT_FORMAT_YUV420 0x00000001
#define VA_RT_FORMAT_YUV422 0x00000002 #define VA_RT_FORMAT_YUV422 0x00000002
#define VA_RT_FORMAT_YUV444 0x00000004 #define VA_RT_FORMAT_YUV444 0x00000004
#define VA_RT_FORMAT_YUV411 0x00000008
#define VA_RT_FORMAT_YUV400 0x00000010
#define VA_RT_FORMAT_RGB16 0x00010000
#define VA_RT_FORMAT_RGB32 0x00020000
/* RGBP covers RGBP and BGRP fourcc */
#define VA_RT_FORMAT_RGBP 0x00100000
#define VA_RT_FORMAT_PROTECTED 0x80000000 #define VA_RT_FORMAT_PROTECTED 0x80000000
/* attribute value for VAConfigAttribRateControl */ /** @name Attribute values for VAConfigAttribRateControl */
#define VA_RC_NONE 0x00000001 /**@{*/
#define VA_RC_CBR 0x00000002 /** \brief Driver does not support any form of rate control. */
#define VA_RC_VBR 0x00000004 #define VA_RC_NONE 0x00000001
#define VA_RC_VCM 0x00000008 /* video conference mode */ /** \brief Constant bitrate. */
#define VA_RC_CBR 0x00000002
/** \brief Variable bitrate. */
#define VA_RC_VBR 0x00000004
/** \brief Video conference mode. */
#define VA_RC_VCM 0x00000008
/** \brief Constant QP. */
#define VA_RC_CQP 0x00000010
/** \brief Variable bitrate with peak rate higher than average bitrate. */
#define VA_RC_VBR_CONSTRAINED 0x00000020
/**@}*/
/** @name Attribute values for VAConfigAttribEncPackedHeaders */
/**@{*/
/** \brief Driver does not support any packed headers mode. */
#define VA_ENC_PACKED_HEADER_NONE 0x00000000
/** \brief Driver supports packed sequence headers. e.g. SPS for H.264. */
#define VA_ENC_PACKED_HEADER_SEQUENCE 0x00000001
/** \brief Driver supports packed picture headers. e.g. PPS for H.264. */
#define VA_ENC_PACKED_HEADER_PICTURE 0x00000002
/** \brief Driver supports packed slice headers. e.g. \c slice_header() for
H.264. */
#define VA_ENC_PACKED_HEADER_SLICE 0x00000004
/** \brief Driver supports misc packed headers. e.g. SEI for H.264. */
#define VA_ENC_PACKED_HEADER_MISC 0x00000008
/** \brief Driver supports raw packed header, see VAEncPackedHeaderRawData
*/
#define VA_ENC_PACKED_HEADER_RAW_DATA 0x0000000C
/**@}*/
/** @name Attribute values for VAConfigAttribEncInterlaced */
/**@{*/
/** \brief Driver does not support interlaced coding. */
#define VA_ENC_INTERLACED_NONE 0x00000000
/** \brief Driver supports interlaced frame coding. */
#define VA_ENC_INTERLACED_FRAME 0x00000001
/** \brief Driver supports interlaced field coding. */
#define VA_ENC_INTERLACED_FIELD 0x00000002
/** \brief Driver supports macroblock adaptive frame field coding. */
#define VA_ENC_INTERLACED_MBAFF 0x00000004
/** \brief Driver supports picture adaptive frame field coding. */
#define VA_ENC_INTERLACED_PAFF 0x00000008
/**@}*/
/** @name Attribute values for VAConfigAttribEncSliceStructure */
/**@{*/
/** \brief Driver supports an arbitrary number of rows per slice. */
#define VA_ENC_SLICE_STRUCTURE_ARBITRARY_ROWS 0x00000000
/** \brief Driver supports a power-of-two number of rows per slice. */
#define VA_ENC_SLICE_STRUCTURE_POWER_OF_TWO_ROWS 0x00000001
/** \brief Driver supports an arbitrary number of rows per slice. */
#define VA_ENC_SLICE_STRUCTURE_ARBITRARY_MACROBLOCKS 0x00000002
/**@}*/
/* /*
* if an attribute is not applicable for a given * if an attribute is not applicable for a given
* profile/entrypoint pair, then set the value to the following * profile/entrypoint pair, then set the value to the following
*/ */
#define VA_ATTRIB_NOT_SUPPORTED 0x80000000 #define VA_ATTRIB_NOT_SUPPORTED 0x80000000
/* Get maximum number of profiles supported by the implementation */ /* Get maximum number of profiles supported by the implementation */
int vaMaxNumProfiles ( int vaMaxNumProfiles (
VADisplay dpy VADisplay dpy
skipping to change at line 422 skipping to change at line 599
* implementation specific internals are kept opaque to the clients * implementation specific internals are kept opaque to the clients
*/ */
typedef VAGenericID VAContextID; typedef VAGenericID VAContextID;
typedef VAGenericID VASurfaceID; typedef VAGenericID VASurfaceID;
#define VA_INVALID_ID 0xffffffff #define VA_INVALID_ID 0xffffffff
#define VA_INVALID_SURFACE VA_INVALID_ID #define VA_INVALID_SURFACE VA_INVALID_ID
/* /** \brief Generic value types. */
* vaCreateSurfaces - Create an array of surfaces used for decode and displ typedef enum {
ay VAGenericValueTypeInteger = 1, /**< 32-bit signed integer. */
* dpy: display VAGenericValueTypeFloat, /**< 32-bit floating-point value. *
* width: surface width /
* height: surface height VAGenericValueTypePointer, /**< Generic pointer type */
* format: VA_RT_FORMAT_YUV420, VA_RT_FORMAT_YUV422 or VA_RT_FORMAT_YUV444 VAGenericValueTypeFunc /**< Pointer to function */
* num_surfaces: number of surfaces to be created } VAGenericValueType;
* surfaces: array of surfaces created upon return
*/ /** \brief Generic function type. */
VAStatus vaCreateSurfaces ( typedef void (*VAGenericFunc)(void);
VADisplay dpy,
int width, /** \brief Generic value. */
int height, typedef struct _VAGenericValue {
int format, /** \brief Value type. See #VAGenericValueType. */
int num_surfaces, VAGenericValueType type;
VASurfaceID *surfaces /* out */ /** \brief Value holder. */
union {
/** \brief 32-bit signed integer. */
int i;
/** \brief 32-bit float. */
float f;
/** \brief Generic pointer. */
void *p;
/** \brief Pointer to function. */
VAGenericFunc fn;
} value;
} VAGenericValue;
/** @name Surface attribute flags */
/**@{*/
/** \brief Surface attribute is not supported. */
#define VA_SURFACE_ATTRIB_NOT_SUPPORTED 0x00000000
/** \brief Surface attribute can be got through vaQuerySurfaceAttributes().
*/
#define VA_SURFACE_ATTRIB_GETTABLE 0x00000001
/** \brief Surface attribute can be set through vaCreateSurfaces(). */
#define VA_SURFACE_ATTRIB_SETTABLE 0x00000002
/**@}*/
/** \brief Surface attribute types. */
typedef enum {
VASurfaceAttribNone = 0,
/**
* \brief Pixel format (fourcc).
*
* The value is meaningful as input to vaQuerySurfaceAttributes().
* If zero, the driver returns the optimal pixel format for the
* specified config. Otherwise, if non-zero, the value represents
* a pixel format (FOURCC) that is kept as is on output, if the
* driver supports it. Otherwise, the driver sets the value to
* zero and drops the \c VA_SURFACE_ATTRIB_SETTABLE flag.
*/
VASurfaceAttribPixelFormat,
/** \brief Minimal width in pixels (int, read-only). */
VASurfaceAttribMinWidth,
/** \brief Maximal width in pixels (int, read-only). */
VASurfaceAttribMaxWidth,
/** \brief Minimal height in pixels (int, read-only). */
VASurfaceAttribMinHeight,
/** \brief Maximal height in pixels (int, read-only). */
VASurfaceAttribMaxHeight,
/** \brief Surface memory type expressed in bit fields (int, read/write
). */
VASurfaceAttribMemoryType,
/** \brief External buffer descriptor (pointer, write). */
VASurfaceAttribExternalBufferDescriptor,
/** \brief Number of surface attributes. */
VASurfaceAttribCount
} VASurfaceAttribType;
/** \brief Surface attribute. */
typedef struct _VASurfaceAttrib {
/** \brief Type. */
VASurfaceAttribType type;
/** \brief Flags. See "Surface attribute flags". */
unsigned int flags;
/** \brief Value. See "Surface attribute types" for the expected types.
*/
VAGenericValue value;
} VASurfaceAttrib;
/**
* @name VASurfaceAttribMemoryType values in bit fields.
* Bit 0:7 are reserved for generic types, Bit 31:28 are reserved for
* Linux DRM, Bit 23:20 are reserved for Android. DRM and Android specific
* types are defined in DRM and Android header files.
*/
/**@{*/
/** \brief VA memory type (default) is supported. */
#define VA_SURFACE_ATTRIB_MEM_TYPE_VA 0x00000001
/** \brief V4L2 buffer memory type is supported. */
#define VA_SURFACE_ATTRIB_MEM_TYPE_V4L2 0x00000002
/** \brief User pointer memory type is supported. */
#define VA_SURFACE_ATTRIB_MEM_TYPE_USER_PTR 0x00000004
/**@}*/
/**
* \brief VASurfaceAttribExternalBuffers structure for
* the VASurfaceAttribExternalBufferDescriptor attribute.
*/
typedef struct _VASurfaceAttribExternalBuffers {
/** \brief pixel format in fourcc. */
unsigned int pixel_format;
/** \brief width in pixels. */
unsigned int width;
/** \brief height in pixels. */
unsigned int height;
/** \brief total size of the buffer in bytes. */
unsigned int data_size;
/** \brief number of planes for planar layout */
unsigned int num_planes;
/** \brief pitch for each plane in bytes */
unsigned int pitches[4];
/** \brief offset for each plane in bytes */
unsigned int offsets[4];
/** \brief buffer handles or user pointers */
unsigned long *buffers;
/** \brief number of elements in the "buffers" array */
unsigned int num_buffers;
/** \brief flags. See "Surface external buffer descriptor flags". */
unsigned int flags;
/** \brief reserved for passing private data */
void *private_data;
} VASurfaceAttribExternalBuffers;
/** @name VASurfaceAttribExternalBuffers flags */
/**@{*/
/** \brief Enable memory tiling */
#define VA_SURFACE_EXTBUF_DESC_ENABLE_TILING 0x00000001
/** \brief Memory is cacheable */
#define VA_SURFACE_EXTBUF_DESC_CACHED 0x00000002
/** \brief Memory is non-cacheable */
#define VA_SURFACE_EXTBUF_DESC_UNCACHED 0x00000004
/** \brief Memory is write-combined */
#define VA_SURFACE_EXTBUF_DESC_WC 0x00000008
/** \brief Memory is protected */
#define VA_SURFACE_EXTBUF_DESC_PROTECTED 0x80000000
/**@}*/
/**
* \brief Queries surface attributes for the supplied config.
*
* Unlike vaGetSurfaceAttributes(), this function queries for all
* supported attributes for the supplied VA @config. In particular, if
* the underlying hardware supports the creation of VA surfaces in
* various formats, then this function will enumerate all pixel
* formats that are supported.
*
* The \c attrib_list array is allocated by the user and \c
* num_attribs shall be initialized to the number of allocated
* elements in that array. Upon successful return, the actual number
* of attributes will be overwritten into \c num_attribs. Otherwise,
* \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned and \c num_attribs
* is adjusted to the number of elements that would be returned if
* enough space was available.
*
* Note: it is perfectly valid to pass NULL to the \c attrib_list
* argument when vaQuerySurfaceAttributes() is used to determine the
* actual number of elements that need to be allocated.
*
* @param[in] dpy the VA display
* @param[in] config the config identifying a codec or a video
* processing pipeline
* @param[out] attrib_list the output array of #VASurfaceAttrib elemen
ts
* @param[in,out] num_attribs the number of elements allocated on
* input, the number of elements actually filled in output
*/
VAStatus
vaQuerySurfaceAttributes(
VADisplay dpy,
VAConfigID config,
VASurfaceAttrib *attrib_list,
unsigned int *num_attribs
);
/**
* \brief Creates an array of surfaces
*
* Creates an array of surfaces. The optional list of attributes shall
* be constructed and validated through vaGetSurfaceAttributes() or
* constructed based based on what the underlying hardware could
* expose through vaQuerySurfaceAttributes().
*
* @param[in] dpy the VA display
* @param[in] format the desired surface format. See \c VA_RT_FO
RMAT_*
* @param[in] width the surface width
* @param[in] height the surface height
* @param[out] surfaces the array of newly created surfaces
* @param[in] num_surfaces the number of surfaces to create
* @param[in] attrib_list the list of (optional) attributes, or \c NU
LL
* @param[in] num_attribs the number of attributes supplied in
* \c attrib_list, or zero
*/
VAStatus
vaCreateSurfaces(
VADisplay dpy,
unsigned int format,
unsigned int width,
unsigned int height,
VASurfaceID *surfaces,
unsigned int num_surfaces,
VASurfaceAttrib *attrib_list,
unsigned int num_attribs
); );
/* /*
* vaDestroySurfaces - Destroy resources associated with surfaces. * vaDestroySurfaces - Destroy resources associated with surfaces.
* Surfaces can only be destroyed after the context associated has been * Surfaces can only be destroyed after the context associated has been
* destroyed. * destroyed.
* dpy: display * dpy: display
* surfaces: array of surfaces to destroy * surfaces: array of surfaces to destroy
* num_surfaces: number of surfaces in the array to be destroyed. * num_surfaces: number of surfaces in the array to be destroyed.
*/ */
skipping to change at line 519 skipping to change at line 881
VAImageBufferType = 9, VAImageBufferType = 9,
VAProtectedSliceDataBufferType = 10, VAProtectedSliceDataBufferType = 10,
VAQMatrixBufferType = 11, VAQMatrixBufferType = 11,
VAHuffmanTableBufferType = 12, VAHuffmanTableBufferType = 12,
/* Following are encode buffer types */ /* Following are encode buffer types */
VAEncCodedBufferType = 21, VAEncCodedBufferType = 21,
VAEncSequenceParameterBufferType = 22, VAEncSequenceParameterBufferType = 22,
VAEncPictureParameterBufferType = 23, VAEncPictureParameterBufferType = 23,
VAEncSliceParameterBufferType = 24, VAEncSliceParameterBufferType = 24,
VAEncH264VUIBufferType = 25, VAEncPackedHeaderParameterBufferType = 25,
VAEncH264SEIBufferType = 26, VAEncPackedHeaderDataBufferType = 26,
VAEncMiscParameterBufferType = 27, VAEncMiscParameterBufferType = 27,
VABufferTypeMax = 0xff VAEncMacroblockParameterBufferType = 28,
/* Following are video processing buffer types */
/**
* \brief Video processing pipeline parameter buffer.
*
* This buffer describes the video processing pipeline. See
* #VAProcPipelineParameterBuffer for details.
*/
VAProcPipelineParameterBufferType = 41,
/**
* \brief Video filter parameter buffer.
*
* This buffer describes the video filter parameters. All buffers
* inherit from #VAProcFilterParameterBufferBase, thus including
* a unique filter buffer type.
*
* The default buffer used by most filters is #VAProcFilterParameterBuf
fer.
* Filters requiring advanced parameters include, but are not limited t
o,
* deinterlacing (#VAProcFilterParameterBufferDeinterlacing),
* color balance (#VAProcFilterParameterBufferColorBalance), etc.
*/
VAProcFilterParameterBufferType = 42,
VABufferTypeMax
} VABufferType; } VABufferType;
typedef enum typedef enum
{ {
VAEncMiscParameterTypeFrameRate = 0, VAEncMiscParameterTypeFrameRate = 0,
VAEncMiscParameterTypeRateControl = 1, VAEncMiscParameterTypeRateControl = 1,
VAEncMiscParameterTypeMaxSliceSize = 2, VAEncMiscParameterTypeMaxSliceSize = 2,
VAEncMiscParameterTypeAIR = 3, VAEncMiscParameterTypeAIR = 3,
/** \brief Buffer type used to express a maximum frame size (in bits).
*/
VAEncMiscParameterTypeMaxFrameSize = 4,
/** \brief Buffer type used for HRD parameters. */
VAEncMiscParameterTypeHRD = 5,
} VAEncMiscParameterType; } VAEncMiscParameterType;
/** \brief Packed header type. */
typedef enum {
/** \brief Packed sequence header. */
VAEncPackedHeaderSequence = 1,
/** \brief Packed picture header. */
VAEncPackedHeaderPicture = 2,
/** \brief Packed slice header. */
VAEncPackedHeaderSlice = 3,
/**
* \brief Packed raw header.
*
* Packed raw data header can be used by the client to insert a header
* into the bitstream data buffer at the point it is passed, the driver
* will handle the raw packed header based on "has_emulation_bytes" fie
ld
* in the packed header parameter structure.
*/
VAEncPackedHeaderRawData = 4,
/** \brief Misc packed header. See codec-specific definitions. */
VAEncPackedHeaderMiscMask = 0x80000000,
} VAEncPackedHeaderType;
/** \brief Packed header parameter. */
typedef struct _VAEncPackedHeaderParameterBuffer {
/** Type of the packed header buffer. See #VAEncPackedHeaderType. */
unsigned int type;
/** \brief Size of the #VAEncPackedHeaderDataBuffer in bits. */
unsigned int bit_length;
/** \brief Flag: buffer contains start code emulation prevention bytes?
*/
unsigned char has_emulation_bytes;
} VAEncPackedHeaderParameterBuffer;
/* /*
* For application, e.g. set a new bitrate * For application, e.g. set a new bitrate
* VABufferID buf_id; * VABufferID buf_id;
* VAEncMiscParameterBuffer *misc_param; * VAEncMiscParameterBuffer *misc_param;
* VAEncMiscParameterRateControl *misc_rate_ctrl; * VAEncMiscParameterRateControl *misc_rate_ctrl;
* *
* vaCreateBuffer(dpy, context, VAEncMiscParameterBufferType, * vaCreateBuffer(dpy, context, VAEncMiscParameterBufferType,
* sizeof(VAEncMiscParameterBuffer) + sizeof(VAEncMiscParamete rRateControl), * sizeof(VAEncMiscParameterBuffer) + sizeof(VAEncMiscParamete rRateControl),
* 1, NULL, &buf_id); * 1, NULL, &buf_id);
* *
skipping to change at line 556 skipping to change at line 975
* misc_rate_ctrl->bits_per_second = 6400000; * misc_rate_ctrl->bits_per_second = 6400000;
* vaUnmapBuffer(dpy, buf_id); * vaUnmapBuffer(dpy, buf_id);
* vaRenderPicture(dpy, context, &buf_id, 1); * vaRenderPicture(dpy, context, &buf_id, 1);
*/ */
typedef struct _VAEncMiscParameterBuffer typedef struct _VAEncMiscParameterBuffer
{ {
VAEncMiscParameterType type; VAEncMiscParameterType type;
unsigned int data[0]; unsigned int data[0];
} VAEncMiscParameterBuffer; } VAEncMiscParameterBuffer;
/** \brief Rate control parameters */
typedef struct _VAEncMiscParameterRateControl typedef struct _VAEncMiscParameterRateControl
{ {
unsigned int bits_per_second; /* this is the maximum bit-rate to be con /* this is the maximum bit-rate to be constrained by the rate control i
strained by the rate control implementation */ mplementation */
unsigned int target_percentage; /* this is the bit-rate the rate contro unsigned int bits_per_second;
l is targeting, as a percentage of the maximum bit-rate */ /* this is the bit-rate the rate control is targeting, as a percentage
/* for example if target_percentage is of the maximum
95 then the rate control will target a bit-rate that is */ * bit-rate for example if target_percentage is 95 then the rate contro
/* 95% of the maximum bit-rate */ l will target
unsigned int window_size; /* windows size in milliseconds. For example * a bit-rate that is 95% of the maximum bit-rate
if this is set to 500, then the rate control will guarantee the */ */
/* target bit-rate over a 500 ms window */ unsigned int target_percentage;
unsigned int initial_qp; /* initial QP at I frames */ /* windows size in milliseconds. For example if this is set to 500,
* then the rate control will guarantee the target bit-rate over a 500
ms window
*/
unsigned int window_size;
/* initial QP at I frames */
unsigned int initial_qp;
unsigned int min_qp; unsigned int min_qp;
unsigned int basic_unit_size;
union
{
struct
{
unsigned int reset : 1;
unsigned int disable_frame_skip : 1; /* Disable frame skip in r
ate control mode */
unsigned int disable_bit_stuffing : 1; /* Disable bit stuffing
in rate control mode */
} bits;
unsigned int value;
} rc_flags;
} VAEncMiscParameterRateControl; } VAEncMiscParameterRateControl;
typedef struct _VAEncMiscParameterFrameRate typedef struct _VAEncMiscParameterFrameRate
{ {
unsigned int framerate; unsigned int framerate;
} VAEncMiscParameterFrameRate; } VAEncMiscParameterFrameRate;
/* /*
* Allow a maximum slice size to be specified (in bits). * Allow a maximum slice size to be specified (in bits).
* The encoder will attempt to make sure that individual slices do not exce ed this size * The encoder will attempt to make sure that individual slices do not exce ed this size
skipping to change at line 590 skipping to change at line 1027
unsigned int max_slice_size; unsigned int max_slice_size;
} VAEncMiscParameterMaxSliceSize; } VAEncMiscParameterMaxSliceSize;
typedef struct _VAEncMiscParameterAIR typedef struct _VAEncMiscParameterAIR
{ {
unsigned int air_num_mbs; unsigned int air_num_mbs;
unsigned int air_threshold; unsigned int air_threshold;
unsigned int air_auto; /* if set to 1 then hardware auto-tune the AIR t hreshold */ unsigned int air_auto; /* if set to 1 then hardware auto-tune the AIR t hreshold */
} VAEncMiscParameterAIR; } VAEncMiscParameterAIR;
typedef struct _VAEncMiscParameterHRD
{
unsigned int initial_buffer_fullness; /* in bits */
unsigned int buffer_size; /* in bits */
} VAEncMiscParameterHRD;
/**
* \brief Defines a maximum frame size (in bits).
*
* This misc parameter buffer defines the maximum size of a frame (in
* bits). The encoder will try to make sure that each frame does not
* exceed this size. Otherwise, if the frame size exceeds this size,
* the \c status flag of #VACodedBufferSegment will contain
* #VA_CODED_BUF_STATUS_FRAME_SIZE_OVERFLOW.
*/
typedef struct _VAEncMiscParameterBufferMaxFrameSize {
/** \brief Type. Shall be set to #VAEncMiscParameterTypeMaxFrameSize. *
/
VAEncMiscParameterType type;
/** \brief Maximum size of a frame (in bits). */
unsigned int max_frame_size;
} VAEncMiscParameterBufferMaxFrameSize;
/* /*
* There will be cases where the bitstream buffer will not have enough room to hold * There will be cases where the bitstream buffer will not have enough room to hold
* the data for the entire slice, and the following flags will be used in t he slice * the data for the entire slice, and the following flags will be used in t he slice
* parameter to signal to the server for the possible cases. * parameter to signal to the server for the possible cases.
* If a slice parameter buffer and slice data buffer pair is sent to the se rver with * If a slice parameter buffer and slice data buffer pair is sent to the se rver with
* the slice data partially in the slice data buffer (BEGIN and MIDDLE case s below), * the slice data partially in the slice data buffer (BEGIN and MIDDLE case s below),
* then a slice parameter and data buffer needs to be sent again to complet e this slice. * then a slice parameter and data buffer needs to be sent again to complet e this slice.
*/ */
#define VA_SLICE_DATA_FLAG_ALL 0x00 /* whole slice is in the buf fer */ #define VA_SLICE_DATA_FLAG_ALL 0x00 /* whole slice is in the buf fer */
#define VA_SLICE_DATA_FLAG_BEGIN 0x01 /* The beginning of the slic e is in the buffer but the end if not */ #define VA_SLICE_DATA_FLAG_BEGIN 0x01 /* The beginning of the slic e is in the buffer but the end if not */
skipping to change at line 1195 skipping to change at line 1654
unsigned int is_intra : 1; unsigned int is_intra : 1;
unsigned int disable_deblocking_filter_idc : 2; unsigned int disable_deblocking_filter_idc : 2;
unsigned int uses_long_term_ref :1; unsigned int uses_long_term_ref :1;
unsigned int is_long_term_ref :1; unsigned int is_long_term_ref :1;
} bits; } bits;
unsigned int value; unsigned int value;
} slice_flags; } slice_flags;
} VAEncSliceParameterBuffer; } VAEncSliceParameterBuffer;
/**************************** /****************************
* H.264 specific encode data structures
****************************/
typedef struct _VAEncSequenceParameterBufferH264
{
unsigned char seq_parameter_set_id;
unsigned char level_idc;
unsigned int intra_period;
unsigned int intra_idr_period;
unsigned int max_num_ref_frames;
unsigned int picture_width_in_mbs;
unsigned int picture_height_in_mbs;
unsigned int bits_per_second;
unsigned int frame_rate;
unsigned int initial_qp;
unsigned int min_qp;
unsigned int basic_unit_size;
unsigned char vui_flag;
} VAEncSequenceParameterBufferH264;
#define H264_LAST_PICTURE_EOSEQ 0x01 /* the last picture in the sequenc
e */
#define H264_LAST_PICTURE_EOSTREAM 0x02 /* the last picture in the stream
*/
typedef struct _VAEncPictureParameterBufferH264
{
VASurfaceID reference_picture;
VASurfaceID reconstructed_picture;
VABufferID coded_buf;
unsigned short picture_width;
unsigned short picture_height;
unsigned char last_picture;
} VAEncPictureParameterBufferH264;
/****************************
* H.263 specific encode data structures * H.263 specific encode data structures
****************************/ ****************************/
typedef struct _VAEncSequenceParameterBufferH263 typedef struct _VAEncSequenceParameterBufferH263
{ {
unsigned int intra_period; unsigned int intra_period;
unsigned int bits_per_second; unsigned int bits_per_second;
unsigned int frame_rate; unsigned int frame_rate;
unsigned int initial_qp; unsigned int initial_qp;
unsigned int min_qp; unsigned int min_qp;
skipping to change at line 1338 skipping to change at line 1764
* exceeded the maximum slice size specified. * exceeded the maximum slice size specified.
* BITRATE_OVERFLOW(bit10): The peak bitrate was exceeded for this frame. * BITRATE_OVERFLOW(bit10): The peak bitrate was exceeded for this frame.
* BITRATE_HIGH(bit11): The frame size got within the safety margin of the maximum size (VCM only) * BITRATE_HIGH(bit11): The frame size got within the safety margin of the maximum size (VCM only)
* AIR_MB_OVER_THRESHOLD: the number of MBs adapted to Intra MB * AIR_MB_OVER_THRESHOLD: the number of MBs adapted to Intra MB
*/ */
#define VA_CODED_BUF_STATUS_PICTURE_AVE_QP_MASK 0xff #define VA_CODED_BUF_STATUS_PICTURE_AVE_QP_MASK 0xff
#define VA_CODED_BUF_STATUS_LARGE_SLICE_MASK 0x100 #define VA_CODED_BUF_STATUS_LARGE_SLICE_MASK 0x100
#define VA_CODED_BUF_STATUS_SLICE_OVERFLOW_MASK 0x200 #define VA_CODED_BUF_STATUS_SLICE_OVERFLOW_MASK 0x200
#define VA_CODED_BUF_STATUS_BITRATE_OVERFLOW 0x400 #define VA_CODED_BUF_STATUS_BITRATE_OVERFLOW 0x400
#define VA_CODED_BUF_STATUS_BITRATE_HIGH 0x800 #define VA_CODED_BUF_STATUS_BITRATE_HIGH 0x800
/**
* \brief The frame has exceeded the maximum requested size.
*
* This flag indicates that the encoded frame size exceeds the value
* specified through a misc parameter buffer of type
* #VAEncMiscParameterTypeMaxFrameSize.
*/
#define VA_CODED_BUF_STATUS_FRAME_SIZE_OVERFLOW 0x1000
#define VA_CODED_BUF_STATUS_AIR_MB_OVER_THRESHOLD 0xff0000 #define VA_CODED_BUF_STATUS_AIR_MB_OVER_THRESHOLD 0xff0000
/* /**
* device independent data structure for codedbuffer * \brief The coded buffer segment contains a single NAL unit.
*
* This flag indicates that the coded buffer segment contains a
* single NAL unit. This flag might be useful to the user for
* processing the coded buffer.
*/
#define VA_CODED_BUF_STATUS_SINGLE_NALU 0x10000000
/**
* \brief Coded buffer segment.
*
* #VACodedBufferSegment is an element of a linked list describing
* some information on the coded buffer. The coded buffer segment
* could contain either a single NAL unit, or more than one NAL unit.
* It is recommended (but not required) to return a single NAL unit
* in a coded buffer segment, and the implementation should set the
* VA_CODED_BUF_STATUS_SINGLE_NALU status flag if that is the case.
*/ */
typedef struct _VACodedBufferSegment { typedef struct _VACodedBufferSegment {
unsigned int size;/* size of the data buffer in the coded buffer segmen /**
t, in bytes */ * \brief Size of the data buffer in this segment (in bytes).
unsigned int bit_offset; /* bit offset into the data buffer where valid */
bitstream data begins */ unsigned int size;
unsigned int status; /* status set by the driver on the coded buffer*/ /** \brief Bit offset into the data buffer where the video data starts.
unsigned int reserved; /* for future use */ */
void *buf; /* pointer to the beginning of the data buffer in the coded unsigned int bit_offset;
buffer segment */ /** \brief Status set by the driver. See \c VA_CODED_BUF_STATUS_*. */
void *next; /* pointer to the next VACodedBufferSegment */ unsigned int status;
/** \brief Reserved for future use. */
unsigned int reserved;
/** \brief Pointer to the start of the data buffer. */
void *buf;
/**
* \brief Pointer to the next #VACodedBufferSegment element,
* or \c NULL if there is none.
*/
void *next;
} VACodedBufferSegment; } VACodedBufferSegment;
/* /*
* Map data store of the buffer into the client's address space * Map data store of the buffer into the client's address space
* vaCreateBuffer() needs to be called with "data" set to NULL before * vaCreateBuffer() needs to be called with "data" set to NULL before
* calling vaMapBuffer() * calling vaMapBuffer()
* *
* if buffer type is VAEncCodedBufferType, pbuf points to link-list of * if buffer type is VAEncCodedBufferType, pbuf points to link-list of
* VACodedBufferSegment, and the list is terminated if "next" is NULL * VACodedBufferSegment, and the list is terminated if "next" is NULL
*/ */
skipping to change at line 1503 skipping to change at line 1964
* Images and Subpictures * Images and Subpictures
* VAImage is used to either get the surface data to client memory, or * VAImage is used to either get the surface data to client memory, or
* to copy image data in client memory to a surface. * to copy image data in client memory to a surface.
* Both images, subpictures and surfaces follow the same 2D coordinate syst em where origin * Both images, subpictures and surfaces follow the same 2D coordinate syst em where origin
* is at the upper left corner with positive X to the right and positive Y down * is at the upper left corner with positive X to the right and positive Y down
*/ */
#define VA_FOURCC(ch0, ch1, ch2, ch3) \ #define VA_FOURCC(ch0, ch1, ch2, ch3) \
((unsigned long)(unsigned char) (ch0) | ((unsigned long)(unsigned char) (ch1) << 8) | \ ((unsigned long)(unsigned char) (ch0) | ((unsigned long)(unsigned char) (ch1) << 8) | \
((unsigned long)(unsigned char) (ch2) << 16) | ((unsigned long)(unsigne d char) (ch3) << 24 )) ((unsigned long)(unsigned char) (ch2) << 16) | ((unsigned long)(unsigne d char) (ch3) << 24 ))
/* a few common FourCCs */ /*
* Pre-defined fourcc codes
*/
#define VA_FOURCC_NV12 0x3231564E #define VA_FOURCC_NV12 0x3231564E
#define VA_FOURCC_AI44 0x34344149 #define VA_FOURCC_AI44 0x34344149
#define VA_FOURCC_RGBA 0x41424752 #define VA_FOURCC_RGBA 0x41424752
#define VA_FOURCC_RGBX 0x58424752
#define VA_FOURCC_BGRA 0x41524742 #define VA_FOURCC_BGRA 0x41524742
#define VA_FOURCC_BGRX 0x58524742
#define VA_FOURCC_ARGB 0x42475241
#define VA_FOURCC_XRGB 0x42475258
#define VA_FOURCC_UYVY 0x59565955 #define VA_FOURCC_UYVY 0x59565955
#define VA_FOURCC_YUY2 0x32595559 #define VA_FOURCC_YUY2 0x32595559
#define VA_FOURCC_AYUV 0x56555941 #define VA_FOURCC_AYUV 0x56555941
#define VA_FOURCC_NV11 0x3131564e #define VA_FOURCC_NV11 0x3131564e
#define VA_FOURCC_YV12 0x32315659 #define VA_FOURCC_YV12 0x32315659
#define VA_FOURCC_P208 0x38303250 #define VA_FOURCC_P208 0x38303250
#define VA_FOURCC_IYUV 0x56555949 #define VA_FOURCC_IYUV 0x56555949
#define VA_FOURCC_YV24 0x34325659
#define VA_FOURCC_YV32 0x32335659
#define VA_FOURCC_Y800 0x30303859
#define VA_FOURCC_IMC3 0x33434D49
#define VA_FOURCC_411P 0x50313134
#define VA_FOURCC_422H 0x48323234
#define VA_FOURCC_422V 0x56323234
#define VA_FOURCC_444P 0x50343434
#define VA_FOURCC_RGBP 0x50424752
#define VA_FOURCC_BGRP 0x50524742
#define VA_FOURCC_411R 0x52313134 /* rotated 411P */
/* byte order */ /* byte order */
#define VA_LSB_FIRST 1 #define VA_LSB_FIRST 1
#define VA_MSB_FIRST 2 #define VA_MSB_FIRST 2
typedef struct _VAImageFormat typedef struct _VAImageFormat
{ {
unsigned int fourcc; unsigned int fourcc;
unsigned int byte_order; /* VA_LSB_FIRST, VA_MSB_FIRST */ unsigned int byte_order; /* VA_LSB_FIRST, VA_MSB_FIRST */
unsigned int bits_per_pixel; unsigned int bits_per_pixel;
skipping to change at line 2004 skipping to change at line 2482
* Only attributes returned with VA_DISPLAY_ATTRIB_SETTABLE set in the "fla gs" field * Only attributes returned with VA_DISPLAY_ATTRIB_SETTABLE set in the "fla gs" field
* from vaQueryDisplayAttributes() can be set. If the attribute is not set table or * from vaQueryDisplayAttributes() can be set. If the attribute is not set table or
* the value is out of range, the function returns VA_STATUS_ERROR_ATTR_NOT _SUPPORTED * the value is out of range, the function returns VA_STATUS_ERROR_ATTR_NOT _SUPPORTED
*/ */
VAStatus vaSetDisplayAttributes ( VAStatus vaSetDisplayAttributes (
VADisplay dpy, VADisplay dpy,
VADisplayAttribute *attr_list, VADisplayAttribute *attr_list,
int num_attributes int num_attributes
); );
/**@}*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif /* _VA_H_ */ #endif /* _VA_H_ */
 End of changes. 26 change blocks. 
85 lines changed or deleted 578 lines changed or added


 va_backend.h   va_backend.h 
skipping to change at line 394 skipping to change at line 394
*/ */
void **buffer /* if it is not NULL, map the surface buffer for void **buffer /* if it is not NULL, map the surface buffer for
* CPU access * CPU access
*/ */
); );
VAStatus (*vaUnlockSurface) ( VAStatus (*vaUnlockSurface) (
VADriverContextP ctx, VADriverContextP ctx,
VASurfaceID surface VASurfaceID surface
); );
/* DEPRECATED */
VAStatus
(*vaGetSurfaceAttributes)(
VADriverContextP dpy,
VAConfigID config,
VASurfaceAttrib *attrib_list,
unsigned int num_attribs
);
VAStatus
(*vaCreateSurfaces2)(
VADriverContextP ctx,
unsigned int format,
unsigned int width,
unsigned int height,
VASurfaceID *surfaces,
unsigned int num_surfaces,
VASurfaceAttrib *attrib_list,
unsigned int num_attribs
);
VAStatus
(*vaQuerySurfaceAttributes)(
VADriverContextP dpy,
VAConfigID config,
VASurfaceAttrib *attrib_list,
unsigned int *num_attribs
);
}; };
struct VADriverContext struct VADriverContext
{ {
void *pDriverData; void *pDriverData;
/** /**
* The core VA implementation hooks. * The core VA implementation hooks.
* *
* This structure is allocated from libva with calloc(). * This structure is allocated from libva with calloc().
skipping to change at line 476 skipping to change at line 505
/** /**
* The VA/Wayland implementation hooks. * The VA/Wayland implementation hooks.
* *
* This structure is intended for drivers that implement the * This structure is intended for drivers that implement the
* VA/Wayland API. libVA allocates this structure with calloc() * VA/Wayland API. libVA allocates this structure with calloc()
* and owns the resulting memory. * and owns the resulting memory.
*/ */
struct VADriverVTableWayland *vtable_wayland; struct VADriverVTableWayland *vtable_wayland;
unsigned long reserved[43]; /* reserve for future add-ins, decr /**
ease the subscript accordingly */ * \brief The VA/VPP implementation hooks.
*
* This structure is allocated from libva with calloc().
*/
struct VADriverVTableVPP *vtable_vpp;
unsigned long reserved[42]; /* reserve for future add-ins, decr
ease the subscript accordingly */
}; };
#define VA_DISPLAY_MAGIC 0x56414430 /* VAD0 */ #define VA_DISPLAY_MAGIC 0x56414430 /* VAD0 */
struct VADisplayContext struct VADisplayContext
{ {
int vadpy_magic; int vadpy_magic;
VADisplayContextP pNext; VADisplayContextP pNext;
VADriverContextP pDriverContext; VADriverContextP pDriverContext;
 End of changes. 2 change blocks. 
2 lines changed or deleted 38 lines changed or added


 va_backend_tpi.h   va_backend_tpi.h 
skipping to change at line 34 skipping to change at line 34
/* /*
* Video Decode Acceleration -Backend API * Video Decode Acceleration -Backend API
*/ */
#ifndef _VA_BACKEND_TPI_H_ #ifndef _VA_BACKEND_TPI_H_
#define _VA_BACKEND_TPI_H_ #define _VA_BACKEND_TPI_H_
#include <va/va.h> #include <va/va.h>
#include <va/va_backend.h> #include <va/va_backend.h>
#include <va/va_tpi.h>
#include <linux/videodev2.h>
struct VADriverVTableTPI struct VADriverVTableTPI
{ {
/* device specific */ VAStatus (*vaCreateSurfacesWithAttribute) (
VAStatus (*vaCreateSurfaceFromCIFrame) ( VADisplay dpy,
VADriverContextP ctx, int width,
unsigned long frame_id, int height,
VASurfaceID *surface /* out */ int format,
); int num_surfaces,
VASurfaceID *surfaces, /* out */
VAStatus (*vaCreateSurfaceFromV4L2Buf) ( VASurfaceAttributeTPI *attribute_tpi
VADriverContextP ctx,
int v4l2_fd, /* file descriptor of V4L2 device */
struct v4l2_format *v4l2_fmt, /* format of V4L2 */
struct v4l2_buffer *v4l2_buf, /* V4L2 buffer */
VASurfaceID *surface /* out */
); );
VAStatus (*vaCreateSurfacesForUserPtr)( VAStatus (*vaPutSurfaceBuf) (
VADriverContextP ctx, VADriverContextP ctx,
int width, VASurfaceID surface,
int height, unsigned char* data,
int format, int* data_len,
int num_surfaces, short srcx,
VASurfaceID *surfaces, /* out */ short srcy,
unsigned size, /* total buffer size need to be allocated */ unsigned short srcw,
unsigned int fourcc, /* expected fourcc */ unsigned short srch,
unsigned int luma_stride, /* luma stride, could be width al short destx,
igned with a special value */ short desty,
unsigned int chroma_u_stride, /* chroma stride */ unsigned short destw,
unsigned int chroma_v_stride, unsigned short desth,
unsigned int luma_offset, /* could be 0 */ VARectangle *cliprects, /* client supplied clip list */
unsigned int chroma_u_offset, /* UV offset from the beginni unsigned int number_cliprects, /* number of clip rects in the clip
ng of the memory */ list */
unsigned int chroma_v_offset unsigned int flags /* de-interlacing flags */
); );
VAStatus (*vaCreateSurfaceFromKBuf)(
VADriverContextP ctx,
int width,
int height,
int format,
VASurfaceID *surface, /* out */
unsigned int kbuf_handle, /* kernel buffer handle*/
unsigned size, /* kernel buffer size */
unsigned int kBuf_fourcc, /* expected fourcc */
unsigned int luma_stride, /* luma stride, could be width al
igned with a special value */
unsigned int chroma_u_stride, /* chroma stride */
unsigned int chroma_v_stride,
unsigned int luma_offset, /* could be 0 */
unsigned int chroma_u_offset, /* UV offset from the beginni
ng of the memory */
unsigned int chroma_v_offset
);
VAStatus (*vaPutSurfaceBuf) (
VADriverContextP ctx,
VASurfaceID surface,
unsigned char* data,
int* data_len,
short srcx,
short srcy,
unsigned short srcw,
unsigned short srch,
short destx,
short desty,
unsigned short destw,
unsigned short desth,
VARectangle *cliprects, /* client supplied clip list */
unsigned int number_cliprects, /* number of clip rects in t
he clip list */
unsigned int flags /* de-interlacing flags */
);
}; };
#endif /* _VA_BACKEND_TPI_H_ */ #endif /* _VA_BACKEND_TPI_H_ */
 End of changes. 3 change blocks. 
71 lines changed or deleted 27 lines changed or added


 va_drmcommon.h   va_drmcommon.h 
skipping to change at line 71 skipping to change at line 71
}; };
/** \brief Base DRM state. */ /** \brief Base DRM state. */
struct drm_state { struct drm_state {
/** \brief DRM connection descriptor. */ /** \brief DRM connection descriptor. */
int fd; int fd;
/** \brief DRM authentication type. */ /** \brief DRM authentication type. */
int auth_type; int auth_type;
}; };
/** \brief Kernel DRM buffer memory type. */
#define VA_SURFACE_ATTRIB_MEM_TYPE_KERNEL_DRM 0x10000000
/** \brief DRM PRIME memory type. */
#define VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME 0x20000000
#endif /* VA_DRM_COMMON_H */ #endif /* VA_DRM_COMMON_H */
 End of changes. 1 change blocks. 
0 lines changed or deleted 5 lines changed or added


 va_tpi.h   va_tpi.h 
skipping to change at line 24 skipping to change at line 24
* of the Software. * of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
* IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef _VA_TPI_H_
#define _VA_TPI_H_
/* Wrap a CI (camera imaging) frame as a VA surface to share captured video
between camear
* and VA encode. With frame_id, VA driver need to call CI interfaces to ge
t the information
* of the frame, and to determine if the frame can be wrapped as a VA surfa
ce
*
* Application should make sure the frame is idle before the frame is passe
d into VA stack
* and also a vaSyncSurface should be called before application tries to ac
cess the frame
* from CI stack
*/
#include <va/va.h> #include <va/va.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
VAStatus vaCreateSurfaceFromCIFrame ( typedef enum {
VADisplay dpy, VAExternalMemoryNULL, /* it is not external buffer, but requires the im
unsigned long frame_id, plementation allocates
VASurfaceID *surface /* out */ * the surface with the input attribute
); */
VAExternalMemoryV4L2Buffer,
VAStatus vaCreateSurfaceFromV4L2Buf( VAExternalMemoryCIFrame, /* the memory is from camera frames and buffer
VADisplay dpy, s points the frame ID list */
int v4l2_fd, /* file descriptor of V4L2 device */ VAExternalMemoryUserPointer, /* the memory is malloc-ed and buffers poi
struct v4l2_format *v4l2_fmt, /* format of V4L2 */ nts to the buffers */
struct v4l2_buffer *v4l2_buf, /* V4L2 buffer */ VAExternalMemoryKernelDRMBufffer, /* the memory is from kernel DRM buff
VASurfaceID *surface /* out */ ers and buffers points the
); * DRM buffer handle list
*/
VAExternalMemoryAndroidGrallocBuffer, /* the memory is from Android Gra
lloc memory, and buffers points
* the gralloc native_handle_t li
st
*/
} VASurfaceMemoryType;
typedef struct _VASurfaceAttributeTPI {
VASurfaceMemoryType type;
unsigned int width;
unsigned int height;
unsigned int size;
unsigned int pixel_format; /* buffer format */
unsigned int tiling; /* the memory is tiling or not */
unsigned int luma_stride; /* luma stride, could be width aligned with a
special value */
unsigned int chroma_u_stride; /* chroma stride */
unsigned int chroma_v_stride;
unsigned int luma_offset; /* could be 0 */
unsigned int chroma_u_offset; /* U offset from the beginning of the mem
ory */
unsigned int chroma_v_offset; /* V offset from the beginning of the mem
ory */
unsigned int count; /* buffer count for surface creation */
unsigned int *buffers; /* buffer handles or user pointers */
unsigned int reserved[4]; /* used to pass additional information, like
* Android native window pointer
*/
} VASurfaceAttributeTPI;
VAStatus vaPutSurfaceBuf ( VAStatus vaPutSurfaceBuf (
VADisplay dpy, VADisplay dpy,
VASurfaceID surface, VASurfaceID surface,
unsigned char* data, unsigned char* data,
int* data_len, int* data_len,
short srcx, short srcx,
short srcy, short srcy,
unsigned short srcw, unsigned short srcw,
unsigned short srch, unsigned short srch,
short destx, short destx,
short desty, short desty,
unsigned short destw, unsigned short destw,
unsigned short desth, unsigned short desth,
VARectangle *cliprects, /* client supplied clip list */ VARectangle *cliprects, /* client supplied clip list */
unsigned int number_cliprects, /* number of clip rects in the clip list */ unsigned int number_cliprects, /* number of clip rects in the clip list */
unsigned int flags /* de-interlacing flags */ unsigned int flags /* de-interlacing flags */
); );
/* VAStatus vaCreateSurfacesWithAttribute (
* The surfaces could be shared and accessed with extern devices
* which has special requirements, e.g. stride alignment
* This API is used to force libVA video surfaces are allocated
* according to these external requirements
* Special API for V4L2 user pointer support
*/
VAStatus vaCreateSurfacesForUserPtr(
VADisplay dpy, VADisplay dpy,
int width, int width,
int height, int height,
int format, int format,
int num_surfaces, int num_surfaces,
VASurfaceID *surfaces, /* out */ VASurfaceID *surfaces, /* out */
unsigned size, /* total buffer size need to be allocated */ VASurfaceAttributeTPI *attribute_tpi
unsigned int fourcc, /* expected fourcc */
unsigned int luma_stride, /* luma stride, could be width aligned with a
special value */
unsigned int chroma_u_stride, /* chroma stride */
unsigned int chroma_v_stride,
unsigned int luma_offset, /* could be 0 */
unsigned int chroma_u_offset, /* UV offset from the beginning of the me
mory */
unsigned int chroma_v_offset
);
/*
* Create surface from the Kernel buffer
*/
VAStatus vaCreateSurfaceFromKBuf(
VADisplay dpy,
int width,
int height,
int format,
VASurfaceID *surface, /* out */
unsigned int kbuf_handle, /* kernel buffer handle*/
unsigned size, /* kernel buffer size */
unsigned int kBuf_fourcc, /* expected fourcc */
unsigned int luma_stride, /* luma stride, could be width aligned with a
special value */
unsigned int chroma_u_stride, /* chroma stride */
unsigned int chroma_v_stride,
unsigned int luma_offset, /* could be 0 */
unsigned int chroma_u_offset, /* UV offset from the beginning of the me
mory */
unsigned int chroma_v_offset
); );
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif
 End of changes. 6 change blocks. 
66 lines changed or deleted 47 lines changed or added


 va_version.h   va_version.h 
skipping to change at line 40 skipping to change at line 40
* *
* The major version of VA-API (1, if %VA_VERSION is 1.2.3) * The major version of VA-API (1, if %VA_VERSION is 1.2.3)
*/ */
#define VA_MAJOR_VERSION 0 #define VA_MAJOR_VERSION 0
/** /**
* VA_MINOR_VERSION: * VA_MINOR_VERSION:
* *
* The minor version of VA-API (2, if %VA_VERSION is 1.2.3) * The minor version of VA-API (2, if %VA_VERSION is 1.2.3)
*/ */
#define VA_MINOR_VERSION 33 #define VA_MINOR_VERSION 34
/** /**
* VA_MICRO_VERSION: * VA_MICRO_VERSION:
* *
* The micro version of VA-API (3, if %VA_VERSION is 1.2.3) * The micro version of VA-API (3, if %VA_VERSION is 1.2.3)
*/ */
#define VA_MICRO_VERSION 0 #define VA_MICRO_VERSION 0
/** /**
* VA_VERSION: * VA_VERSION:
* *
* The full version of VA-API, like 1.2.3 * The full version of VA-API, like 1.2.3
*/ */
#define VA_VERSION 0.33.0 #define VA_VERSION 0.34.0
/** /**
* VA_VERSION_S: * VA_VERSION_S:
* *
* The full version of VA-API, in string form (suited for string * The full version of VA-API, in string form (suited for string
* concatenation) * concatenation)
*/ */
#define VA_VERSION_S "0.33.0" #define VA_VERSION_S "0.34.0"
/** /**
* VA_VERSION_HEX: * VA_VERSION_HEX:
* *
* Numerically encoded version of VA-API, like 0x010203 * Numerically encoded version of VA-API, like 0x010203
*/ */
#define VA_VERSION_HEX ((VA_MAJOR_VERSION << 24) | \ #define VA_VERSION_HEX ((VA_MAJOR_VERSION << 24) | \
(VA_MINOR_VERSION << 16) | \ (VA_MINOR_VERSION << 16) | \
(VA_MICRO_VERSION << 8)) (VA_MICRO_VERSION << 8))
 End of changes. 3 change blocks. 
3 lines changed or deleted 3 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/