| Index: third_party/libva/va/va.h
|
| diff --git a/third_party/libva/va/va.h b/third_party/libva/va/va.h
|
| index 471004e260913cf75cb601fbeca8f1c83998237e..0eceea71f0fa1e3373c71ef3119a50f49f9457ad 100644
|
| --- a/third_party/libva/va/va.h
|
| +++ b/third_party/libva/va/va.h
|
| @@ -68,6 +68,13 @@
|
| * 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_
|
| #define _VA_H_
|
|
|
| @@ -77,6 +84,30 @@
|
| extern "C" {
|
| #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
|
|
|
| @@ -134,6 +165,20 @@ typedef int VAStatus; /* Return status type from functions */
|
| #define VA_STATUS_ERROR_INVALID_IMAGE_FORMAT 0x00000016
|
| #define VA_STATUS_ERROR_DECODING_ERROR 0x00000017
|
| #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
|
|
|
| /* De-interlacing flags for vaPutSurface() */
|
| @@ -226,6 +271,8 @@ VAPrivFunc vaGetLibFunc (
|
| /* Currently defined profiles */
|
| typedef enum
|
| {
|
| + /** \brief Profile ID used for video processing. */
|
| + VAProfileNone = -1,
|
| VAProfileMPEG2Simple = 0,
|
| VAProfileMPEG2Main = 1,
|
| VAProfileMPEG4Simple = 2,
|
| @@ -253,7 +300,9 @@ typedef enum
|
| VAEntrypointMoComp = 4,
|
| VAEntrypointDeblocking = 5,
|
| 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;
|
|
|
| /* Currently defined configuration attribute types */
|
| @@ -264,7 +313,79 @@ typedef enum
|
| VAConfigAttribSpatialClipping = 2,
|
| VAConfigAttribIntraResidual = 3,
|
| 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-zero
|
| + * value for this attribute, this means the application can create
|
| + * additional #VAEncMacroblockParameterBufferH264 buffers referenced
|
| + * through VAEncSliceParameterBufferH264::macroblock_info.
|
| + */
|
| + VAConfigAttribEncMacroblockInfo = 16,
|
| + /**@}*/
|
| + VAConfigAttribTypeMax
|
| } VAConfigAttribType;
|
|
|
| /*
|
| @@ -282,13 +403,69 @@ typedef struct _VAConfigAttrib {
|
| #define VA_RT_FORMAT_YUV420 0x00000001
|
| #define VA_RT_FORMAT_YUV422 0x00000002
|
| #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
|
|
|
| -/* attribute value for VAConfigAttribRateControl */
|
| -#define VA_RC_NONE 0x00000001
|
| -#define VA_RC_CBR 0x00000002
|
| -#define VA_RC_VBR 0x00000004
|
| -#define VA_RC_VCM 0x00000008 /* video conference mode */
|
| +/** @name Attribute values for VAConfigAttribRateControl */
|
| +/**@{*/
|
| +/** \brief Driver does not support any form of rate control. */
|
| +#define VA_RC_NONE 0x00000001
|
| +/** \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
|
| @@ -420,24 +597,208 @@ typedef VAGenericID VASurfaceID;
|
| #define VA_INVALID_ID 0xffffffff
|
| #define VA_INVALID_SURFACE VA_INVALID_ID
|
|
|
| -/*
|
| - * vaCreateSurfaces - Create an array of surfaces used for decode and display
|
| - * dpy: display
|
| - * width: surface width
|
| - * height: surface height
|
| - * format: VA_RT_FORMAT_YUV420, VA_RT_FORMAT_YUV422 or VA_RT_FORMAT_YUV444
|
| - * num_surfaces: number of surfaces to be created
|
| - * surfaces: array of surfaces created upon return
|
| - */
|
| -VAStatus vaCreateSurfaces (
|
| - VADisplay dpy,
|
| - int width,
|
| - int height,
|
| - int format,
|
| - int num_surfaces,
|
| - VASurfaceID *surfaces /* out */
|
| +/** \brief Generic value types. */
|
| +typedef enum {
|
| + VAGenericValueTypeInteger = 1, /**< 32-bit signed integer. */
|
| + VAGenericValueTypeFloat, /**< 32-bit floating-point value. */
|
| + VAGenericValueTypePointer, /**< Generic pointer type */
|
| + VAGenericValueTypeFunc /**< Pointer to function */
|
| +} VAGenericValueType;
|
| +
|
| +/** \brief Generic function type. */
|
| +typedef void (*VAGenericFunc)(void);
|
| +
|
| +/** \brief Generic value. */
|
| +typedef struct _VAGenericValue {
|
| + /** \brief Value type. See #VAGenericValueType. */
|
| + VAGenericValueType type;
|
| + /** \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 elements
|
| + * @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_FORMAT_*
|
| + * @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 NULL
|
| + * @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.
|
| @@ -518,10 +879,32 @@ typedef enum
|
| VAEncSequenceParameterBufferType = 22,
|
| VAEncPictureParameterBufferType = 23,
|
| VAEncSliceParameterBufferType = 24,
|
| - VAEncH264VUIBufferType = 25,
|
| - VAEncH264SEIBufferType = 26,
|
| + VAEncPackedHeaderParameterBufferType = 25,
|
| + VAEncPackedHeaderDataBufferType = 26,
|
| 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 #VAProcFilterParameterBuffer.
|
| + * Filters requiring advanced parameters include, but are not limited to,
|
| + * deinterlacing (#VAProcFilterParameterBufferDeinterlacing),
|
| + * color balance (#VAProcFilterParameterBufferColorBalance), etc.
|
| + */
|
| + VAProcFilterParameterBufferType = 42,
|
| + VABufferTypeMax
|
| } VABufferType;
|
|
|
| typedef enum
|
| @@ -530,8 +913,43 @@ typedef enum
|
| VAEncMiscParameterTypeRateControl = 1,
|
| VAEncMiscParameterTypeMaxSliceSize = 2,
|
| 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;
|
|
|
| +/** \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" field
|
| + * 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
|
| * VABufferID buf_id;
|
| @@ -555,16 +973,35 @@ typedef struct _VAEncMiscParameterBuffer
|
| unsigned int data[0];
|
| } VAEncMiscParameterBuffer;
|
|
|
| +
|
| +/** \brief Rate control parameters */
|
| typedef struct _VAEncMiscParameterRateControl
|
| {
|
| - unsigned int bits_per_second; /* this is the maximum bit-rate to be constrained by the rate control implementation */
|
| - unsigned int target_percentage; /* this is the bit-rate the rate control is targeting, as a percentage of the maximum bit-rate */
|
| - /* for example if target_percentage is 95 then the rate control will target a bit-rate that is */
|
| - /* 95% of the maximum bit-rate */
|
| - unsigned int window_size; /* 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 initial_qp; /* initial QP at I frames */
|
| - unsigned int min_qp;
|
| + /* this is the maximum bit-rate to be constrained by the rate control implementation */
|
| + unsigned int bits_per_second;
|
| + /* this is the bit-rate the rate control is targeting, as a percentage of the maximum
|
| + * bit-rate for example if target_percentage is 95 then the rate control will target
|
| + * a bit-rate that is 95% of the maximum bit-rate
|
| + */
|
| + unsigned int target_percentage;
|
| + /* 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 basic_unit_size;
|
| + union
|
| + {
|
| + struct
|
| + {
|
| + unsigned int reset : 1;
|
| + unsigned int disable_frame_skip : 1; /* Disable frame skip in rate control mode */
|
| + unsigned int disable_bit_stuffing : 1; /* Disable bit stuffing in rate control mode */
|
| + } bits;
|
| + unsigned int value;
|
| + } rc_flags;
|
| } VAEncMiscParameterRateControl;
|
|
|
| typedef struct _VAEncMiscParameterFrameRate
|
| @@ -589,6 +1026,27 @@ typedef struct _VAEncMiscParameterAIR
|
| unsigned int air_auto; /* if set to 1 then hardware auto-tune the AIR threshold */
|
| } 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
|
| @@ -631,94 +1089,7 @@ typedef struct _VAEncPictureParameterBufferJPEG
|
| VABufferID coded_buf;
|
| } VAEncPictureParameterBufferJPEG;
|
|
|
| -/* data struct for JPEG decoding */
|
| -
|
| -/* Quantization table */
|
| -typedef struct _VAIQMatrixBufferJPEG
|
| -{
|
| - int precision[4]; /* valid value: 0(8-bits) , 1(16-bits), precision[Tq](Tq=0,1,2,3)
|
| - * specifies precision for destination Tq
|
| - */
|
| - unsigned char quantiser_matrix[4][128]; /* quantiser_matrix[Tq](Tq=0,1,2,3) specifies a
|
| - * quantization table for destination Tq in zig-zag
|
| - * scan order. Only the first 64 bytes are valid for each
|
| - * table if precision is 0(8-bits).
|
| - */
|
| -} VAIQMatrixBufferJPEG;
|
| -
|
| -#define VA_JPEG_SOF0 0xC0
|
| -#define VA_JPEG_SOF1 0xC1
|
| -#define VA_JPEG_SOF2 0xC2
|
| -#define VA_JPEG_SOF3 0xC3
|
| -#define VA_JPEG_SOF5 0xC5
|
| -#define VA_JPEG_SOF6 0xC6
|
| -#define VA_JPEG_SOF7 0xC7
|
| -#define VA_JPEG_SOF9 0xC9
|
| -#define VA_JPEG_SOF10 0xCA
|
| -#define VA_JPEG_SOF11 0xCB
|
| -#define VA_JPEG_SOF13 0xCD
|
| -#define VA_JPEG_SOF14 0xCE
|
| -
|
| -/* JPEG Picture Parameter Buffer */
|
| -typedef struct _VAPictureParameterBufferJPEG
|
| -{
|
| - unsigned int type; /* SOFn */
|
| - unsigned int sample_precision;
|
| - unsigned int image_width;
|
| - unsigned int image_height;
|
| - unsigned int num_components;
|
| - struct {
|
| - unsigned char component_id; /* Ci, the range is 0-255, see B.2.2 */
|
| - unsigned char h_sampling_factor;
|
| - unsigned char v_sampling_factor;
|
| - unsigned char quantiser_table_selector; /* Tqi, quantization table destination selector */
|
| - } components[4];
|
| -
|
| - /* ROI (region of interest), for JPEG2000 */
|
| - struct {
|
| - int enabled;
|
| - int start_x;
|
| - int start_y;
|
| - int end_x;
|
| - int end_y;
|
| - } roi;
|
| -
|
| - int rotation;
|
| -} VAPictureParameterBufferJPEG;
|
| -
|
| -typedef struct _VAHuffmanTableBufferJPEG
|
| -{
|
| - struct {
|
| - unsigned char dc_bits[16]; /* Number of Huffman codes of length i for DC */
|
| - unsigned char dc_huffval[20]; /* Value associated with each Huffman code for DC */
|
| - unsigned char ac_bits[16]; /* Number of Huffman codes of length i for AC */
|
| - unsigned char ac_huffval[256]; /* Value associated with each Huffman code for AC */
|
| - } huffman_table[4]; /* Up to 4 huffman tables, huffman_table[Th](Th=0,1,2,3)
|
| - * specifies a buffman table for destination Th.
|
| - */
|
| -
|
| -} VAHuffmanTableBufferJPEG;
|
| -
|
| -/* JPEG Scan Parameter Buffer, The Scan of is similar to
|
| - * the Slice of other codecs */
|
| -typedef struct _VASliceParameterBufferJPEG
|
| -{
|
| - unsigned int slice_data_size; /* number of bytes in the slice data buffer for this slice */
|
| - unsigned int slice_data_offset; /* the offset to the first byte of slice data */
|
| - unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX definitions */
|
| - unsigned int slice_horizontal_position;
|
| - unsigned int slice_vertical_position;
|
| -
|
| - unsigned int num_components;
|
| - struct {
|
| - int component_id; /* Csj, it must match one of component_ids specified in VAPictureParameterBufferJPEG */
|
| - int dc_selector; /* Tdj(0,1,2,3) */
|
| - int ac_selector; /* Taj(0,1,2,3) */
|
| - } components[4];
|
| -
|
| - int restart_interval; /* specifies the number of MCUs in restart interval, defined in DRI marker */
|
| - int num_mcus; /* indicates the number of MCUs in a scan */
|
| -} VASliceParameterBufferJPEG;
|
| +#include <va/va_dec_jpeg.h>
|
|
|
| /****************************
|
| * MPEG-2 data structures
|
| @@ -1282,38 +1653,6 @@ typedef struct _VAEncSliceParameterBuffer
|
| } slice_flags;
|
| } 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 sequence */
|
| -#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
|
| @@ -1429,18 +1768,53 @@ VAStatus vaBufferSetNumElements (
|
| #define VA_CODED_BUF_STATUS_SLICE_OVERFLOW_MASK 0x200
|
| #define VA_CODED_BUF_STATUS_BITRATE_OVERFLOW 0x400
|
| #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
|
|
|
| -/*
|
| - * 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 {
|
| - unsigned int size;/* size of the data buffer in the coded buffer segment, in bytes */
|
| - unsigned int bit_offset; /* bit offset into the data buffer where valid bitstream data begins */
|
| - unsigned int status; /* status set by the driver on the coded buffer*/
|
| - unsigned int reserved; /* for future use */
|
| - void *buf; /* pointer to the beginning of the data buffer in the coded buffer segment */
|
| - void *next; /* pointer to the next VACodedBufferSegment */
|
| + /**
|
| + * \brief Size of the data buffer in this segment (in bytes).
|
| + */
|
| + unsigned int size;
|
| + /** \brief Bit offset into the data buffer where the video data starts. */
|
| + unsigned int bit_offset;
|
| + /** \brief Status set by the driver. See \c VA_CODED_BUF_STATUS_*. */
|
| + 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;
|
|
|
| /*
|
| @@ -1594,11 +1968,17 @@ VAStatus vaQuerySurfaceError(
|
| ((unsigned long)(unsigned char) (ch0) | ((unsigned long)(unsigned char) (ch1) << 8) | \
|
| ((unsigned long)(unsigned char) (ch2) << 16) | ((unsigned long)(unsigned char) (ch3) << 24 ))
|
|
|
| -/* a few common FourCCs */
|
| +/*
|
| + * Pre-defined fourcc codes
|
| + */
|
| #define VA_FOURCC_NV12 0x3231564E
|
| #define VA_FOURCC_AI44 0x34344149
|
| #define VA_FOURCC_RGBA 0x41424752
|
| +#define VA_FOURCC_RGBX 0x58424752
|
| #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_YUY2 0x32595559
|
| #define VA_FOURCC_AYUV 0x56555941
|
| @@ -1606,6 +1986,17 @@ VAStatus vaQuerySurfaceError(
|
| #define VA_FOURCC_YV12 0x32315659
|
| #define VA_FOURCC_P208 0x38303250
|
| #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 */
|
| #define VA_LSB_FIRST 1
|
| @@ -2095,6 +2486,8 @@ VAStatus vaSetDisplayAttributes (
|
| int num_attributes
|
| );
|
|
|
| +/**@}*/
|
| +
|
| #ifdef __cplusplus
|
| }
|
| #endif
|
|
|