Commit f8ccff8a authored by Waldo Bastian's avatar Waldo Bastian

Update to VA API 0.28

parent 90abc964
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
AC_PREREQ(2.57) AC_PREREQ(2.57)
AC_INIT([libva], 0.26, [waldo.bastian@intel.com], libva) AC_INIT([libva], 0.28, [waldo.bastian@intel.com], libva)
AC_CONFIG_SRCDIR([Makefile.am]) AC_CONFIG_SRCDIR([Makefile.am])
AM_INIT_AUTOMAKE([dist-bzip2]) AM_INIT_AUTOMAKE([dist-bzip2])
......
libva-dev_0.20-1_i386.deb libdevel extra libva-dev_0.24-1_i386.deb libdevel extra
libva1_0.20-1_i386.deb libs extra libva1_0.24-1_i386.deb libs extra
...@@ -451,6 +451,18 @@ VAStatus dummy_CreateImage( ...@@ -451,6 +451,18 @@ VAStatus dummy_CreateImage(
return VA_STATUS_SUCCESS; return VA_STATUS_SUCCESS;
} }
VAStatus dummy_DeriveImage(
VADriverContextP ctx,
VASurfaceID surface,
VAImage *image /* out */
)
{
INIT_DRIVER_DATA
/* TODO */
return VA_STATUS_SUCCESS;
}
VAStatus dummy_DestroyImage( VAStatus dummy_DestroyImage(
VADriverContextP ctx, VADriverContextP ctx,
VAImageID image VAImageID image
...@@ -508,6 +520,26 @@ VAStatus dummy_PutImage( ...@@ -508,6 +520,26 @@ VAStatus dummy_PutImage(
return VA_STATUS_SUCCESS; return VA_STATUS_SUCCESS;
} }
VAStatus dummy_PutImage2(
VADriverContextP ctx,
VASurfaceID surface,
VAImageID image,
int src_x,
int src_y,
unsigned int src_width,
unsigned int src_height,
int dest_x,
int dest_y,
unsigned int dest_width,
unsigned int dest_height
)
{
INIT_DRIVER_DATA
/* TODO */
return VA_STATUS_SUCCESS;
}
VAStatus dummy_QuerySubpictureFormats( VAStatus dummy_QuerySubpictureFormats(
VADriverContextP ctx, VADriverContextP ctx,
VAImageFormat *format_list, /* out */ VAImageFormat *format_list, /* out */
...@@ -623,6 +655,32 @@ VAStatus dummy_AssociateSubpicture( ...@@ -623,6 +655,32 @@ VAStatus dummy_AssociateSubpicture(
return VA_STATUS_SUCCESS; return VA_STATUS_SUCCESS;
} }
VAStatus dummy_AssociateSubpicture2(
VADriverContextP ctx,
VASubpictureID subpicture,
VASurfaceID *target_surfaces,
int num_surfaces,
short src_x, /* upper left offset in subpicture */
short src_y,
unsigned short src_width,
unsigned short src_height,
short dest_x, /* upper left offset in surface */
short dest_y,
unsigned short dest_width,
unsigned short dest_height,
/*
* whether to enable chroma-keying or global-alpha
* see VA_SUBPICTURE_XXX values
*/
unsigned int flags
)
{
INIT_DRIVER_DATA
/* TODO */
return VA_STATUS_SUCCESS;
}
VAStatus dummy_DeassociateSubpicture( VAStatus dummy_DeassociateSubpicture(
VADriverContextP ctx, VADriverContextP ctx,
VASubpictureID subpicture, VASubpictureID subpicture,
...@@ -1141,7 +1199,7 @@ VAStatus dummy_Terminate( VADriverContextP ctx ) ...@@ -1141,7 +1199,7 @@ VAStatus dummy_Terminate( VADriverContextP ctx )
return VA_STATUS_SUCCESS; return VA_STATUS_SUCCESS;
} }
VAStatus __vaDriverInit_0_26( VADriverContextP ctx ) VAStatus __vaDriverInit_0_28( VADriverContextP ctx )
{ {
object_base_p obj; object_base_p obj;
int result; int result;
...@@ -1149,7 +1207,7 @@ VAStatus __vaDriverInit_0_26( VADriverContextP ctx ) ...@@ -1149,7 +1207,7 @@ VAStatus __vaDriverInit_0_26( VADriverContextP ctx )
int i; int i;
ctx->version_major = 0; ctx->version_major = 0;
ctx->version_minor = 26; ctx->version_minor = 28;
ctx->max_profiles = DUMMY_MAX_PROFILES; ctx->max_profiles = DUMMY_MAX_PROFILES;
ctx->max_entrypoints = DUMMY_MAX_ENTRYPOINTS; ctx->max_entrypoints = DUMMY_MAX_ENTRYPOINTS;
ctx->max_attributes = DUMMY_MAX_CONFIG_ATTRIBUTES; ctx->max_attributes = DUMMY_MAX_CONFIG_ATTRIBUTES;
...@@ -1183,10 +1241,12 @@ VAStatus __vaDriverInit_0_26( VADriverContextP ctx ) ...@@ -1183,10 +1241,12 @@ VAStatus __vaDriverInit_0_26( VADriverContextP ctx )
ctx->vtable.vaPutSurface = dummy_PutSurface; ctx->vtable.vaPutSurface = dummy_PutSurface;
ctx->vtable.vaQueryImageFormats = dummy_QueryImageFormats; ctx->vtable.vaQueryImageFormats = dummy_QueryImageFormats;
ctx->vtable.vaCreateImage = dummy_CreateImage; ctx->vtable.vaCreateImage = dummy_CreateImage;
ctx->vtable.vaDeriveImage = dummy_DeriveImage;
ctx->vtable.vaDestroyImage = dummy_DestroyImage; ctx->vtable.vaDestroyImage = dummy_DestroyImage;
ctx->vtable.vaSetImagePalette = dummy_SetImagePalette; ctx->vtable.vaSetImagePalette = dummy_SetImagePalette;
ctx->vtable.vaGetImage = dummy_GetImage; ctx->vtable.vaGetImage = dummy_GetImage;
ctx->vtable.vaPutImage = dummy_PutImage; ctx->vtable.vaPutImage = dummy_PutImage;
ctx->vtable.vaPutImage2 = dummy_PutImage2;
ctx->vtable.vaQuerySubpictureFormats = dummy_QuerySubpictureFormats; ctx->vtable.vaQuerySubpictureFormats = dummy_QuerySubpictureFormats;
ctx->vtable.vaCreateSubpicture = dummy_CreateSubpicture; ctx->vtable.vaCreateSubpicture = dummy_CreateSubpicture;
ctx->vtable.vaDestroySubpicture = dummy_DestroySubpicture; ctx->vtable.vaDestroySubpicture = dummy_DestroySubpicture;
...@@ -1195,6 +1255,7 @@ VAStatus __vaDriverInit_0_26( VADriverContextP ctx ) ...@@ -1195,6 +1255,7 @@ VAStatus __vaDriverInit_0_26( VADriverContextP ctx )
ctx->vtable.vaSetSubpictureChromakey = dummy_SetSubpictureChromakey; ctx->vtable.vaSetSubpictureChromakey = dummy_SetSubpictureChromakey;
ctx->vtable.vaSetSubpictureGlobalAlpha = dummy_SetSubpictureGlobalAlpha; ctx->vtable.vaSetSubpictureGlobalAlpha = dummy_SetSubpictureGlobalAlpha;
ctx->vtable.vaAssociateSubpicture = dummy_AssociateSubpicture; ctx->vtable.vaAssociateSubpicture = dummy_AssociateSubpicture;
ctx->vtable.vaAssociateSubpicture2 = dummy_AssociateSubpicture2;
ctx->vtable.vaDeassociateSubpicture = dummy_DeassociateSubpicture; ctx->vtable.vaDeassociateSubpicture = dummy_DeassociateSubpicture;
ctx->vtable.vaQueryDisplayAttributes = dummy_QueryDisplayAttributes; ctx->vtable.vaQueryDisplayAttributes = dummy_QueryDisplayAttributes;
ctx->vtable.vaGetDisplayAttributes = dummy_GetDisplayAttributes; ctx->vtable.vaGetDisplayAttributes = dummy_GetDisplayAttributes;
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
#define DUMMY_MAX_IMAGE_FORMATS 10 #define DUMMY_MAX_IMAGE_FORMATS 10
#define DUMMY_MAX_SUBPIC_FORMATS 4 #define DUMMY_MAX_SUBPIC_FORMATS 4
#define DUMMY_MAX_DISPLAY_ATTRIBUTES 4 #define DUMMY_MAX_DISPLAY_ATTRIBUTES 4
#define DUMMY_STR_VENDOR "Dummy-dummy-1.0-dummy" #define DUMMY_STR_VENDOR "Dummy Driver 1.0"
struct dummy_driver_data { struct dummy_driver_data {
struct object_heap config_heap; struct object_heap config_heap;
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
libva_la_LTLIBRARIES = libva.la libva_la_LTLIBRARIES = libva.la
libva_ladir = $(libdir) libva_ladir = $(libdir)
libva_la_LDFLAGS = -version-number 0:26:0 -no-undefined libva_la_LDFLAGS = -version-number 0:28:0 -no-undefined
libva_la_LIBADD = -ldl -lX11 -lXext libva_la_LIBADD = -ldl -lX11 -lXext
libva_la_SOURCES = va_dri.c va.c va_dristr.h libva_la_SOURCES = va_dri.c va.c va_dristr.h
......
...@@ -35,8 +35,8 @@ ...@@ -35,8 +35,8 @@
#include "va_dri.h" #include "va_dri.h"
#define VA_MAJOR_VERSION 0 #define VA_MAJOR_VERSION 0
#define VA_MINOR_VERSION 26 #define VA_MINOR_VERSION 28
#define DRIVER_INIT_FUNC "__vaDriverInit_0_26" #define DRIVER_INIT_FUNC "__vaDriverInit_0_28"
#define DEFAULT_DRIVER_DIR "/usr/X11R6/lib/modules/dri" #define DEFAULT_DRIVER_DIR "/usr/X11R6/lib/modules/dri"
#define DRIVER_EXTENSION "_drv_video.so" #define DRIVER_EXTENSION "_drv_video.so"
...@@ -211,7 +211,7 @@ static VAStatus va_getDriverName(VADriverContextP ctx, char **driver_name) ...@@ -211,7 +211,7 @@ static VAStatus va_getDriverName(VADriverContextP ctx, char **driver_name)
static VAStatus va_openDriver(VADriverContextP ctx, char *driver_name) static VAStatus va_openDriver(VADriverContextP ctx, char *driver_name)
{ {
VAStatus vaStatus = VA_STATUS_ERROR_UNKNOWN; VAStatus vaStatus = VA_STATUS_ERROR_UNKNOWN;
char *search_path; char *search_path = NULL;
char *saveptr; char *saveptr;
char *driver_dir; char *driver_dir;
...@@ -299,10 +299,12 @@ static VAStatus va_openDriver(VADriverContextP ctx, char *driver_name) ...@@ -299,10 +299,12 @@ static VAStatus va_openDriver(VADriverContextP ctx, char *driver_name)
CHECK_VTABLE(vaStatus, ctx, PutSurface); CHECK_VTABLE(vaStatus, ctx, PutSurface);
CHECK_VTABLE(vaStatus, ctx, QueryImageFormats); CHECK_VTABLE(vaStatus, ctx, QueryImageFormats);
CHECK_VTABLE(vaStatus, ctx, CreateImage); CHECK_VTABLE(vaStatus, ctx, CreateImage);
CHECK_VTABLE(vaStatus, ctx, DeriveImage);
CHECK_VTABLE(vaStatus, ctx, DestroyImage); CHECK_VTABLE(vaStatus, ctx, DestroyImage);
CHECK_VTABLE(vaStatus, ctx, SetImagePalette); CHECK_VTABLE(vaStatus, ctx, SetImagePalette);
CHECK_VTABLE(vaStatus, ctx, GetImage); CHECK_VTABLE(vaStatus, ctx, GetImage);
CHECK_VTABLE(vaStatus, ctx, PutImage); CHECK_VTABLE(vaStatus, ctx, PutImage);
CHECK_VTABLE(vaStatus, ctx, PutImage2);
CHECK_VTABLE(vaStatus, ctx, QuerySubpictureFormats); CHECK_VTABLE(vaStatus, ctx, QuerySubpictureFormats);
CHECK_VTABLE(vaStatus, ctx, CreateSubpicture); CHECK_VTABLE(vaStatus, ctx, CreateSubpicture);
CHECK_VTABLE(vaStatus, ctx, DestroySubpicture); CHECK_VTABLE(vaStatus, ctx, DestroySubpicture);
...@@ -311,6 +313,7 @@ static VAStatus va_openDriver(VADriverContextP ctx, char *driver_name) ...@@ -311,6 +313,7 @@ static VAStatus va_openDriver(VADriverContextP ctx, char *driver_name)
CHECK_VTABLE(vaStatus, ctx, SetSubpictureChromakey); CHECK_VTABLE(vaStatus, ctx, SetSubpictureChromakey);
CHECK_VTABLE(vaStatus, ctx, SetSubpictureGlobalAlpha); CHECK_VTABLE(vaStatus, ctx, SetSubpictureGlobalAlpha);
CHECK_VTABLE(vaStatus, ctx, AssociateSubpicture); CHECK_VTABLE(vaStatus, ctx, AssociateSubpicture);
CHECK_VTABLE(vaStatus, ctx, AssociateSubpicture2);
CHECK_VTABLE(vaStatus, ctx, DeassociateSubpicture); CHECK_VTABLE(vaStatus, ctx, DeassociateSubpicture);
CHECK_VTABLE(vaStatus, ctx, QueryDisplayAttributes); CHECK_VTABLE(vaStatus, ctx, QueryDisplayAttributes);
CHECK_VTABLE(vaStatus, ctx, GetDisplayAttributes); CHECK_VTABLE(vaStatus, ctx, GetDisplayAttributes);
...@@ -340,6 +343,18 @@ static VAStatus va_openDriver(VADriverContextP ctx, char *driver_name) ...@@ -340,6 +343,18 @@ static VAStatus va_openDriver(VADriverContextP ctx, char *driver_name)
return vaStatus; return vaStatus;
} }
VAPrivFunc vaGetLibFunc(VADisplay dpy, const char *func)
{
VADriverContextP ctx = CTX(dpy);
if( !vaContextIsValid(ctx) )
return NULL;
if (NULL == ctx->handle)
return NULL;
return (VAPrivFunc) dlsym(ctx->handle, func);
}
/* /*
* Returns a short english description of error_status * Returns a short english description of error_status
...@@ -942,6 +957,76 @@ VAStatus vaPutImage ( ...@@ -942,6 +957,76 @@ VAStatus vaPutImage (
return ctx->vtable.vaPutImage ( ctx, surface, image, src_x, src_y, width, height, dest_x, dest_y ); return ctx->vtable.vaPutImage ( ctx, surface, image, src_x, src_y, width, height, dest_x, dest_y );
} }
/*
* Similar to vaPutImage but with additional destination width
* and height arguments to enable scaling
*/
VAStatus vaPutImage2 (
VADisplay dpy,
VASurfaceID surface,
VAImageID image,
int src_x,
int src_y,
unsigned int src_width,
unsigned int src_height,
int dest_x,
int dest_y,
unsigned int dest_width,
unsigned int dest_height
)
{
VADriverContextP ctx = CTX(dpy);
CHECK_CONTEXT(ctx);
TRACE(vaPutImage2);
return ctx->vtable.vaPutImage2 ( ctx, surface, image, src_x, src_y, src_width, src_height, dest_x, dest_y, dest_width, dest_height );
}
/*
* Derive an VAImage from an existing surface.
* This interface will derive a VAImage and corresponding image buffer from
* an existing VA Surface. The image buffer can then be mapped/unmapped for
* direct CPU access. This operation is only possible on implementations with
* direct rendering capabilities and internal surface formats that can be
* represented with a VAImage. When the operation is not possible this interface
* will return VA_STATUS_ERROR_OPERATION_FAILED. Clients should then fall back
* to using vaCreateImage + vaPutImage to accomplish the same task in an
* indirect manner.
*
* Implementations should only return success when the resulting image buffer
* would be useable with vaMap/Unmap.
*
* When directly accessing a surface special care must be taken to insure
* proper synchronization with the graphics hardware. Clients should call
* vaQuerySurfaceStatus to insure that a surface is not the target of concurrent
* rendering or currently being displayed by an overlay.
*
* Additionally nothing about the contents of a surface should be assumed
* following a vaPutSurface. Implementations are free to modify the surface for
* scaling or subpicture blending within a call to vaPutImage.
*
* Calls to vaPutImage or vaGetImage using the same surface from which the image
* has been derived will return VA_STATUS_ERROR_SURFACE_BUSY. vaPutImage or
* vaGetImage with other surfaces is supported.
*
* An image created with vaDeriveImage should be freed with vaDestroyImage. The
* image and image buffer structures will be destroyed; however, the underlying
* surface will remain unchanged until freed with vaDestroySurfaces.
*/
VAStatus vaDeriveImage (
VADisplay dpy,
VASurfaceID surface,
VAImage *image /* out */
)
{
VADriverContextP ctx = CTX(dpy);
CHECK_CONTEXT(ctx);
TRACE(vaDeriveImage);
return ctx->vtable.vaDeriveImage ( ctx, surface, image );
}
/* Get maximum number of subpicture formats supported by the implementation */ /* Get maximum number of subpicture formats supported by the implementation */
int vaMaxNumSubpictureFormats ( int vaMaxNumSubpictureFormats (
VADisplay dpy VADisplay dpy
...@@ -1021,7 +1106,7 @@ VAStatus vaSetSubpictureImage ( ...@@ -1021,7 +1106,7 @@ VAStatus vaSetSubpictureImage (
return ctx->vtable.vaSetSubpictureImage ( ctx, subpicture, image); return ctx->vtable.vaSetSubpictureImage ( ctx, subpicture, image);
} }
#warning TODO: Remove vaSetSubpicturePalette in rev 0.29
VAStatus vaSetSubpicturePalette ( VAStatus vaSetSubpicturePalette (
VADisplay dpy, VADisplay dpy,
VASubpictureID subpicture, VASubpictureID subpicture,
...@@ -1110,6 +1195,33 @@ VAStatus vaAssociateSubpicture ( ...@@ -1110,6 +1195,33 @@ VAStatus vaAssociateSubpicture (
return ctx->vtable.vaAssociateSubpicture ( ctx, subpicture, target_surfaces, num_surfaces, src_x, src_y, dest_x, dest_y, width, height, flags ); return ctx->vtable.vaAssociateSubpicture ( ctx, subpicture, target_surfaces, num_surfaces, src_x, src_y, dest_x, dest_y, width, height, flags );
} }
VAStatus vaAssociateSubpicture2 (
VADisplay dpy,
VASubpictureID subpicture,
VASurfaceID *target_surfaces,
int num_surfaces,
short src_x, /* upper left offset in subpicture */
short src_y,
unsigned short src_width,
unsigned short src_height,
short dest_x, /* upper left offset in surface */
short dest_y,
unsigned short dest_width,
unsigned short dest_height,
/*
* whether to enable chroma-keying or global-alpha
* see VA_SUBPICTURE_XXX values
*/
unsigned int flags
)
{
VADriverContextP ctx = CTX(dpy);
CHECK_CONTEXT(ctx);
TRACE(vaAssociateSubpicture2);
return ctx->vtable.vaAssociateSubpicture2 ( ctx, subpicture, target_surfaces, num_surfaces, src_x, src_y, src_width, src_height, dest_x, dest_y, dest_width, dest_height, flags );
}
/* /*
* vaDeassociateSubpicture removes the association of the subpicture with target_surfaces. * vaDeassociateSubpicture removes the association of the subpicture with target_surfaces.
*/ */
...@@ -1200,7 +1312,7 @@ VAStatus vaSetDisplayAttributes ( ...@@ -1200,7 +1312,7 @@ VAStatus vaSetDisplayAttributes (
} }
#warning TODO: Remove vaDbgCopySurfaceToBuffer in rev 0.29
VAStatus vaDbgCopySurfaceToBuffer(VADisplay dpy, VAStatus vaDbgCopySurfaceToBuffer(VADisplay dpy,
VASurfaceID surface, VASurfaceID surface,
void **buffer, /* out */ void **buffer, /* out */
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
/* /*
* Video Decode Acceleration API Specification * Video Decode Acceleration API Specification
* *
* Rev. 0.25 * Rev. 0.28
* <jonathan.bian@intel.com> * <jonathan.bian@intel.com>
* *
* Revision History: * Revision History:
...@@ -46,6 +46,9 @@ ...@@ -46,6 +46,9 @@
* rev 0.24 (09/18/2007 Jonathan Bian) - Added display attributes. * rev 0.24 (09/18/2007 Jonathan Bian) - Added display attributes.
* rev 0.25 (10/18/2007 Jonathan Bian) - Changed to use IDs only for some types. * rev 0.25 (10/18/2007 Jonathan Bian) - Changed to use IDs only for some types.
* rev 0.26 (11/07/2007 Waldo Bastian) - Change vaCreateBuffer semantics * rev 0.26 (11/07/2007 Waldo Bastian) - Change vaCreateBuffer semantics
* rev 0.27 (11/19/2007 Matt Sottek) - Added DeriveImage
* rev 0.28 (12/06/2007 Jonathan Bian) - Added new versions of PutImage and AssociateSubpicture
* to enable scaling
* *
* Acknowledgements: * Acknowledgements:
* Some concepts borrowed from XvMC and XvImage. * Some concepts borrowed from XvMC and XvImage.
...@@ -147,15 +150,26 @@ VAStatus vaTerminate ( ...@@ -147,15 +150,26 @@ VAStatus vaTerminate (
/* /*
* vaQueryVendorString returns a pointer to a zero-terminated string * vaQueryVendorString returns a pointer to a zero-terminated string
* describing some aspects of the VA implemenation on a specific * describing some aspects of the VA implemenation on a specific
* hardware accelerator. The format of the returned string is: * hardware accelerator. The format of the returned string is vendor
* <vendorname>-<major_version>-<minor_version>-<addtional_info> * specific and at the discretion of the implementer.
* e.g. for the Intel GMA500 implementation, an example would be: * e.g. for the Intel GMA500 implementation, an example would be:
* "IntelGMA500-1.0-0.2-patch3 * "Intel GMA500 - 2.0.0.32L.0005"
*/ */
const char *vaQueryVendorString ( const char *vaQueryVendorString (
VADisplay dpy VADisplay dpy
); );
typedef int (*VAPrivFunc)();
/*
* Return a function pointer given a function name in the library.
* This allows private interfaces into the library
*/
VAPrivFunc vaGetLibFunc (
VADisplay dpy,
const char *func
);
/* Currently defined profiles */ /* Currently defined profiles */
typedef enum typedef enum
{ {
...@@ -906,9 +920,9 @@ typedef struct _VAIQMatrixBufferH264 ...@@ -906,9 +920,9 @@ typedef struct _VAIQMatrixBufferH264
typedef struct _VASliceParameterBufferH264 typedef struct _VASliceParameterBufferH264
{ {
unsigned int slice_data_size;/* number of bytes in the slice data buffer for this slice */ unsigned int slice_data_size;/* number of bytes in the slice data buffer for this slice */
unsigned int slice_data_offset;/* the offset to first byte of slice data */ unsigned int slice_data_offset;/* the offset to the NAL start code for this slice */
unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */
unsigned short slice_data_bit_offset; /* bit offset in the first byte of valid data */ unsigned short slice_data_bit_offset; /* bit offset from NAL start code to the beginning of slice data */
unsigned short first_mb_in_slice; unsigned short first_mb_in_slice;
unsigned char slice_type; unsigned char slice_type;
unsigned char direct_spatial_mv_pred_flag; unsigned char direct_spatial_mv_pred_flag;
...@@ -1079,18 +1093,6 @@ VAStatus vaQuerySurfaceStatus ( ...@@ -1079,18 +1093,6 @@ VAStatus vaQuerySurfaceStatus (
VASurfaceStatus *status /* out */ VASurfaceStatus *status /* out */
); );
/*
* Copies the surface to a buffer
* The stride of the surface will be stored in *stride
* Caller should free the returned buffer with free() when done.
*/
VAStatus vaDbgCopySurfaceToBuffer(VADisplay dpy,
VASurfaceID surface,
void **buffer, /* out */
unsigned int *stride /* out */
);
/* /*
* 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
...@@ -1252,6 +1254,63 @@ VAStatus vaPutImage ( ...@@ -1252,6 +1254,63 @@ VAStatus vaPutImage (
int dest_y int dest_y
); );
/*
* Similar to vaPutImage but with additional destination width
* and height arguments to enable scaling
*/
VAStatus vaPutImage2 (
VADisplay dpy,
VASurfaceID surface,
VAImageID image,
int src_x,
int src_y,
unsigned int src_width,
unsigned int src_height,
int dest_x,
int dest_y,
unsigned int dest_width,
unsigned int dest_height
);
/*
* Derive an VAImage from an existing surface.
* This interface will derive a VAImage and corresponding image buffer from
* an existing VA Surface. The image buffer can then be mapped/unmapped for
* direct CPU access. This operation is only possible on implementations with
* direct rendering capabilities and internal surface formats that can be
* represented with a VAImage. When the operation is not possible this interface
* will return VA_STATUS_ERROR_OPERATION_FAILED. Clients should then fall back
* to using vaCreateImage + vaPutImage to accomplish the same task in an
* indirect manner.
*
* Implementations should only return success when the resulting image buffer
* would be useable with vaMap/Unmap.
*
* When directly accessing a surface special care must be taken to insure
* proper synchronization with the graphics hardware. Clients should call
* vaQuerySurfaceStatus to insure that a surface is not the target of concurrent
* rendering or currently being displayed by an overlay.
*
* Additionally nothing about the contents of a surface should be assumed
* following a vaPutSurface. Implementations are free to modify the surface for
* scaling or subpicture blending within a call to vaPutImage.
*
* Calls to vaPutImage or vaGetImage using the same surface from which the image
* has been derived will return VA_STATUS_ERROR_SURFACE_BUSY. vaPutImage or
* vaGetImage with other surfaces is supported.
*
* An image created with vaDeriveImage should be freed with vaDestroyImage. The
* image and image buffer structures will be destroyed; however, the underlying
* surface will remain unchanged until freed with vaDestroySurfaces.
*/
VAStatus vaDeriveImage (
VADisplay dpy,
VASurfaceID surface,
VAImage *image /* out */
);
/* /*
* Subpictures * Subpictures
* Subpicture is a special type of image that can be blended * Subpicture is a special type of image that can be blended
...@@ -1313,17 +1372,6 @@ VAStatus vaSetSubpictureImage ( ...@@ -1313,17 +1372,6 @@ VAStatus vaSetSubpictureImage (
VAImageID image VAImageID image
); );
VAStatus vaSetSubpicturePalette (
VADisplay dpy,
VASubpictureID subpicture,
/*
* pointer to an array holding the palette data. The size of the array is
* num_palette_entries * entry_bytes in size. The order of the components
* in the palette is described by the component_order in VAImage struct
*/
unsigned char *palette
);
/* /*
* If chromakey is enabled, then the area where the source value falls within * If chromakey is enabled, then the area where the source value falls within
* the chromakey [min, max] range is transparent * the chromakey [min, max] range is transparent
...@@ -1377,6 +1425,30 @@ VAStatus vaAssociateSubpicture ( ...@@ -1377,6 +1425,30 @@ VAStatus vaAssociateSubpicture (
unsigned int flags unsigned int flags
); );
/*
* Similar to vaAssociateSubpicture but with additional destination width
* and height to enable scaling
*/
VAStatus vaAssociateSubpicture2 (
VADisplay dpy,
VASubpictureID subpicture,
VASurfaceID *target_surfaces,
int num_surfaces,
short src_x, /* upper left offset in subpicture */
short src_y,
unsigned short src_width,
unsigned short src_height,
short dest_x, /* upper left offset in surface */
short dest_y,
unsigned short dest_width,
unsigned short dest_height,
/*
* whether to enable chroma-keying or global-alpha
* see VA_SUBPICTURE_XXX values
*/
unsigned int flags
);
/* /*
* vaDeassociateSubpicture removes the association of the subpicture with target_surfaces. * vaDeassociateSubpicture removes the association of the subpicture with target_surfaces.
*/ */
...@@ -1501,8 +1573,8 @@ Mostly to demonstrate program flow with no error handling ... ...@@ -1501,8 +1573,8 @@ Mostly to demonstrate program flow with no error handling ...
int max_num_profiles, max_num_entrypoints, max_num_attribs; int max_num_profiles, max_num_entrypoints, max_num_attribs;
max_num_profiles = vaMaxNumProfiles(dpy); max_num_profiles = vaMaxNumProfiles(dpy);
max_num_entrypoints = vaMaxNumProfiles(dpy); max_num_entrypoints = vaMaxNumEntrypoints(dpy);
max_num_attribs = vaMaxNumProfiles(dpy); max_num_attribs = vaMaxNumAttributes(dpy);
/* find out whether MPEG2 MP is supported */ /* find out whether MPEG2 MP is supported */
VAProfile *profiles = malloc(sizeof(VAProfile)*max_num_profiles); VAProfile *profiles = malloc(sizeof(VAProfile)*max_num_profiles);
......
...@@ -209,6 +209,12 @@ struct VADriverVTable ...@@ -209,6 +209,12 @@ struct VADriverVTable
VAImage *image /* out */ VAImage *image /* out */
); );
VAStatus (*vaDeriveImage) (
VADriverContextP ctx,
VASurfaceID surface,
VAImage *image /* out */
);
VAStatus (*vaDestroyImage) ( VAStatus (*vaDestroyImage) (
VADriverContextP ctx, VADriverContextP ctx,
VAImageID image VAImageID image
...@@ -247,6 +253,20 @@ struct VADriverVTable ...@@ -247,6 +253,20 @@ struct VADriverVTable
int dest_y int dest_y
); );
VAStatus (*vaPutImage2) (
VADriverContextP ctx,
VASurfaceID surface,
VAImageID image,
int src_x,
int src_y,
unsigned int src_width,
unsigned int src_height,
int dest_x,
int dest_y,
unsigned int dest_width,
unsigned int dest_height
);
VAStatus (*vaQuerySubpictureFormats) ( VAStatus (*vaQuerySubpictureFormats) (
VADriverContextP ctx, VADriverContextP ctx,
VAImageFormat *format_list, /* out */ VAImageFormat *format_list, /* out */
...@@ -314,6 +334,26 @@ struct VADriverVTable ...@@ -314,6 +334,26 @@ struct VADriverVTable
unsigned int flags unsigned int flags
); );
VAStatus (*vaAssociateSubpicture2) (
VADriverContextP ctx,
VASubpictureID subpicture,
VASurfaceID *target_surfaces,
int num_surfaces,
short src_x, /* upper left offset in subpicture */
short src_y,
unsigned short src_width,
unsigned short src_height,
short dest_x, /* upper left offset in surface */
short dest_y,
unsigned short dest_width,
unsigned short dest_height,
/*
* whether to enable chroma-keying or global-alpha
* see VA_SUBPICTURE_XXX values
*/
unsigned int flags
);
VAStatus (*vaDeassociateSubpicture) ( VAStatus (*vaDeassociateSubpicture) (
VADriverContextP ctx, VADriverContextP ctx,
VASubpictureID subpicture, VASubpictureID subpicture,
......
...@@ -33,9 +33,9 @@ extern "C" { ...@@ -33,9 +33,9 @@ extern "C" {
*/ */
/* de-interlace flags for vaPutSurface */ /* de-interlace flags for vaPutSurface */
#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
#define VA_FRAME_PICTURE 0x00000004 /* weave */
/* /*
* clears the drawable with background color. * clears the drawable with background color.
* for hardware overlay based implementation this flag * for hardware overlay based implementation this flag
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <stdlib.h>
int main(int argc, const char* argv[]) int main(int argc, const char* argv[])
{ {
...@@ -64,8 +64,9 @@ int main(int argc, const char* argv[]) ...@@ -64,8 +64,9 @@ int main(int argc, const char* argv[])
{ {
fprintf(stderr, "%s: vaInitialize failed with error code %d (%s)\n", fprintf(stderr, "%s: vaInitialize failed with error code %d (%s)\n",
name, va_status, vaErrorStr(va_status)); name, va_status, vaErrorStr(va_status));
return 3;
} }
printf("%s: VA API version: %d.%d\n", name, major_version, minor_version);
driver = vaQueryVendorString(va_dpy); driver = vaQueryVendorString(va_dpy);
printf("%s: Driver version: %s\n", name, driver ? driver : "<unknown>"); printf("%s: Driver version: %s\n", name, driver ? driver : "<unknown>");
vaTerminate(va_dpy); vaTerminate(va_dpy);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment