3274 lines
116 KiB
Diff
3274 lines
116 KiB
Diff
commit 2e7aa803a8547dfcde6e97ae2bb4a8bbdbb2634e
|
|
Author: Gwenole Beauchesne <gbeauchesne@splitted-desktop.com>
|
|
Date: Mon Nov 23 12:22:09 2009 +0000
|
|
|
|
Update compat code for VDPAU/MPEG-4 additions.
|
|
|
|
commit 30808b39d82cbf0c185052a2d2d5ed8a5fc065d1
|
|
Author: Gwenole Beauchesne <gbeauchesne@splitted-desktop.com>
|
|
Date: Thu Sep 10 14:01:57 2009 +0000
|
|
|
|
Update compatibility glue for VASliceParameterBufferMPEG2.slice_horizontal_position addition.
|
|
|
|
commit 27faf49366602637da223f3dc5f30ce4d6d72070
|
|
Author: Gwenole Beauchesne <gbeauchesne@splitted-desktop.com>
|
|
Date: Wed Sep 2 15:06:20 2009 +0000
|
|
|
|
Fix vaSyncSurface() compat code for VA API < 0.31 drivers.
|
|
|
|
commit dc33a3e28b38b7d579ab768899963cf9b0d38677
|
|
Author: Gwenole Beauchesne <gbeauchesne@splitted-desktop.com>
|
|
Date: Wed Sep 2 12:28:43 2009 +0000
|
|
|
|
Fix check for 0.30 modules.
|
|
|
|
commit bd913971bd9e7460b454513b006e16c18136625e
|
|
Author: Gwenole Beauchesne <gbeauchesne@splitted-desktop.com>
|
|
Date: Wed Sep 2 11:58:08 2009 +0000
|
|
|
|
Update for VA API 0.31.
|
|
|
|
commit 9cc7f89d3cc0238ab5b3a47c316e261e06a16634
|
|
Author: Gwenole Beauchesne <gbeauchesne@splitted-desktop.com>
|
|
Date: Thu Jul 2 15:55:48 2009 +0000
|
|
|
|
Fix VAEncSliceParameterBuffer thunk.
|
|
|
|
commit 483bc9e67afa9bcd8f99f08a74a78e7dfad4651f
|
|
Author: Gwenole Beauchesne <gbeauchesne@splitted-desktop.com>
|
|
Date: Thu Jul 2 09:24:04 2009 +0000
|
|
|
|
Fix make dist (va_compat_template.h).
|
|
|
|
commit 7f41b22366142c4e476fbae929ad343dc33af3a4
|
|
Author: Gwenole Beauchesne <gbeauchesne@splitted-desktop.com>
|
|
Date: Thu Jun 25 14:05:57 2009 +0000
|
|
|
|
Drop superfluous semi-colon.
|
|
|
|
commit dcc75aae23fc8f653179b6a331f4021acd6775fd
|
|
Author: Gwenole Beauchesne <gbeauchesne@splitted-desktop.com>
|
|
Date: Thu Jun 25 13:53:26 2009 +0000
|
|
|
|
Fix check for 0.30 modules.
|
|
|
|
commit b34512e74ac4150a3f8ee4abe4fa5b17907f8869
|
|
Author: Gwenole Beauchesne <gbeauchesne@splitted-desktop.com>
|
|
Date: Thu Jun 25 13:17:48 2009 +0000
|
|
|
|
Fix vaTerminate() thunk.
|
|
|
|
commit 3b006d1ac66429f6b8ffff00ce60e1e47a32c02c
|
|
Author: Gwenole Beauchesne <gbeauchesne@splitted-desktop.com>
|
|
Date: Thu Jun 25 12:48:22 2009 +0000
|
|
|
|
Cosmetics.
|
|
|
|
commit 452295d5ac34643f8a316491888c3900f12c5bff
|
|
Author: Gwenole Beauchesne <gbeauchesne@splitted-desktop.com>
|
|
Date: Thu Jun 25 12:18:48 2009 +0000
|
|
|
|
Fix compatibility with 0.29 modules.
|
|
|
|
commit 0e0da9ea861f14e8129767dbf6f11be5c051d85f
|
|
Author: Gwenole Beauchesne <gbeauchesne@splitted-desktop.com>
|
|
Date: Wed Jun 24 11:40:56 2009 +0000
|
|
|
|
Add compatibility layer with original libva 0.29.
|
|
|
|
diff --git a/src/va_compat.c b/src/va_compat.c
|
|
new file mode 100644
|
|
index 0000000..0bd7385
|
|
--- /dev/null
|
|
+++ b/src/va_compat.c
|
|
@@ -0,0 +1,1171 @@
|
|
+/*
|
|
+ * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved.
|
|
+ *
|
|
+ * Permission is hereby granted, free of charge, to any person obtaining a
|
|
+ * copy of this software and associated documentation files (the
|
|
+ * "Software"), to deal in the Software without restriction, including
|
|
+ * without limitation the rights to use, copy, modify, merge, publish,
|
|
+ * distribute, sub license, and/or sell copies of the Software, and to
|
|
+ * permit persons to whom the Software is furnished to do so, subject to
|
|
+ * the following conditions:
|
|
+ *
|
|
+ * The above copyright notice and this permission notice (including the
|
|
+ * next paragraph) shall be included in all copies or substantial portions
|
|
+ * of the Software.
|
|
+ *
|
|
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
|
|
+ * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
|
|
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
+ */
|
|
+
|
|
+#include "config.h"
|
|
+#include "va.h"
|
|
+#include "va_compat.h"
|
|
+#include "va_backend.h"
|
|
+#include <string.h>
|
|
+#include <alloca.h>
|
|
+#include <assert.h>
|
|
+
|
|
+#define CTX(dpy) (((VADisplayContextP)dpy)->pDriverContext)
|
|
+#define COMPAT_CTX(ctx) ((VACompatContextP)(ctx)->compat)
|
|
+#define ASSERT assert
|
|
+
|
|
+/* Invoke the normal VA API entry-point. This one can be replaced with
|
|
+ one of the va_compat_*() functions */
|
|
+#define VA_INVOKE(FUNC, CTX, ...) \
|
|
+ (CTX)->vtable.FUNC(CTX, __VA_ARGS__)
|
|
+
|
|
+/* Invoke the real VA API entry-point. That is, the driver's function */
|
|
+#define VA_INVOKE_COMPAT_ARGS(CTX, ...) \
|
|
+ (COMPAT_CTX(CTX)->compat_ctx, __VA_ARGS__)
|
|
+#define VA_INVOKE_COMPAT(FUNC, CTX, ...) \
|
|
+ COMPAT_CTX(CTX)->vtable.FUNC VA_INVOKE_COMPAT_ARGS(CTX, __VA_ARGS__)
|
|
+
|
|
+typedef struct VACompatContext *VACompatContextP;
|
|
+
|
|
+typedef VAStatus (*VABufferTranslateFunc)(VACompatContextP ctx, void *dest, const void *src);
|
|
+
|
|
+typedef enum {
|
|
+ VA_DRIVER_ID_UNKNOWN,
|
|
+ VA_DRIVER_ID_POULSBO,
|
|
+ VA_DRIVER_ID_IEGD
|
|
+} VADriverID;
|
|
+
|
|
+typedef struct {
|
|
+ VABufferID id;
|
|
+ VABufferType type;
|
|
+ unsigned int size;
|
|
+ unsigned int num_elements;
|
|
+ unsigned char *data;
|
|
+ VABufferTranslateFunc translate;
|
|
+ VABufferID compat_id;
|
|
+ unsigned int compat_size;
|
|
+ unsigned char *compat_data;
|
|
+ unsigned int map_count;
|
|
+} VABufferCompat;
|
|
+
|
|
+typedef struct VAContextMap *VAContextMapP;
|
|
+typedef struct VAContextMap {
|
|
+ VASurfaceID surface;
|
|
+ VAContextID context;
|
|
+ VAContextMapP next;
|
|
+} VAContextMap;
|
|
+
|
|
+typedef struct {
|
|
+ VAStatus (*vaTerminate)(void *);
|
|
+ VAStatus (*vaQueryConfigProfiles)(void *, VAProfile *, int *);
|
|
+ VAStatus (*vaQueryConfigEntrypoints)(void *, VAProfile, VAEntrypoint *, int *);
|
|
+ VAStatus (*vaGetConfigAttributes)(void *, VAProfile, VAEntrypoint, VAConfigAttrib *, int);
|
|
+ VAStatus (*vaCreateConfig)(void *, VAProfile, VAEntrypoint, VAConfigAttrib *, int, VAConfigID *);
|
|
+ VAStatus (*vaDestroyConfig)(void *, VAConfigID);
|
|
+ VAStatus (*vaQueryConfigAttributes)(void *, VAConfigID, VAProfile *, VAEntrypoint *, VAConfigAttrib *, int *);
|
|
+ VAStatus (*vaCreateSurfaces)(void *, int, int, int, int, VASurfaceID *);
|
|
+ VAStatus (*vaDestroySurfaces)(void *, VASurfaceID *, int);
|
|
+ VAStatus (*vaCreateContext)(void *, VAConfigID, int, int, int, VASurfaceID *, int, VAContextID *);
|
|
+ VAStatus (*vaDestroyContext)(void *, VAContextID);
|
|
+ VAStatus (*vaCreateBuffer)(void *, VAContextID, VABufferType, unsigned int, unsigned int, void *, VABufferID *);
|
|
+ VAStatus (*vaBufferSetNumElements)(void *, VABufferID, unsigned int);
|
|
+ VAStatus (*vaMapBuffer)(void *, VABufferID, void **);
|
|
+ VAStatus (*vaUnmapBuffer)(void *, VABufferID);
|
|
+ VAStatus (*vaDestroyBuffer)(void *, VABufferID);
|
|
+ VAStatus (*vaBeginPicture)(void *, VAContextID, VASurfaceID);
|
|
+ VAStatus (*vaRenderPicture)(void *, VAContextID, VABufferID *, int);
|
|
+ VAStatus (*vaEndPicture)(void *, VAContextID);
|
|
+ VAStatus (*vaSyncSurface_pre31)(void *, VAContextID, VASurfaceID);
|
|
+ VAStatus (*vaQuerySurfaceStatus)(void *, VASurfaceID, VASurfaceStatus *);
|
|
+ VAStatus (*vaPutSurface)(void *, VASurfaceID, unsigned long, short, short, unsigned short, unsigned short, short, short, unsigned short, unsigned short, VARectangle *, unsigned int, unsigned int);
|
|
+ VAStatus (*vaQueryImageFormats)(void *, VAImageFormat *, int *);
|
|
+ VAStatus (*vaCreateImage)(void *, VAImageFormat *, int, int, VAImage *);
|
|
+ VAStatus (*vaDeriveImage)(void *, VASurfaceID, VAImage *);
|
|
+ VAStatus (*vaDestroyImage)(void *, VAImageID);
|
|
+ VAStatus (*vaSetImagePalette)(void *, VAImageID, unsigned char *);
|
|
+ VAStatus (*vaGetImage)(void *, VASurfaceID, int, int, unsigned int, unsigned int, VAImageID);
|
|
+ VAStatus (*vaPutImage_pre31)(void *, VASurfaceID, VAImageID, int, int, unsigned int, unsigned int, int, int);
|
|
+ VAStatus (*vaPutImage2_pre31)(void *, VASurfaceID, VAImageID, int, int, unsigned int, unsigned int, int, int, unsigned int, unsigned int);
|
|
+ VAStatus (*vaQuerySubpictureFormats)(void *, VAImageFormat *, unsigned int *, unsigned int *);
|
|
+ VAStatus (*vaCreateSubpicture)(void *, VAImageID, VASubpictureID *);
|
|
+ VAStatus (*vaDestroySubpicture)(void *, VASubpictureID);
|
|
+ VAStatus (*vaSetSubpictureImage)(void *, VASubpictureID, VAImageID);
|
|
+ VAStatus (*vaSetSubpictureChromakey)(void *, VASubpictureID, unsigned int, unsigned int, unsigned int);
|
|
+ VAStatus (*vaSetSubpictureGlobalAlpha)(void *, VASubpictureID, float);
|
|
+ VAStatus (*vaAssociateSubpicture_pre31)(void *, VASubpictureID, VASurfaceID *, int, short, short, short, short, unsigned short, unsigned short, unsigned int);
|
|
+ VAStatus (*vaAssociateSubpicture2_pre31)(void *, VASubpictureID, VASurfaceID *, int, short, short, unsigned short, unsigned short, short, short, unsigned short, unsigned short, unsigned int);
|
|
+ VAStatus (*vaDeassociateSubpicture)(void *, VASubpictureID, VASurfaceID *, int);
|
|
+ VAStatus (*vaQueryDisplayAttributes)(void *, VADisplayAttribute *, int *);
|
|
+ VAStatus (*vaGetDisplayAttributes)(void *, VADisplayAttribute *, int);
|
|
+ VAStatus (*vaSetDisplayAttributes)(void *, VADisplayAttribute *, int);
|
|
+
|
|
+ /* 0.29 hooks */
|
|
+ VAStatus (*vaSetSubpicturePalette)(void *, VASubpictureID, unsigned char *);
|
|
+ VAStatus (*vaDbgCopySurfaceToBuffer)(void *, VASurfaceID, void **, unsigned int *);
|
|
+
|
|
+ /* 0.30 hooks */
|
|
+ VAStatus (*vaCreateSurfaceFromCIFrame)(void *, unsigned long, VASurfaceID *);
|
|
+ VAStatus (*vaCreateSurfaceFromV4L2Buf)(void *, int, struct v4l2_format *, struct v4l2_buffer *, VASurfaceID *);
|
|
+ VAStatus (*vaCopySurfaceToBuffer)(void *, VASurfaceID, unsigned int *, unsigned int *, unsigned int *, unsigned int *, unsigned int *, unsigned int *, unsigned int *, void **);
|
|
+
|
|
+ /* 0.31 hooks */
|
|
+ VAStatus (*vaPutImage)(void *, VASurfaceID, VAImageID, int, int, unsigned int, unsigned int, int, int, unsigned int, unsigned int);
|
|
+ VAStatus (*vaAssociateSubpicture)(void *, VASubpictureID, VASurfaceID *, int, short, short, unsigned short, unsigned short, short, short, unsigned short, unsigned short, unsigned int);
|
|
+ VAStatus (*vaSyncSurface)(void *, VASurfaceID);
|
|
+} VACompatDriverVTable;
|
|
+
|
|
+typedef struct VACompatContext {
|
|
+ VABufferCompat *buffers;
|
|
+ unsigned int buffers_count_max;
|
|
+ unsigned int compat_version;
|
|
+ void *compat_ctx;
|
|
+ VACompatDriverVTable vtable; /* original vtable */
|
|
+ VADriverID driver_id;
|
|
+ char *driver_name;
|
|
+ VAContextMapP context_map;
|
|
+ VAContextMapP last_context_map_match;
|
|
+ unsigned int skip_frame : 1;
|
|
+} VACompatContext;
|
|
+
|
|
+#define COMPAT_MAJOR 0
|
|
+#define COMPAT_MINOR 29
|
|
+#include "va_compat_template.h"
|
|
+
|
|
+#define COMPAT_MAJOR 0
|
|
+#define COMPAT_MINOR 30
|
|
+#include "va_compat_template.h"
|
|
+
|
|
+#define COMPAT_MAJOR 0
|
|
+#define COMPAT_MINOR 31
|
|
+#include "va_compat_template.h"
|
|
+
|
|
+static inline int va_IsIntelBuffer(VADriverContextP ctx, VABufferID id)
|
|
+{
|
|
+ VACompatContextP compat = ctx->compat;
|
|
+
|
|
+ if (compat->driver_id == VA_DRIVER_ID_POULSBO) {
|
|
+ /* There were only Intel implementations for VA API. Besides, the
|
|
+ returned buffer IDs had the following format [ 0 BASE ID ] where
|
|
+ BASE is the 7-bit value 0x04 and ID an index into the heap of
|
|
+ objects */
|
|
+ return (id & 0x7f000000) == 0x04000000;
|
|
+ }
|
|
+
|
|
+ if (compat->driver_id == VA_DRIVER_ID_IEGD) {
|
|
+ /* XXX: there is no means to differentiate the buffers, they
|
|
+ are linearly generated (IEGD 10.0 build 1335) */
|
|
+ return 1;
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static VAContextMapP va_context_map_lookup_p(
|
|
+ VACompatContextP ctx,
|
|
+ VASurfaceID surface
|
|
+)
|
|
+{
|
|
+ VAContextMapP m = ctx->context_map;
|
|
+
|
|
+ while (m) {
|
|
+ if (m->surface == surface)
|
|
+ return m;
|
|
+ m = m->next;
|
|
+ }
|
|
+ return NULL;
|
|
+}
|
|
+
|
|
+static VAContextID va_context_map_lookup(
|
|
+ VACompatContextP ctx,
|
|
+ VASurfaceID surface
|
|
+)
|
|
+{
|
|
+ VAContextMapP m;
|
|
+
|
|
+ /* Lookup in cached */
|
|
+ m = ctx->last_context_map_match;
|
|
+ if (m && m->surface == surface)
|
|
+ return m->context;
|
|
+
|
|
+ /* Full (slow) lookup */
|
|
+ m = va_context_map_lookup_p(ctx, surface);
|
|
+ if (m) {
|
|
+ ctx->last_context_map_match = m;
|
|
+ return m->context;
|
|
+ }
|
|
+ return VA_INVALID_ID;
|
|
+}
|
|
+
|
|
+static void va_context_map_add(
|
|
+ VACompatContextP ctx,
|
|
+ VAContextID context,
|
|
+ VASurfaceID surface
|
|
+)
|
|
+{
|
|
+ VAContextMapP m;
|
|
+
|
|
+ /* Update existing entry */
|
|
+ m = va_context_map_lookup_p(ctx, surface);
|
|
+ if (m) {
|
|
+ m->context = context;
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ /* Create new mapping */
|
|
+ m = malloc(sizeof(*m));
|
|
+ ASSERT(m);
|
|
+ if (m) {
|
|
+ m->surface = surface;
|
|
+ m->context = context;
|
|
+ m->next = ctx->context_map;
|
|
+ ctx->context_map = m;
|
|
+ }
|
|
+}
|
|
+
|
|
+static void va_context_map_remove(
|
|
+ VACompatContextP ctx,
|
|
+ VAContextID context
|
|
+)
|
|
+{
|
|
+ VAContextMapP p = NULL;
|
|
+ VAContextMapP m = ctx->context_map;
|
|
+ VAContextMapP d;
|
|
+
|
|
+ while (m) {
|
|
+ if (m->context == context) {
|
|
+ d = m;
|
|
+
|
|
+ /* Unlink current node */
|
|
+ if (p)
|
|
+ p->next = m->next;
|
|
+ else
|
|
+ ctx->context_map = m->next;
|
|
+ m = m->next;
|
|
+
|
|
+ /* Reset cache */
|
|
+ if (ctx->last_context_map_match == d)
|
|
+ ctx->last_context_map_match = NULL;
|
|
+
|
|
+ free(d);
|
|
+ }
|
|
+ else {
|
|
+ p = m;
|
|
+ m = m->next;
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
+static VABufferCompat *va_GetBufferCompat (
|
|
+ VADriverContextP ctx,
|
|
+ VABufferID id
|
|
+)
|
|
+{
|
|
+ VACompatContextP compat = ctx->compat;
|
|
+ int index;
|
|
+
|
|
+ if (!va_IsIntelBuffer(ctx, id))
|
|
+ return NULL;
|
|
+
|
|
+ index = id & 0x00ffffff;
|
|
+ if (index >= compat->buffers_count_max)
|
|
+ return NULL;
|
|
+
|
|
+ if (compat->buffers[index].id != id)
|
|
+ return NULL;
|
|
+
|
|
+ return &compat->buffers[index];
|
|
+}
|
|
+
|
|
+static VAStatus va_TranslateBufferCompat (
|
|
+ VADriverContextP ctx,
|
|
+ VABufferCompat *compat_buffer
|
|
+)
|
|
+{
|
|
+ VAStatus status;
|
|
+ unsigned char *src, *dest;
|
|
+ int i;
|
|
+
|
|
+ status = VA_INVOKE(vaMapBuffer, ctx, compat_buffer->id, (void **)&src);
|
|
+ if (status != VA_STATUS_SUCCESS)
|
|
+ return status;
|
|
+
|
|
+ ASSERT(compat_buffer->data);
|
|
+ ASSERT(src == compat_buffer->data);
|
|
+ ASSERT(compat_buffer->compat_data);
|
|
+ dest = compat_buffer->compat_data;
|
|
+ for (i = 0; i < compat_buffer->num_elements; i++)
|
|
+ {
|
|
+ /* XXX: check errors */
|
|
+ status = compat_buffer->translate(ctx->compat, dest, src);
|
|
+
|
|
+ src += compat_buffer->size;
|
|
+ dest += compat_buffer->compat_size;
|
|
+ }
|
|
+
|
|
+ return VA_INVOKE(vaUnmapBuffer, ctx, compat_buffer->id);
|
|
+}
|
|
+
|
|
+static VAStatus va_CreateBufferCompat (
|
|
+ VADriverContextP ctx,
|
|
+ VAContextID context,
|
|
+ VABufferID id,
|
|
+ VABufferType type,
|
|
+ unsigned int size,
|
|
+ unsigned int num_elements,
|
|
+ unsigned int compat_size,
|
|
+ VABufferTranslateFunc translate_func
|
|
+)
|
|
+{
|
|
+ VACompatContextP compat = ctx->compat;
|
|
+ VABufferCompat *compat_buffer;
|
|
+ int index;
|
|
+
|
|
+ if (!va_IsIntelBuffer(ctx, id))
|
|
+ return VA_STATUS_ERROR_INVALID_BUFFER;
|
|
+ index = id & 0x00ffffff;
|
|
+
|
|
+ /* XXX: this allocation strategy is not really space efficient... */
|
|
+ if (index >= compat->buffers_count_max)
|
|
+ {
|
|
+ compat->buffers_count_max = index + 1;
|
|
+ compat->buffers = realloc(compat->buffers,
|
|
+ (compat->buffers_count_max *
|
|
+ sizeof(VABufferCompat)));
|
|
+ if (compat->buffers == NULL)
|
|
+ return VA_STATUS_ERROR_ALLOCATION_FAILED;
|
|
+ }
|
|
+
|
|
+ compat_buffer = &compat->buffers[index];
|
|
+ compat_buffer->id = id;
|
|
+ compat_buffer->type = type;
|
|
+ compat_buffer->size = size;
|
|
+ compat_buffer->num_elements = num_elements;
|
|
+ compat_buffer->data = NULL;
|
|
+ compat_buffer->translate = translate_func;
|
|
+ compat_buffer->compat_size = compat_size;
|
|
+ compat_buffer->compat_data = NULL;
|
|
+ compat_buffer->map_count = 0;
|
|
+
|
|
+ return VA_INVOKE_COMPAT(vaCreateBuffer,
|
|
+ ctx,
|
|
+ context,
|
|
+ type,
|
|
+ compat_size,
|
|
+ num_elements,
|
|
+ NULL,
|
|
+ &compat_buffer->compat_id);
|
|
+}
|
|
+
|
|
+static VAStatus va_DestroyBufferCompat (
|
|
+ VADriverContextP ctx,
|
|
+ VABufferID id
|
|
+)
|
|
+{
|
|
+ VABufferCompat *compat_buffer;
|
|
+ VAStatus status;
|
|
+
|
|
+ if ((compat_buffer = va_GetBufferCompat(ctx, id)) == NULL)
|
|
+ return VA_STATUS_SUCCESS;
|
|
+
|
|
+ /* Force unmap if there were more maps than unmaps */
|
|
+ if (compat_buffer->map_count > 1)
|
|
+ compat_buffer->map_count = 1;
|
|
+ if (compat_buffer->map_count > 1)
|
|
+ {
|
|
+ if ((status = VA_INVOKE(vaUnmapBuffer, ctx, id)) != VA_STATUS_SUCCESS)
|
|
+ return status;
|
|
+ }
|
|
+
|
|
+ compat_buffer->id = 0;
|
|
+ return VA_INVOKE_COMPAT(vaDestroyBuffer, ctx, compat_buffer->compat_id);
|
|
+}
|
|
+
|
|
+static VAStatus va_compat_CreateBuffer (
|
|
+ VADriverContextP ctx,
|
|
+ VAContextID context, /* in */
|
|
+ VABufferType type, /* in */
|
|
+ unsigned int size, /* in */
|
|
+ unsigned int num_elements, /* in */
|
|
+ void *data, /* in */
|
|
+ VABufferID *buf_id /* out */
|
|
+)
|
|
+{
|
|
+ VABufferTranslateFunc translate_func = NULL;
|
|
+ unsigned int compat_size = 0;
|
|
+ VAStatus status;
|
|
+
|
|
+ status = VA_INVOKE_COMPAT(vaCreateBuffer,
|
|
+ ctx,
|
|
+ context,
|
|
+ type,
|
|
+ size,
|
|
+ num_elements,
|
|
+ data,
|
|
+ buf_id);
|
|
+
|
|
+ if (status != VA_STATUS_SUCCESS)
|
|
+ return status;
|
|
+
|
|
+#define INIT_TRANSLATE_FUNC_(STRUCT, MAJOR, MINOR) do { \
|
|
+ translate_func = va_compat_translate_VA##STRUCT##_##MAJOR##_##MINOR; \
|
|
+ compat_size = sizeof(VA##STRUCT##_##MAJOR##_##MINOR); \
|
|
+} while (0)
|
|
+#define INIT_TRANSLATE_FUNC(BUFFER, CODEC, MAJOR, MINOR) \
|
|
+ INIT_TRANSLATE_FUNC_(BUFFER##Buffer##CODEC, MAJOR, MINOR)
|
|
+
|
|
+ /* XXX: this assumes all structures have different sizes from each other */
|
|
+ switch (size) {
|
|
+ case sizeof(VAPictureParameterBufferH264):
|
|
+ if (type == VAPictureParameterBufferType && ctx->version_major == 0)
|
|
+ {
|
|
+ switch (ctx->version_minor) {
|
|
+ case 29: INIT_TRANSLATE_FUNC(PictureParameter,H264, 0,29); break;
|
|
+ case 30: INIT_TRANSLATE_FUNC(PictureParameter,H264, 0,30); break;
|
|
+ }
|
|
+ }
|
|
+ break;
|
|
+ case sizeof(VASliceParameterBufferH264):
|
|
+ if (type == VASliceParameterBufferType && ctx->version_major == 0)
|
|
+ {
|
|
+ switch (ctx->version_minor) {
|
|
+ case 29: INIT_TRANSLATE_FUNC(SliceParameter,H264, 0,29); break;
|
|
+ case 30: INIT_TRANSLATE_FUNC(SliceParameter,H264, 0,30); break;
|
|
+ }
|
|
+ }
|
|
+ break;
|
|
+ case sizeof(VAPictureParameterBufferVC1):
|
|
+ if (type == VAPictureParameterBufferType && ctx->version_major == 0)
|
|
+ {
|
|
+ switch (ctx->version_minor) {
|
|
+ case 29: INIT_TRANSLATE_FUNC(PictureParameter,VC1, 0,29); break;
|
|
+ case 30: INIT_TRANSLATE_FUNC(PictureParameter,VC1, 0,30); break;
|
|
+ }
|
|
+ }
|
|
+ break;
|
|
+ case sizeof(VAPictureParameterBufferMPEG2):
|
|
+ if (type == VAPictureParameterBufferType && ctx->version_major == 0)
|
|
+ {
|
|
+ switch (ctx->version_minor) {
|
|
+ case 29: INIT_TRANSLATE_FUNC(PictureParameter,MPEG2, 0,29); break;
|
|
+ case 30: INIT_TRANSLATE_FUNC(PictureParameter,MPEG2, 0,30); break;
|
|
+ }
|
|
+ }
|
|
+ break;
|
|
+ case sizeof(VASliceParameterBufferMPEG2):
|
|
+ if (type == VASliceParameterBufferType && ctx->version_major == 0)
|
|
+ {
|
|
+ switch (ctx->version_minor) {
|
|
+ case 29: INIT_TRANSLATE_FUNC(SliceParameter,MPEG2, 0,29); break;
|
|
+ case 30: INIT_TRANSLATE_FUNC(SliceParameter,MPEG2, 0,30); break;
|
|
+ }
|
|
+ }
|
|
+ break;
|
|
+ case sizeof(VAPictureParameterBufferMPEG4):
|
|
+ if (type == VAPictureParameterBufferType && ctx->version_major == 0)
|
|
+ {
|
|
+ switch (ctx->version_minor) {
|
|
+ case 29: INIT_TRANSLATE_FUNC(PictureParameter,MPEG4, 0,29); break;
|
|
+ case 30: INIT_TRANSLATE_FUNC(PictureParameter,MPEG4, 0,30); break;
|
|
+ case 31: INIT_TRANSLATE_FUNC(PictureParameter,MPEG4, 0,31); break;
|
|
+ }
|
|
+ }
|
|
+ break;
|
|
+ case sizeof(VAEncSliceParameterBuffer):
|
|
+ if (type == VAEncSliceParameterBufferType && ctx->version_major == 0)
|
|
+ {
|
|
+ switch (ctx->version_minor) {
|
|
+ case 30: INIT_TRANSLATE_FUNC_(EncSliceParameterBuffer, 0,30); break;
|
|
+ }
|
|
+ }
|
|
+ break;
|
|
+ }
|
|
+
|
|
+#undef INIT_TRANSLATE_FUNC
|
|
+
|
|
+ /* Create thunk */
|
|
+ if (buf_id && translate_func)
|
|
+ {
|
|
+ ASSERT(compat_size > 0);
|
|
+
|
|
+ status = va_CreateBufferCompat(ctx,
|
|
+ context,
|
|
+ *buf_id,
|
|
+ type,
|
|
+ size,
|
|
+ num_elements,
|
|
+ compat_size,
|
|
+ translate_func);
|
|
+ }
|
|
+
|
|
+ return status;
|
|
+}
|
|
+
|
|
+static VAStatus va_compat_BufferSetNumElements (
|
|
+ VADriverContextP ctx,
|
|
+ VABufferID buf_id, /* in */
|
|
+ unsigned int num_elements /* in */
|
|
+)
|
|
+{
|
|
+ VABufferCompat *compat_buffer;
|
|
+ VAStatus status;
|
|
+
|
|
+ status = VA_INVOKE_COMPAT(vaBufferSetNumElements, ctx, buf_id, num_elements);
|
|
+ if (status != VA_STATUS_SUCCESS)
|
|
+ return status;
|
|
+
|
|
+ if ((compat_buffer = va_GetBufferCompat(ctx, buf_id)) != NULL)
|
|
+ {
|
|
+ compat_buffer->num_elements = num_elements;
|
|
+ status = VA_INVOKE_COMPAT(vaBufferSetNumElements,
|
|
+ ctx,
|
|
+ compat_buffer->compat_id,
|
|
+ num_elements);
|
|
+ }
|
|
+
|
|
+ return status;
|
|
+}
|
|
+
|
|
+static VAStatus va_compat_DestroyBuffer (
|
|
+ VADriverContextP ctx,
|
|
+ VABufferID buffer_id
|
|
+)
|
|
+{
|
|
+ VAStatus status;
|
|
+ if ((status = va_DestroyBufferCompat(ctx, buffer_id)) != VA_STATUS_SUCCESS)
|
|
+ return status;
|
|
+
|
|
+ return VA_INVOKE_COMPAT(vaDestroyBuffer, ctx, buffer_id);
|
|
+}
|
|
+
|
|
+static VAStatus va_compat_MapBuffer (
|
|
+ VADriverContextP ctx,
|
|
+ VABufferID buf_id, /* in */
|
|
+ void **pbuf /* out */
|
|
+)
|
|
+{
|
|
+ VABufferCompat *compat_buffer;
|
|
+ VAStatus status;
|
|
+
|
|
+ if ((compat_buffer = va_GetBufferCompat(ctx, buf_id)) == NULL)
|
|
+ return VA_INVOKE_COMPAT(vaMapBuffer, ctx, buf_id, pbuf);
|
|
+
|
|
+ if (compat_buffer->map_count++ == 0)
|
|
+ {
|
|
+ status = VA_INVOKE_COMPAT(vaMapBuffer, ctx, buf_id, (void **)&compat_buffer->data);
|
|
+ if (status != VA_STATUS_SUCCESS)
|
|
+ return status;
|
|
+
|
|
+ status = VA_INVOKE_COMPAT(vaMapBuffer, ctx, compat_buffer->compat_id, (void **)&compat_buffer->compat_data);
|
|
+ if (status != VA_STATUS_SUCCESS)
|
|
+ return status;
|
|
+ }
|
|
+
|
|
+ if (pbuf)
|
|
+ *pbuf = compat_buffer->data;
|
|
+
|
|
+ return VA_STATUS_SUCCESS;
|
|
+}
|
|
+
|
|
+static VAStatus va_compat_UnmapBuffer (
|
|
+ VADriverContextP ctx,
|
|
+ VABufferID buf_id /* in */
|
|
+)
|
|
+{
|
|
+ VABufferCompat *compat_buffer;
|
|
+ VAStatus status;
|
|
+
|
|
+ if ((compat_buffer = va_GetBufferCompat(ctx, buf_id)) == NULL)
|
|
+ return VA_INVOKE_COMPAT(vaUnmapBuffer, ctx, buf_id);
|
|
+
|
|
+ if (--compat_buffer->map_count == 0)
|
|
+ {
|
|
+ status = VA_INVOKE_COMPAT(vaUnmapBuffer, ctx, compat_buffer->compat_id);
|
|
+ if (status != VA_STATUS_SUCCESS)
|
|
+ return status;
|
|
+ compat_buffer->compat_data = NULL;
|
|
+
|
|
+ status = VA_INVOKE_COMPAT(vaUnmapBuffer, ctx, compat_buffer->id);
|
|
+ if (status != VA_STATUS_SUCCESS)
|
|
+ return status;
|
|
+ compat_buffer->data = NULL;
|
|
+ }
|
|
+
|
|
+ return VA_STATUS_SUCCESS;
|
|
+}
|
|
+
|
|
+static VAStatus va_compat_BeginPicture (
|
|
+ VADriverContextP ctx,
|
|
+ VAContextID context,
|
|
+ VASurfaceID render_target
|
|
+)
|
|
+{
|
|
+ VACompatContextP compat = ctx->compat;
|
|
+ compat->skip_frame = 0;
|
|
+ return VA_INVOKE_COMPAT(vaBeginPicture, ctx, context, render_target);
|
|
+}
|
|
+
|
|
+static VAStatus va_compat_EndPicture (
|
|
+ VADriverContextP ctx,
|
|
+ VAContextID context
|
|
+)
|
|
+{
|
|
+ VACompatContextP compat = ctx->compat;
|
|
+ VAStatus status = VA_INVOKE_COMPAT(vaEndPicture, ctx, context);
|
|
+
|
|
+ /* Ignore errors if the HW decoder did not handle VC-1 skipped P-frames */
|
|
+ if (compat->skip_frame && status == VA_STATUS_ERROR_UNKNOWN)
|
|
+ status = VA_STATUS_SUCCESS;
|
|
+
|
|
+ return status;
|
|
+}
|
|
+
|
|
+static VAStatus va_compat_RenderPicture (
|
|
+ VADriverContextP ctx,
|
|
+ VAContextID context,
|
|
+ VABufferID *buffers,
|
|
+ int num_buffers
|
|
+)
|
|
+{
|
|
+ VACompatContextP compat = ctx->compat;
|
|
+ VABufferCompat *compat_buffer;
|
|
+ VABufferID *compat_buffer_ids;
|
|
+ VAStatus status;
|
|
+ int i, n;
|
|
+
|
|
+ if ((n = num_buffers) < 1)
|
|
+ n = 1;
|
|
+ compat_buffer_ids = alloca(n * sizeof(compat_buffer_ids[0]));
|
|
+
|
|
+ for (i = 0; i < num_buffers; i++)
|
|
+ {
|
|
+ if ((compat_buffer = va_GetBufferCompat(ctx, buffers[i])) == NULL)
|
|
+ compat_buffer_ids[i] = buffers[i];
|
|
+ else
|
|
+ {
|
|
+ status = va_TranslateBufferCompat(ctx, compat_buffer);
|
|
+ if (status != VA_STATUS_SUCCESS)
|
|
+ return status;
|
|
+ compat_buffer_ids[i] = compat_buffer->compat_id;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (!compat->skip_frame)
|
|
+ {
|
|
+ status = VA_INVOKE_COMPAT(vaRenderPicture, ctx, context, compat_buffer_ids, num_buffers);
|
|
+ if (status != VA_STATUS_SUCCESS)
|
|
+ return status;
|
|
+ }
|
|
+
|
|
+ /* Buffers are automatically destroyed afterwards */
|
|
+ for (i = 0; i < num_buffers; i++)
|
|
+ {
|
|
+ if ((compat_buffer = va_GetBufferCompat(ctx, buffers[i])) != NULL)
|
|
+ {
|
|
+ status = VA_INVOKE_COMPAT(vaDestroyBuffer, ctx, compat_buffer->id);
|
|
+ if (status != VA_STATUS_SUCCESS)
|
|
+ return status;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return VA_STATUS_SUCCESS;
|
|
+}
|
|
+
|
|
+#define DEFINE_VTABLE_ENTRY_(RETVAL, PROC, ARGS, COMPAT_PROC, COMPAT_ARGS, COMPAT_PRE, COMPAT_POST) \
|
|
+static RETVAL va_compat_##PROC ARGS \
|
|
+{ \
|
|
+ if (COMPAT_CTX(ctx)->vtable.va##COMPAT_PROC == NULL) \
|
|
+ return VA_STATUS_ERROR_OPERATION_FAILED; \
|
|
+ COMPAT_PRE; \
|
|
+ RETVAL ret = COMPAT_CTX(ctx)->vtable.va##COMPAT_PROC VA_INVOKE_COMPAT_ARGS COMPAT_ARGS; \
|
|
+ COMPAT_POST; \
|
|
+ return ret; \
|
|
+}
|
|
+
|
|
+#define DEFINE_VTABLE_ENTRY(RETVAL, PROC, DECL_ARGS, CALL_ARGS) \
|
|
+DEFINE_VTABLE_ENTRY_(RETVAL, PROC, DECL_ARGS, PROC, CALL_ARGS, {}, {})
|
|
+
|
|
+static VAStatus va_compat_Terminate(VADriverContextP ctx)
|
|
+{
|
|
+ if (COMPAT_CTX(ctx)->vtable.vaTerminate == NULL)
|
|
+ return VA_STATUS_ERROR_OPERATION_FAILED;
|
|
+ return COMPAT_CTX(ctx)->vtable.vaTerminate(COMPAT_CTX(ctx)->compat_ctx);
|
|
+}
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, QueryConfigProfiles,
|
|
+ (VADriverContextP ctx, VAProfile *profile_list, int *num_profiles),
|
|
+ (ctx, profile_list, num_profiles))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, QueryConfigEntrypoints,
|
|
+ (VADriverContextP ctx, VAProfile profile,
|
|
+ VAEntrypoint *entrypoint_list, int *num_entrypoints),
|
|
+ (ctx, profile, entrypoint_list, num_entrypoints))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, GetConfigAttributes,
|
|
+ (VADriverContextP ctx, VAProfile profile, VAEntrypoint entrypoint,
|
|
+ VAConfigAttrib *attrib_list, int num_attribs),
|
|
+ (ctx, profile, entrypoint, attrib_list, num_attribs))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, CreateConfig,
|
|
+ (VADriverContextP ctx, VAProfile profile, VAEntrypoint entrypoint,
|
|
+ VAConfigAttrib *attrib_list, int num_attribs, VAConfigID *config_id),
|
|
+ (ctx, profile, entrypoint, attrib_list, num_attribs, config_id))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, DestroyConfig,
|
|
+ (VADriverContextP ctx, VAConfigID config_id),
|
|
+ (ctx, config_id))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, QueryConfigAttributes,
|
|
+ (VADriverContextP ctx, VAConfigID config_id, VAProfile *profile,
|
|
+ VAEntrypoint *entrypoint, VAConfigAttrib *attrib_list, int *num_attribs),
|
|
+ (ctx, config_id, profile, entrypoint, attrib_list, num_attribs))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, CreateSurfaces,
|
|
+ (VADriverContextP ctx, int width, int height, int format,
|
|
+ int num_surfaces, VASurfaceID *surfaces),
|
|
+ (ctx, width, height, format, num_surfaces, surfaces))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, DestroySurfaces,
|
|
+ (VADriverContextP ctx, VASurfaceID *surface_list, int num_surfaces),
|
|
+ (ctx, surface_list, num_surfaces))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, CreateContext,
|
|
+ (VADriverContextP ctx, VAConfigID config_id,
|
|
+ int picture_width, int picture_height, int flag,
|
|
+ VASurfaceID *render_targets, int num_render_targets, VAContextID *context),
|
|
+ (ctx, config_id, picture_width, picture_height, flag,
|
|
+ render_targets, num_render_targets, context))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, DestroyContext,
|
|
+ (VADriverContextP ctx, VAContextID context),
|
|
+ (ctx, context))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, SyncSurface,
|
|
+ (VADriverContextP ctx, VASurfaceID render_target),
|
|
+ (ctx, render_target))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, QuerySurfaceStatus,
|
|
+ (VADriverContextP ctx, VASurfaceID render_target, VASurfaceStatus *status),
|
|
+ (ctx, render_target, status))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, PutSurface,
|
|
+ (VADriverContextP ctx, VASurfaceID surface, Drawable draw,
|
|
+ short srcx, short srcy, unsigned short srcw, unsigned short srch,
|
|
+ short destx, short desty, unsigned short destw, unsigned short desth,
|
|
+ VARectangle *cliprects, unsigned int number_cliprects, unsigned int flags),
|
|
+ (ctx, surface, draw, srcx, srcy, srcw, srch, destx, desty, destw, desth,
|
|
+ cliprects, number_cliprects, flags))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, QueryImageFormats,
|
|
+ (VADriverContextP ctx, VAImageFormat *format_list, int *num_formats),
|
|
+ (ctx, format_list, num_formats))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, CreateImage,
|
|
+ (VADriverContextP ctx, VAImageFormat *format,
|
|
+ int width, int height, VAImage *image),
|
|
+ (ctx, format, width, height, image))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, DeriveImage,
|
|
+ (VADriverContextP ctx, VASurfaceID surface, VAImage *image),
|
|
+ (ctx, surface, image))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, DestroyImage,
|
|
+ (VADriverContextP ctx, VAImageID image),
|
|
+ (ctx, image))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, SetImagePalette,
|
|
+ (VADriverContextP ctx, VAImageID image, unsigned char *palette),
|
|
+ (ctx, image, palette))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, GetImage,
|
|
+ (VADriverContextP ctx, VASurfaceID surface,
|
|
+ int x, int y, unsigned int width, unsigned int height, VAImageID image),
|
|
+ (ctx, surface, x, y, width, height, image))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, PutImage,
|
|
+ (VADriverContextP ctx, VASurfaceID surface, VAImageID image,
|
|
+ int srcx, int srcy, unsigned int srcw, unsigned int srch,
|
|
+ int destx, int desty, unsigned int destw, unsigned int desth),
|
|
+ (ctx, surface, image, srcx, srcy, srcw, srch, destx, desty, destw, desth))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, QuerySubpictureFormats,
|
|
+ (VADriverContextP ctx, VAImageFormat *format_list,
|
|
+ unsigned int *flags, unsigned int *num_formats),
|
|
+ (ctx, format_list, flags, num_formats))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, CreateSubpicture,
|
|
+ (VADriverContextP ctx, VAImageID image, VASubpictureID *subpicture),
|
|
+ (ctx, image, subpicture))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, DestroySubpicture,
|
|
+ (VADriverContextP ctx, VASubpictureID subpicture),
|
|
+ (ctx, subpicture))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, SetSubpictureImage,
|
|
+ (VADriverContextP ctx, VASubpictureID subpicture, VAImageID image),
|
|
+ (ctx, subpicture, image))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, SetSubpictureChromakey,
|
|
+ (VADriverContextP ctx, VASubpictureID subpicture,
|
|
+ unsigned int chromakey_min,
|
|
+ unsigned int chromakey_max,
|
|
+ unsigned int chromakey_mask),
|
|
+ (ctx, subpicture, chromakey_min, chromakey_max, chromakey_mask))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, SetSubpictureGlobalAlpha,
|
|
+ (VADriverContextP ctx, VASubpictureID subpicture, float global_alpha),
|
|
+ (ctx, subpicture, global_alpha))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, AssociateSubpicture,
|
|
+ (VADriverContextP ctx, VASubpictureID subpicture,
|
|
+ VASurfaceID *target_surfaces, int num_surfaces,
|
|
+ short srcx, short srcy, unsigned short srcw, unsigned short srch,
|
|
+ short destx, short desty, unsigned short destw, unsigned short desth,
|
|
+ unsigned int flags),
|
|
+ (ctx, subpicture, target_surfaces, num_surfaces,
|
|
+ srcx, srcy, srcw, srch, destx, desty, destw, desth, flags))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, DeassociateSubpicture,
|
|
+ (VADriverContextP ctx, VASubpictureID subpicture,
|
|
+ VASurfaceID *target_surfaces, int num_surfaces),
|
|
+ (ctx, subpicture, target_surfaces, num_surfaces))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, QueryDisplayAttributes,
|
|
+ (VADriverContextP ctx, VADisplayAttribute *attr_list, int *num_attributes),
|
|
+ (ctx, attr_list, num_attributes))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, GetDisplayAttributes,
|
|
+ (VADriverContextP ctx, VADisplayAttribute *attr_list, int num_attributes),
|
|
+ (ctx, attr_list, num_attributes))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, SetDisplayAttributes,
|
|
+ (VADriverContextP ctx, VADisplayAttribute *attr_list, int num_attributes),
|
|
+ (ctx, attr_list, num_attributes))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, CreateSurfaceFromCIFrame,
|
|
+ (VADriverContextP ctx, unsigned long frame_id, VASurfaceID *surface),
|
|
+ (ctx, frame_id, surface))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, CreateSurfaceFromV4L2Buf,
|
|
+ (VADriverContextP ctx, int v4l2_fd,
|
|
+ struct v4l2_format *v4l2_fmt, struct v4l2_buffer *v4l2_buf,
|
|
+ VASurfaceID *surface),
|
|
+ (ctx, v4l2_fd, v4l2_fmt, v4l2_buf, surface))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY(
|
|
+ VAStatus, CopySurfaceToBuffer,
|
|
+ (VADriverContextP ctx, VASurfaceID surface, unsigned int *fourcc,
|
|
+ unsigned int *luma_stride,
|
|
+ unsigned int *chroma_u_stride, unsigned int *chroma_v_stride,
|
|
+ unsigned int *luma_offset,
|
|
+ unsigned int *chroma_u_offset, unsigned int *chroma_v_offset,
|
|
+ void **buffer),
|
|
+ (ctx, surface, fourcc,
|
|
+ luma_stride, chroma_u_stride, chroma_v_stride,
|
|
+ luma_offset, chroma_u_offset, chroma_v_offset,
|
|
+ buffer))
|
|
+
|
|
+DEFINE_VTABLE_ENTRY_(
|
|
+ VAStatus, SyncSurface_pre31,
|
|
+ (VADriverContextP ctx, VASurfaceID render_target),
|
|
+ SyncSurface_pre31,
|
|
+ (ctx, va_context_map_lookup(COMPAT_CTX(ctx), render_target), render_target),
|
|
+ {}, {})
|
|
+
|
|
+DEFINE_VTABLE_ENTRY_(
|
|
+ VAStatus, PutImage_pre31,
|
|
+ (VADriverContextP ctx, VASurfaceID surface, VAImageID image,
|
|
+ int srcx, int srcy, unsigned int srcw, unsigned int srch,
|
|
+ int destx, int desty, unsigned int destw, unsigned int desth),
|
|
+ PutImage2_pre31,
|
|
+ (ctx, surface, image, srcx, srcy, srcw, srch, destx, desty, destw, desth),
|
|
+ {}, {})
|
|
+
|
|
+DEFINE_VTABLE_ENTRY_(
|
|
+ VAStatus, AssociateSubpicture_pre31,
|
|
+ (VADriverContextP ctx, VASubpictureID subpicture,
|
|
+ VASurfaceID *target_surfaces, int num_surfaces,
|
|
+ short srcx, short srcy, unsigned short srcw, unsigned short srch,
|
|
+ short destx, short desty, unsigned short destw, unsigned short desth,
|
|
+ unsigned int flags),
|
|
+ AssociateSubpicture2_pre31,
|
|
+ (ctx, subpicture, target_surfaces, num_surfaces,
|
|
+ srcx, srcy, srcw, srch, destx, desty, destw, desth, flags),
|
|
+ {}, {})
|
|
+
|
|
+DEFINE_VTABLE_ENTRY_(
|
|
+ VAStatus, CreateContext_pre31,
|
|
+ (VADriverContextP ctx, VAConfigID config_id,
|
|
+ int picture_width, int picture_height, int flag,
|
|
+ VASurfaceID *render_targets, int num_render_targets, VAContextID *context),
|
|
+ CreateContext,
|
|
+ (ctx, config_id, picture_width, picture_height, flag,
|
|
+ render_targets, num_render_targets, context),
|
|
+ {}, {
|
|
+ VACompatContextP const compat_ctx = COMPAT_CTX(ctx);
|
|
+ int i;
|
|
+ for (i = 0; i < num_render_targets; i++)
|
|
+ va_context_map_add(compat_ctx, *context, render_targets[i]);
|
|
+ })
|
|
+
|
|
+DEFINE_VTABLE_ENTRY_(
|
|
+ VAStatus, DestroyContext_pre31,
|
|
+ (VADriverContextP ctx, VAContextID context),
|
|
+ DestroyContext,
|
|
+ (ctx, context),
|
|
+ {}, { va_context_map_remove(COMPAT_CTX(ctx), context); })
|
|
+
|
|
+#undef DEFINE_VTABLE_ENTRY
|
|
+#undef DEFINE_VTABLE_ENTRY_
|
|
+
|
|
+static void va_compat_init_VADriverVTable(VADriverContextP ctx, int compat_version)
|
|
+{
|
|
+#define INIT_VTABLE_(CTX, DST_PROC, SRC_PROC) \
|
|
+ (CTX)->vtable.va##DST_PROC = va_compat_##SRC_PROC
|
|
+#define INIT_VTABLE(CTX, PROC) \
|
|
+ INIT_VTABLE_(CTX, PROC, PROC)
|
|
+
|
|
+ INIT_VTABLE(ctx, Terminate);
|
|
+ INIT_VTABLE(ctx, QueryConfigProfiles);
|
|
+ INIT_VTABLE(ctx, QueryConfigEntrypoints);
|
|
+ INIT_VTABLE(ctx, GetConfigAttributes);
|
|
+ INIT_VTABLE(ctx, CreateConfig);
|
|
+ INIT_VTABLE(ctx, DestroyConfig);
|
|
+ INIT_VTABLE(ctx, QueryConfigAttributes);
|
|
+ INIT_VTABLE(ctx, CreateSurfaces);
|
|
+ INIT_VTABLE(ctx, DestroySurfaces);
|
|
+ INIT_VTABLE(ctx, CreateContext);
|
|
+ INIT_VTABLE(ctx, DestroyContext);
|
|
+ INIT_VTABLE(ctx, CreateBuffer);
|
|
+ INIT_VTABLE(ctx, BufferSetNumElements);
|
|
+ INIT_VTABLE(ctx, MapBuffer);
|
|
+ INIT_VTABLE(ctx, UnmapBuffer);
|
|
+ INIT_VTABLE(ctx, DestroyBuffer);
|
|
+ INIT_VTABLE(ctx, BeginPicture);
|
|
+ INIT_VTABLE(ctx, RenderPicture);
|
|
+ INIT_VTABLE(ctx, EndPicture);
|
|
+ INIT_VTABLE(ctx, SyncSurface);
|
|
+ INIT_VTABLE(ctx, QuerySurfaceStatus);
|
|
+ INIT_VTABLE(ctx, PutSurface);
|
|
+ INIT_VTABLE(ctx, QueryImageFormats);
|
|
+ INIT_VTABLE(ctx, CreateImage);
|
|
+ INIT_VTABLE(ctx, DeriveImage);
|
|
+ INIT_VTABLE(ctx, DestroyImage);
|
|
+ INIT_VTABLE(ctx, SetImagePalette);
|
|
+ INIT_VTABLE(ctx, GetImage);
|
|
+ INIT_VTABLE(ctx, PutImage);
|
|
+ INIT_VTABLE(ctx, QuerySubpictureFormats);
|
|
+ INIT_VTABLE(ctx, CreateSubpicture);
|
|
+ INIT_VTABLE(ctx, DestroySubpicture);
|
|
+ INIT_VTABLE(ctx, SetSubpictureImage);
|
|
+ INIT_VTABLE(ctx, SetSubpictureChromakey);
|
|
+ INIT_VTABLE(ctx, SetSubpictureGlobalAlpha);
|
|
+ INIT_VTABLE(ctx, AssociateSubpicture);
|
|
+ INIT_VTABLE(ctx, DeassociateSubpicture);
|
|
+ INIT_VTABLE(ctx, QueryDisplayAttributes);
|
|
+ INIT_VTABLE(ctx, GetDisplayAttributes);
|
|
+ INIT_VTABLE(ctx, SetDisplayAttributes);
|
|
+ INIT_VTABLE(ctx, CreateSurfaceFromCIFrame);
|
|
+ INIT_VTABLE(ctx, CreateSurfaceFromV4L2Buf);
|
|
+ INIT_VTABLE(ctx, CopySurfaceToBuffer);
|
|
+
|
|
+ if (compat_version && compat_version < 31) {
|
|
+ INIT_VTABLE_(ctx, CreateContext, CreateContext_pre31);
|
|
+ INIT_VTABLE_(ctx, DestroyContext, DestroyContext_pre31);
|
|
+ INIT_VTABLE_(ctx, SyncSurface, SyncSurface_pre31);
|
|
+ INIT_VTABLE_(ctx, PutImage, PutImage_pre31);
|
|
+ INIT_VTABLE_(ctx, AssociateSubpicture, AssociateSubpicture_pre31);
|
|
+ }
|
|
+
|
|
+#undef INIT_VTABLE
|
|
+#undef INIT_VTABLE__
|
|
+}
|
|
+
|
|
+VAStatus va_compat_init(VADisplay dpy, int compat_version, void *compat_ctx)
|
|
+{
|
|
+ VADisplayContextP pDisplayContext = (VADisplayContextP)dpy;
|
|
+ VADriverContextP ctx = CTX(dpy);
|
|
+ VADriverContextP_0_29 ctx_0_29;
|
|
+ VADriverContextP_0_30 ctx_0_30;
|
|
+ VACompatContextP compat;
|
|
+ VAStatus status;
|
|
+ char *driver_name;
|
|
+
|
|
+ ctx->compat = NULL;
|
|
+
|
|
+ if (compat_version == 0)
|
|
+ return VA_STATUS_SUCCESS;
|
|
+
|
|
+ ASSERT(compat_ctx);
|
|
+ if (compat_ctx == NULL)
|
|
+ return VA_STATUS_ERROR_UNKNOWN;
|
|
+
|
|
+ driver_name = NULL;
|
|
+ status = pDisplayContext->vaGetDriverName(pDisplayContext, &driver_name);
|
|
+ ASSERT(status == VA_STATUS_SUCCESS);
|
|
+ if (status != VA_STATUS_SUCCESS)
|
|
+ return status;
|
|
+
|
|
+ if ((compat = malloc(sizeof(*compat))) == NULL)
|
|
+ return VA_STATUS_ERROR_ALLOCATION_FAILED;
|
|
+ compat->buffers = NULL;
|
|
+ compat->buffers_count_max = 0;
|
|
+ compat->compat_version = compat_version;
|
|
+ compat->compat_ctx = NULL;
|
|
+ compat->driver_name = driver_name;
|
|
+ compat->context_map = NULL;
|
|
+ compat->last_context_map_match = NULL;
|
|
+ ctx->compat = compat;
|
|
+
|
|
+ if (strcmp(driver_name, "psb") == 0)
|
|
+ compat->driver_id = VA_DRIVER_ID_POULSBO;
|
|
+ else if (strcmp(driver_name, "iegd") == 0)
|
|
+ compat->driver_id = VA_DRIVER_ID_IEGD;
|
|
+ else
|
|
+ compat->driver_id = VA_DRIVER_ID_UNKNOWN;
|
|
+
|
|
+ switch (compat_version) {
|
|
+ case 29:
|
|
+ if ((ctx_0_29 = malloc(sizeof(*ctx_0_29))) == NULL)
|
|
+ return VA_STATUS_ERROR_ALLOCATION_FAILED;
|
|
+ memcpy(ctx_0_29, compat_ctx, sizeof(*ctx_0_29));
|
|
+ va_compat_translate_VADriverContext_0_29(compat, ctx_0_29);
|
|
+ compat->compat_ctx = ctx_0_29;
|
|
+ COPY_FIELD(ctx, ctx_0_29, version_major);
|
|
+ COPY_FIELD(ctx, ctx_0_29, version_minor);
|
|
+ COPY_FIELD(ctx, ctx_0_29, max_profiles);
|
|
+ COPY_FIELD(ctx, ctx_0_29, max_entrypoints);
|
|
+ COPY_FIELD(ctx, ctx_0_29, max_attributes);
|
|
+ COPY_FIELD(ctx, ctx_0_29, max_image_formats);
|
|
+ COPY_FIELD(ctx, ctx_0_29, max_subpic_formats);
|
|
+ COPY_FIELD(ctx, ctx_0_29, max_display_attributes);
|
|
+ COPY_FIELD(ctx, ctx_0_29, str_vendor);
|
|
+ break;
|
|
+ case 30:
|
|
+ if ((ctx_0_30 = malloc(sizeof(*ctx_0_30))) == NULL)
|
|
+ return VA_STATUS_ERROR_ALLOCATION_FAILED;
|
|
+ memcpy(ctx_0_30, compat_ctx, sizeof(*ctx_0_30));
|
|
+ va_compat_translate_VADriverContext_0_30(compat, ctx_0_30);
|
|
+ compat->compat_ctx = ctx_0_30;
|
|
+ COPY_FIELD(ctx, ctx_0_30, version_major);
|
|
+ COPY_FIELD(ctx, ctx_0_30, version_minor);
|
|
+ COPY_FIELD(ctx, ctx_0_30, max_profiles);
|
|
+ COPY_FIELD(ctx, ctx_0_30, max_entrypoints);
|
|
+ COPY_FIELD(ctx, ctx_0_30, max_attributes);
|
|
+ COPY_FIELD(ctx, ctx_0_30, max_image_formats);
|
|
+ COPY_FIELD(ctx, ctx_0_30, max_subpic_formats);
|
|
+ COPY_FIELD(ctx, ctx_0_30, max_display_attributes);
|
|
+ COPY_FIELD(ctx, ctx_0_30, str_vendor);
|
|
+ break;
|
|
+ case VA_MINOR_VERSION:
|
|
+ va_compat_translate_VADriverContext(compat, compat_ctx);
|
|
+ compat->compat_ctx = compat_ctx;
|
|
+ break;
|
|
+ default:
|
|
+ ASSERT(compat_version == 0);
|
|
+ return VA_STATUS_ERROR_UNKNOWN;
|
|
+ }
|
|
+
|
|
+ va_compat_init_VADriverVTable(ctx, compat_version);
|
|
+ return VA_STATUS_SUCCESS;
|
|
+}
|
|
+
|
|
+VAStatus va_compat_fini(VADisplay dpy)
|
|
+{
|
|
+ VADriverContextP ctx = CTX(dpy);
|
|
+ VACompatContextP compat = ctx->compat;
|
|
+ int i;
|
|
+
|
|
+ if (compat == NULL)
|
|
+ return VA_STATUS_SUCCESS;
|
|
+
|
|
+ if (compat->driver_name)
|
|
+ {
|
|
+ free(compat->driver_name);
|
|
+ compat->driver_name = NULL;
|
|
+ }
|
|
+
|
|
+ if (compat->buffers)
|
|
+ {
|
|
+ for (i = 0; i < compat->buffers_count_max; i++)
|
|
+ {
|
|
+ if (compat->buffers[i].id)
|
|
+ va_DestroyBufferCompat(ctx, compat->buffers[i].id);
|
|
+ }
|
|
+ free(compat->buffers);
|
|
+ compat->buffers = NULL;
|
|
+ }
|
|
+
|
|
+ if (compat->compat_ctx && compat->compat_version != VA_MINOR_VERSION)
|
|
+ {
|
|
+ free(compat->compat_ctx);
|
|
+ compat->compat_ctx = NULL;
|
|
+ }
|
|
+
|
|
+ if (compat->context_map)
|
|
+ {
|
|
+ VAContextMapP d, m = compat->context_map;
|
|
+ while (m) {
|
|
+ d = m;
|
|
+ m = m->next;
|
|
+ free(d);
|
|
+ }
|
|
+ }
|
|
+ compat->last_context_map_match = NULL;
|
|
+
|
|
+ free(compat);
|
|
+ ctx->compat = NULL;
|
|
+ return VA_STATUS_SUCCESS;
|
|
+}
|
|
diff --git a/src/va_compat.h b/src/va_compat.h
|
|
new file mode 100644
|
|
index 0000000..2c9d801
|
|
--- /dev/null
|
|
+++ b/src/va_compat.h
|
|
@@ -0,0 +1,1467 @@
|
|
+/*
|
|
+ * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved.
|
|
+ *
|
|
+ * Permission is hereby granted, free of charge, to any person obtaining a
|
|
+ * copy of this software and associated documentation files (the
|
|
+ * "Software"), to deal in the Software without restriction, including
|
|
+ * without limitation the rights to use, copy, modify, merge, publish,
|
|
+ * distribute, sub license, and/or sell copies of the Software, and to
|
|
+ * permit persons to whom the Software is furnished to do so, subject to
|
|
+ * the following conditions:
|
|
+ *
|
|
+ * The above copyright notice and this permission notice (including the
|
|
+ * next paragraph) shall be included in all copies or substantial portions
|
|
+ * of the Software.
|
|
+ *
|
|
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
|
|
+ * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
|
|
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
+ */
|
|
+
|
|
+#ifndef VA_COMPAT_H
|
|
+#define VA_COMPAT_H
|
|
+
|
|
+VAStatus va_compat_init(VADisplay dpy, int compat_version, void *compat_ctx);
|
|
+VAStatus va_compat_fini(VADisplay dpy);
|
|
+
|
|
+/* H.264 Picture (0.29) */
|
|
+typedef struct _VAPictureH264_0_29
|
|
+{
|
|
+ VASurfaceID picture_id;
|
|
+ unsigned int flags;
|
|
+ unsigned int TopFieldOrderCnt;
|
|
+ unsigned int BottomFieldOrderCnt;
|
|
+} VAPictureH264_0_29;
|
|
+
|
|
+/* H.264 Picture Parameter Buffer (0.29) */
|
|
+typedef struct _VAPictureParameterBufferH264_0_29
|
|
+{
|
|
+ VAPictureH264_0_29 CurrPic;
|
|
+ VAPictureH264_0_29 ReferenceFrames[16]; /* in DPB */
|
|
+ unsigned short picture_width_in_mbs_minus1;
|
|
+ unsigned short picture_height_in_mbs_minus1;
|
|
+ unsigned char bit_depth_luma_minus8;
|
|
+ unsigned char bit_depth_chroma_minus8;
|
|
+ unsigned char num_ref_frames;
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char chroma_format_idc : 2;
|
|
+ unsigned char residual_colour_transform_flag : 1;
|
|
+ unsigned char frame_mbs_only_flag : 1;
|
|
+ unsigned char mb_adaptive_frame_field_flag : 1;
|
|
+ unsigned char direct_8x8_inference_flag : 1;
|
|
+ unsigned char MinLumaBiPredSize8x8 : 1; /* see A.3.3.2 */
|
|
+ };
|
|
+ unsigned char seq_fields;
|
|
+ };
|
|
+ unsigned char num_slice_groups_minus1;
|
|
+ unsigned char slice_group_map_type;
|
|
+ signed char pic_init_qp_minus26;
|
|
+ signed char chroma_qp_index_offset;
|
|
+ signed char second_chroma_qp_index_offset;
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char entropy_coding_mode_flag : 1;
|
|
+ unsigned char weighted_pred_flag : 1;
|
|
+ unsigned char weighted_bipred_idc : 2;
|
|
+ unsigned char transform_8x8_mode_flag : 1;
|
|
+ unsigned char field_pic_flag : 1;
|
|
+ unsigned char constrained_intra_pred_flag : 1;
|
|
+ };
|
|
+ unsigned char pic_fields;
|
|
+ };
|
|
+ unsigned short frame_num;
|
|
+} VAPictureParameterBufferH264_0_29;
|
|
+
|
|
+/* H.264 Slice Parameter Buffer (0.29) */
|
|
+typedef struct _VASliceParameterBufferH264_0_29
|
|
+{
|
|
+ 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 NAL start code for this slice */
|
|
+ unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */
|
|
+ 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 char slice_type;
|
|
+ unsigned char direct_spatial_mv_pred_flag;
|
|
+ unsigned char num_ref_idx_l0_active_minus1;
|
|
+ unsigned char num_ref_idx_l1_active_minus1;
|
|
+ unsigned char cabac_init_idc;
|
|
+ char slice_qp_delta;
|
|
+ unsigned char disable_deblocking_filter_idc;
|
|
+ char slice_alpha_c0_offset_div2;
|
|
+ char slice_beta_offset_div2;
|
|
+ VAPictureH264_0_29 RefPicList0[32]; /* See 8.2.4.2 */
|
|
+ VAPictureH264_0_29 RefPicList1[32]; /* See 8.2.4.2 */
|
|
+ unsigned char luma_log2_weight_denom;
|
|
+ unsigned char chroma_log2_weight_denom;
|
|
+ unsigned char luma_weight_l0_flag;
|
|
+ short luma_weight_l0[32];
|
|
+ short luma_offset_l0[32];
|
|
+ unsigned char chroma_weight_l0_flag;
|
|
+ short chroma_weight_l0[32][2];
|
|
+ short chroma_offset_l0[32][2];
|
|
+ unsigned char luma_weight_l1_flag;
|
|
+ short luma_weight_l1[32];
|
|
+ short luma_offset_l1[32];
|
|
+ unsigned char chroma_weight_l1_flag;
|
|
+ short chroma_weight_l1[32][2];
|
|
+ short chroma_offset_l1[32][2];
|
|
+} VASliceParameterBufferH264_0_29;
|
|
+
|
|
+/* VC-1 Picture Parameter Buffer (0.29) */
|
|
+typedef struct _VAPictureParameterBufferVC1_0_29
|
|
+{
|
|
+ VASurfaceID forward_reference_picture;
|
|
+ VASurfaceID backward_reference_picture;
|
|
+ /* if out-of-loop post-processing is done on the render
|
|
+ target, then we need to keep the in-loop decoded
|
|
+ picture as a reference picture */
|
|
+ VASurfaceID inloop_decoded_picture;
|
|
+
|
|
+ /* sequence layer for AP or meta data for SP and MP */
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char interlace : 1; /* SEQUENCE_LAYER::INTERLACE */
|
|
+ unsigned char syncmarker : 1;/* METADATA::SYNCMARKER */
|
|
+ unsigned char overlap : 1;/* METADATA::OVERLAP */
|
|
+ };
|
|
+ unsigned char sequence_fields;
|
|
+ };
|
|
+
|
|
+ unsigned short coded_width; /* ENTRY_POINT_LAYER::CODED_WIDTH */
|
|
+ unsigned short coded_height; /* ENTRY_POINT_LAYER::CODED_HEIGHT */
|
|
+ unsigned char closed_entry; /* ENTRY_POINT_LAYER::CLOSED_ENTRY */
|
|
+ unsigned char broken_link; /* ENTRY_POINT_LAYER::BROKEN_LINK */
|
|
+ unsigned char loopfilter; /* ENTRY_POINT_LAYER::LOOPFILTER */
|
|
+ unsigned char conditional_overlap_flag; /* ENTRY_POINT_LAYER::CONDOVER */
|
|
+ unsigned char fast_uvmc_flag; /* ENTRY_POINT_LAYER::FASTUVMC */
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char range_mapping_luma_flag: 1; /* ENTRY_POINT_LAYER::RANGE_MAPY_FLAG */
|
|
+ unsigned char range_mapping_luma: 3; /* ENTRY_POINT_LAYER::RANGE_MAPY */
|
|
+ unsigned char range_mapping_chroma_flag: 1; /* ENTRY_POINT_LAYER::RANGE_MAPUV_FLAG */
|
|
+ unsigned char range_mapping_chroma: 3; /* ENTRY_POINT_LAYER::RANGE_MAPUV */
|
|
+ };
|
|
+ unsigned char range_mapping_fields;
|
|
+ };
|
|
+
|
|
+ unsigned char b_picture_fraction; /* PICTURE_LAYER::BFRACTION */
|
|
+ unsigned char cbp_table; /* PICTURE_LAYER::CBPTAB/ICBPTAB */
|
|
+ unsigned char mb_mode_table; /* PICTURE_LAYER::MBMODETAB */
|
|
+ unsigned char range_reduction_frame;/* PICTURE_LAYER::RANGEREDFRM */
|
|
+ unsigned char rounding_control; /* PICTURE_LAYER::RNDCTRL */
|
|
+ unsigned char post_processing; /* PICTURE_LAYER::POSTPROC */
|
|
+ unsigned char picture_resolution_index; /* PICTURE_LAYER::RESPIC */
|
|
+ unsigned char luma_scale; /* PICTURE_LAYER::LUMSCALE */
|
|
+ unsigned char luma_shift; /* PICTURE_LAYER::LUMSHIFT */
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char picture_type : 2; /* PICTURE_LAYER::PTYPE */
|
|
+ unsigned char frame_coding_mode : 3;/* PICTURE_LAYER::FCM */
|
|
+ unsigned char top_field_first : 1;/* PICTURE_LAYER::TFF */
|
|
+ unsigned char is_first_field : 1; /* set to 1 if it is the first field */
|
|
+ unsigned char intensity_compensation: 1;/* PICTURE_LAYER::INTCOMP */
|
|
+ };
|
|
+ unsigned char picture_fields;
|
|
+ };
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char mv_type_mb : 1; /* PICTURE::MVTYPEMB */
|
|
+ unsigned char direct_mb : 1; /* PICTURE::DIRECTMB */
|
|
+ unsigned char skip_mb : 1; /* PICTURE::SKIPMB */
|
|
+ unsigned char field_tx : 1; /* PICTURE::FIELDTX */
|
|
+ unsigned char forward_mb : 1; /* PICTURE::FORWARDMB */
|
|
+ unsigned char ac_pred : 1; /* PICTURE::ACPRED */
|
|
+ unsigned char overflags : 1; /* PICTURE::OVERFLAGS */
|
|
+ };
|
|
+ unsigned char raw_coding_flag;
|
|
+ };
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char bp_mv_type_mb : 1; /* PICTURE::MVTYPEMB */
|
|
+ unsigned char bp_direct_mb : 1; /* PICTURE::DIRECTMB */
|
|
+ unsigned char bp_skip_mb : 1; /* PICTURE::SKIPMB */
|
|
+ unsigned char bp_field_tx : 1; /* PICTURE::FIELDTX */
|
|
+ unsigned char bp_forward_mb : 1; /* PICTURE::FORWARDMB */
|
|
+ unsigned char bp_ac_pred : 1; /* PICTURE::ACPRED */
|
|
+ unsigned char bp_overflags : 1; /* PICTURE::OVERFLAGS */
|
|
+ };
|
|
+ unsigned char bitplane_present_flag; /* signal what bitplane is being passed via the bitplane buffer */
|
|
+ };
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char reference_distance_flag : 1;/* PICTURE_LAYER::REFDIST_FLAG */
|
|
+ unsigned char reference_distance : 5;/* PICTURE_LAYER::REFDIST */
|
|
+ unsigned char num_reference_pictures: 1;/* PICTURE_LAYER::NUMREF */
|
|
+ unsigned char reference_field_pic_indicator : 1;/* PICTURE_LAYER::REFFIELD */
|
|
+ };
|
|
+ unsigned short reference_fields;
|
|
+ };
|
|
+ union {
|
|
+ struct {
|
|
+ VAMvModeVC1 mv_mode : 3; /* PICTURE_LAYER::MVMODE */
|
|
+ VAMvModeVC1 mv_mode2 : 3; /* PICTURE_LAYER::MVMODE2 */
|
|
+ unsigned char mv_table : 3; /* PICTURE_LAYER::MVTAB/IMVTAB */
|
|
+ unsigned char two_mv_block_pattern_table: 2; /* PICTURE_LAYER::2MVBPTAB */
|
|
+ unsigned char four_mv_switch : 1; /* PICTURE_LAYER::4MVSWITCH */
|
|
+ unsigned char four_mv_block_pattern_table : 2; /* PICTURE_LAYER::4MVBPTAB */
|
|
+ unsigned char extended_mv_flag : 1; /* ENTRY_POINT_LAYER::EXTENDED_MV */
|
|
+ unsigned char extended_mv_range : 2; /* PICTURE_LAYER::MVRANGE */
|
|
+ unsigned char extended_dmv_flag : 1; /* ENTRY_POINT_LAYER::EXTENDED_DMV */
|
|
+ unsigned char extended_dmv_range : 2; /* PICTURE_LAYER::DMVRANGE */
|
|
+ };
|
|
+ unsigned int mv_fields;
|
|
+ };
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char dquant : 2; /* ENTRY_POINT_LAYER::DQUANT */
|
|
+ unsigned char quantizer : 2; /* ENTRY_POINT_LAYER::QUANTIZER */
|
|
+ unsigned char half_qp : 1; /* PICTURE_LAYER::HALFQP */
|
|
+ unsigned char pic_quantizer_scale : 5;/* PICTURE_LAYER::PQUANT */
|
|
+ unsigned char pic_quantizer_type : 1;/* PICTURE_LAYER::PQUANTIZER */
|
|
+ unsigned char dq_frame : 1; /* VOPDQUANT::DQUANTFRM */
|
|
+ unsigned char dq_profile : 2; /* VOPDQUANT::DQPROFILE */
|
|
+ unsigned char dq_sb_edge : 2; /* VOPDQUANT::DQSBEDGE */
|
|
+ unsigned char dq_db_edge : 2; /* VOPDQUANT::DQDBEDGE */
|
|
+ unsigned char dq_binary_level : 1; /* VOPDQUANT::DQBILEVEL */
|
|
+ unsigned char alt_pic_quantizer : 5;/* VOPDQUANT::ALTPQUANT */
|
|
+ };
|
|
+ unsigned long pic_quantizer_fields;
|
|
+ };
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char variable_sized_transform_flag : 1;/* ENTRY_POINT_LAYER::VSTRANSFORM */
|
|
+ unsigned char mb_level_transform_type_flag : 1;/* PICTURE_LAYER::TTMBF */
|
|
+ unsigned char frame_level_transform_type : 2;/* PICTURE_LAYER::TTFRM */
|
|
+ unsigned char transform_ac_codingset_idx1 : 2;/* PICTURE_LAYER::TRANSACFRM */
|
|
+ unsigned char transform_ac_codingset_idx2 : 2;/* PICTURE_LAYER::TRANSACFRM2 */
|
|
+ unsigned char intra_transform_dc_table : 1;/* PICTURE_LAYER::TRANSDCTAB */
|
|
+ };
|
|
+ unsigned short transform_fields;
|
|
+ };
|
|
+} VAPictureParameterBufferVC1_0_29;
|
|
+
|
|
+/* MPEG-2 Picture Parameter Buffer (0.29) */
|
|
+typedef struct _VAPictureParameterBufferMPEG2_0_29
|
|
+{
|
|
+ unsigned short horizontal_size;
|
|
+ unsigned short vertical_size;
|
|
+ VASurfaceID forward_reference_picture;
|
|
+ VASurfaceID backward_reference_picture;
|
|
+ /* meanings of the following fields are the same as in the standard */
|
|
+ int picture_coding_type;
|
|
+ int f_code; /* pack all four fcode into this */
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char intra_dc_precision : 2;
|
|
+ unsigned char picture_structure : 2;
|
|
+ unsigned char top_field_first : 1;
|
|
+ unsigned char frame_pred_frame_dct : 1;
|
|
+ unsigned char concealment_motion_vectors : 1;
|
|
+ unsigned char q_scale_type : 1;
|
|
+ unsigned char intra_vlc_format : 1;
|
|
+ unsigned char alternate_scan : 1;
|
|
+ unsigned char repeat_first_field : 1;
|
|
+ unsigned char progressive_frame : 1;
|
|
+ unsigned char is_first_field : 1; /* indicate whether the current field
|
|
+ * is the first field for field picture
|
|
+ */
|
|
+ };
|
|
+ unsigned int picture_coding_extension;
|
|
+ };
|
|
+} VAPictureParameterBufferMPEG2_0_29;
|
|
+
|
|
+/* MPEG-2 Slice Parameter Buffer (0.29) */
|
|
+typedef struct _VASliceParameterBufferMPEG2_0_29
|
|
+{
|
|
+ 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 defintions */
|
|
+ unsigned int macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */
|
|
+ unsigned int slice_vertical_position;
|
|
+ int quantiser_scale_code;
|
|
+ int intra_slice_flag;
|
|
+} VASliceParameterBufferMPEG2_0_29;
|
|
+
|
|
+/* MPEG-4 Picture Parameter Buffer (0.29) */
|
|
+typedef struct _VAPictureParameterBufferMPEG4_0_29
|
|
+{
|
|
+ unsigned short vop_width;
|
|
+ unsigned short vop_height;
|
|
+ VASurfaceID forward_reference_picture;
|
|
+ VASurfaceID backward_reference_picture;
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char short_video_header : 1;
|
|
+ unsigned char chroma_format : 2;
|
|
+ unsigned char interlaced : 1;
|
|
+ unsigned char obmc_disable : 1;
|
|
+ unsigned char sprite_enable : 2;
|
|
+ unsigned char sprite_warping_accuracy : 2;
|
|
+ unsigned char quant_type : 1;
|
|
+ unsigned char quarter_sample : 1;
|
|
+ unsigned char data_partitioned : 1;
|
|
+ unsigned char reversible_vlc : 1;
|
|
+ };
|
|
+ unsigned short vol_fields;
|
|
+ };
|
|
+ unsigned char no_of_sprite_warping_points;
|
|
+ short sprite_trajectory_du[3];
|
|
+ short sprite_trajectory_dv[3];
|
|
+ unsigned char quant_precision;
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char vop_coding_type : 2;
|
|
+ unsigned char backward_reference_vop_coding_type : 2;
|
|
+ unsigned char vop_rounding_type : 1;
|
|
+ unsigned char intra_dc_vlc_thr : 3;
|
|
+ unsigned char top_field_first : 1;
|
|
+ unsigned char alternate_vertical_scan_flag : 1;
|
|
+ };
|
|
+ unsigned short vop_fields;
|
|
+ };
|
|
+ unsigned char vop_fcode_forward;
|
|
+ unsigned char vop_fcode_backward;
|
|
+ /* short header related */
|
|
+ unsigned char num_gobs_in_vop;
|
|
+ unsigned char num_macroblocks_in_gob;
|
|
+ /* for direct mode prediction */
|
|
+ short TRB;
|
|
+ short TRD;
|
|
+} VAPictureParameterBufferMPEG4_0_29;
|
|
+
|
|
+/* H.264 Picture (0.30) */
|
|
+typedef struct _VAPictureH264_0_30
|
|
+{
|
|
+ VASurfaceID picture_id;
|
|
+ unsigned int flags;
|
|
+ unsigned int TopFieldOrderCnt;
|
|
+ unsigned int BottomFieldOrderCnt;
|
|
+} VAPictureH264_0_30;
|
|
+
|
|
+/* H.264 Picture Parameter Buffer (0.30) */
|
|
+typedef struct _VAPictureParameterBufferH264_0_30
|
|
+{
|
|
+ VAPictureH264 CurrPic;
|
|
+ VAPictureH264 ReferenceFrames[16]; /* in DPB */
|
|
+ unsigned short picture_width_in_mbs_minus1;
|
|
+ unsigned short picture_height_in_mbs_minus1;
|
|
+ unsigned char bit_depth_luma_minus8;
|
|
+ unsigned char bit_depth_chroma_minus8;
|
|
+ unsigned char num_ref_frames;
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char chroma_format_idc : 2;
|
|
+ unsigned char residual_colour_transform_flag : 1;
|
|
+ unsigned char frame_mbs_only_flag : 1;
|
|
+ unsigned char mb_adaptive_frame_field_flag : 1;
|
|
+ unsigned char direct_8x8_inference_flag : 1;
|
|
+ unsigned char MinLumaBiPredSize8x8 : 1; /* see A.3.3.2 */
|
|
+ } bits;
|
|
+ unsigned char value;
|
|
+ } seq_fields;
|
|
+ unsigned char num_slice_groups_minus1;
|
|
+ unsigned char slice_group_map_type;
|
|
+ signed char pic_init_qp_minus26;
|
|
+ signed char chroma_qp_index_offset;
|
|
+ signed char second_chroma_qp_index_offset;
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char entropy_coding_mode_flag : 1;
|
|
+ unsigned char weighted_pred_flag : 1;
|
|
+ unsigned char weighted_bipred_idc : 2;
|
|
+ unsigned char transform_8x8_mode_flag : 1;
|
|
+ unsigned char field_pic_flag : 1;
|
|
+ unsigned char constrained_intra_pred_flag : 1;
|
|
+ } bits;
|
|
+ unsigned char value;
|
|
+ } pic_fields;
|
|
+ unsigned short frame_num;
|
|
+} VAPictureParameterBufferH264_0_30;
|
|
+
|
|
+/* H.264 Slice Parameter Buffer (0.30) */
|
|
+typedef struct _VASliceParameterBufferH264_0_30
|
|
+{
|
|
+ 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 NAL start code for this slice */
|
|
+ unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */
|
|
+ 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 char slice_type;
|
|
+ unsigned char direct_spatial_mv_pred_flag;
|
|
+ unsigned char num_ref_idx_l0_active_minus1;
|
|
+ unsigned char num_ref_idx_l1_active_minus1;
|
|
+ unsigned char cabac_init_idc;
|
|
+ char slice_qp_delta;
|
|
+ unsigned char disable_deblocking_filter_idc;
|
|
+ char slice_alpha_c0_offset_div2;
|
|
+ char slice_beta_offset_div2;
|
|
+ VAPictureH264 RefPicList0[32]; /* See 8.2.4.2 */
|
|
+ VAPictureH264 RefPicList1[32]; /* See 8.2.4.2 */
|
|
+ unsigned char luma_log2_weight_denom;
|
|
+ unsigned char chroma_log2_weight_denom;
|
|
+ unsigned char luma_weight_l0_flag;
|
|
+ short luma_weight_l0[32];
|
|
+ short luma_offset_l0[32];
|
|
+ unsigned char chroma_weight_l0_flag;
|
|
+ short chroma_weight_l0[32][2];
|
|
+ short chroma_offset_l0[32][2];
|
|
+ unsigned char luma_weight_l1_flag;
|
|
+ short luma_weight_l1[32];
|
|
+ short luma_offset_l1[32];
|
|
+ unsigned char chroma_weight_l1_flag;
|
|
+ short chroma_weight_l1[32][2];
|
|
+ short chroma_offset_l1[32][2];
|
|
+} VASliceParameterBufferH264_0_30;
|
|
+
|
|
+/* VC-1 Picture Parameter Buffer (0.30) */
|
|
+typedef struct _VAPictureParameterBufferVC1_0_30
|
|
+{
|
|
+ VASurfaceID forward_reference_picture;
|
|
+ VASurfaceID backward_reference_picture;
|
|
+ /* if out-of-loop post-processing is done on the render
|
|
+ target, then we need to keep the in-loop decoded
|
|
+ picture as a reference picture */
|
|
+ VASurfaceID inloop_decoded_picture;
|
|
+
|
|
+ /* sequence layer for AP or meta data for SP and MP */
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char interlace : 1; /* SEQUENCE_LAYER::INTERLACE */
|
|
+ unsigned char syncmarker : 1;/* METADATA::SYNCMARKER */
|
|
+ unsigned char overlap : 1;/* METADATA::OVERLAP */
|
|
+ } bits;
|
|
+ unsigned char value;
|
|
+ } sequence_fields;
|
|
+
|
|
+ unsigned short coded_width; /* ENTRY_POINT_LAYER::CODED_WIDTH */
|
|
+ unsigned short coded_height; /* ENTRY_POINT_LAYER::CODED_HEIGHT */
|
|
+ unsigned char closed_entry; /* ENTRY_POINT_LAYER::CLOSED_ENTRY */
|
|
+ unsigned char broken_link; /* ENTRY_POINT_LAYER::BROKEN_LINK */
|
|
+ unsigned char loopfilter; /* ENTRY_POINT_LAYER::LOOPFILTER */
|
|
+ unsigned char conditional_overlap_flag; /* ENTRY_POINT_LAYER::CONDOVER */
|
|
+ unsigned char fast_uvmc_flag; /* ENTRY_POINT_LAYER::FASTUVMC */
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char luma_flag : 1; /* ENTRY_POINT_LAYER::RANGE_MAPY_FLAG */
|
|
+ unsigned char luma : 3; /* ENTRY_POINT_LAYER::RANGE_MAPY */
|
|
+ unsigned char chroma_flag : 1; /* ENTRY_POINT_LAYER::RANGE_MAPUV_FLAG */
|
|
+ unsigned char chroma : 3; /* ENTRY_POINT_LAYER::RANGE_MAPUV */
|
|
+ } bits;
|
|
+ unsigned char value;
|
|
+ } range_mapping_fields;
|
|
+
|
|
+ unsigned char b_picture_fraction; /* PICTURE_LAYER::BFRACTION */
|
|
+ unsigned char cbp_table; /* PICTURE_LAYER::CBPTAB/ICBPTAB */
|
|
+ unsigned char mb_mode_table; /* PICTURE_LAYER::MBMODETAB */
|
|
+ unsigned char range_reduction_frame;/* PICTURE_LAYER::RANGEREDFRM */
|
|
+ unsigned char rounding_control; /* PICTURE_LAYER::RNDCTRL */
|
|
+ unsigned char post_processing; /* PICTURE_LAYER::POSTPROC */
|
|
+ unsigned char picture_resolution_index; /* PICTURE_LAYER::RESPIC */
|
|
+ unsigned char luma_scale; /* PICTURE_LAYER::LUMSCALE */
|
|
+ unsigned char luma_shift; /* PICTURE_LAYER::LUMSHIFT */
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char picture_type : 2; /* PICTURE_LAYER::PTYPE */
|
|
+ unsigned char frame_coding_mode : 3; /* PICTURE_LAYER::FCM */
|
|
+ unsigned char top_field_first : 1; /* PICTURE_LAYER::TFF */
|
|
+ unsigned char is_first_field : 1; /* set to 1 if it is the first field */
|
|
+ unsigned char intensity_compensation : 1; /* PICTURE_LAYER::INTCOMP */
|
|
+ } bits;
|
|
+ unsigned char value;
|
|
+ } picture_fields;
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char mv_type_mb : 1; /* PICTURE::MVTYPEMB */
|
|
+ unsigned char direct_mb : 1; /* PICTURE::DIRECTMB */
|
|
+ unsigned char skip_mb : 1; /* PICTURE::SKIPMB */
|
|
+ unsigned char field_tx : 1; /* PICTURE::FIELDTX */
|
|
+ unsigned char forward_mb : 1; /* PICTURE::FORWARDMB */
|
|
+ unsigned char ac_pred : 1; /* PICTURE::ACPRED */
|
|
+ unsigned char overflags : 1; /* PICTURE::OVERFLAGS */
|
|
+ } flags;
|
|
+ unsigned char value;
|
|
+ } raw_coding;
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char bp_mv_type_mb : 1; /* PICTURE::MVTYPEMB */
|
|
+ unsigned char bp_direct_mb : 1; /* PICTURE::DIRECTMB */
|
|
+ unsigned char bp_skip_mb : 1; /* PICTURE::SKIPMB */
|
|
+ unsigned char bp_field_tx : 1; /* PICTURE::FIELDTX */
|
|
+ unsigned char bp_forward_mb : 1; /* PICTURE::FORWARDMB */
|
|
+ unsigned char bp_ac_pred : 1; /* PICTURE::ACPRED */
|
|
+ unsigned char bp_overflags : 1; /* PICTURE::OVERFLAGS */
|
|
+ } flags;
|
|
+ unsigned char value;
|
|
+ } bitplane_present; /* signal what bitplane is being passed via the bitplane buffer */
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char reference_distance_flag : 1;/* PICTURE_LAYER::REFDIST_FLAG */
|
|
+ unsigned char reference_distance : 5;/* PICTURE_LAYER::REFDIST */
|
|
+ unsigned char num_reference_pictures: 1;/* PICTURE_LAYER::NUMREF */
|
|
+ unsigned char reference_field_pic_indicator : 1;/* PICTURE_LAYER::REFFIELD */
|
|
+ } bits;
|
|
+ unsigned short value;
|
|
+ } reference_fields;
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char mv_mode : 3; /* PICTURE_LAYER::MVMODE */
|
|
+ unsigned char mv_mode2 : 3; /* PICTURE_LAYER::MVMODE2 */
|
|
+ unsigned char mv_table : 3; /* PICTURE_LAYER::MVTAB/IMVTAB */
|
|
+ unsigned char two_mv_block_pattern_table: 2; /* PICTURE_LAYER::2MVBPTAB */
|
|
+ unsigned char four_mv_switch : 1; /* PICTURE_LAYER::4MVSWITCH */
|
|
+ unsigned char four_mv_block_pattern_table : 2; /* PICTURE_LAYER::4MVBPTAB */
|
|
+ unsigned char extended_mv_flag : 1; /* ENTRY_POINT_LAYER::EXTENDED_MV */
|
|
+ unsigned char extended_mv_range : 2; /* PICTURE_LAYER::MVRANGE */
|
|
+ unsigned char extended_dmv_flag : 1; /* ENTRY_POCHAR_LAYER::EXTENDED_DMV */
|
|
+ unsigned char extended_dmv_range : 2; /* PICTURE_LAYER::DMVRANGE */
|
|
+ } bits;
|
|
+ unsigned int value;
|
|
+ } mv_fields;
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char dquant : 2; /* ENTRY_POINT_LAYER::DQUANT */
|
|
+ unsigned char quantizer : 2; /* ENTRY_POINT_LAYER::QUANTIZER */
|
|
+ unsigned char half_qp : 1; /* PICTURE_LAYER::HALFQP */
|
|
+ unsigned char pic_quantizer_scale : 5;/* PICTURE_LAYER::PQUANT */
|
|
+ unsigned char pic_quantizer_type : 1;/* PICTURE_LAYER::PQUANTIZER */
|
|
+ unsigned char dq_frame : 1; /* VOPDQUANT::DQUANTFRM */
|
|
+ unsigned char dq_profile : 2; /* VOPDQUANT::DQPROFILE */
|
|
+ unsigned char dq_sb_edge : 2; /* VOPDQUANT::DQSBEDGE */
|
|
+ unsigned char dq_db_edge : 2; /* VOPDQUANT::DQDBEDGE */
|
|
+ unsigned char dq_binary_level : 1; /* VOPDQUANT::DQBILEVEL */
|
|
+ unsigned char alt_pic_quantizer : 5;/* VOPDQUANT::ALTPQUANT */
|
|
+ } bits;
|
|
+ unsigned long value;
|
|
+ } pic_quantizer_fields;
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char variable_sized_transform_flag : 1;/* ENTRY_POINT_LAYER::VSTRANSFORM */
|
|
+ unsigned char mb_level_transform_type_flag : 1;/* PICTURE_LAYER::TTMBF */
|
|
+ unsigned char frame_level_transform_type : 2;/* PICTURE_LAYER::TTFRM */
|
|
+ unsigned char transform_ac_codingset_idx1 : 2;/* PICTURE_LAYER::TRANSACFRM */
|
|
+ unsigned char transform_ac_codingset_idx2 : 2;/* PICTURE_LAYER::TRANSACFRM2 */
|
|
+ unsigned char intra_transform_dc_table : 1;/* PICTURE_LAYER::TRANSDCTAB */
|
|
+ } bits;
|
|
+ unsigned short value;
|
|
+ } transform_fields;
|
|
+} VAPictureParameterBufferVC1_0_30;
|
|
+
|
|
+/* MPEG-2 Picture Parameter Buffer (0.30) */
|
|
+typedef struct _VAPictureParameterBufferMPEG2_0_30
|
|
+{
|
|
+ unsigned short horizontal_size;
|
|
+ unsigned short vertical_size;
|
|
+ VASurfaceID forward_reference_picture;
|
|
+ VASurfaceID backward_reference_picture;
|
|
+ /* meanings of the following fields are the same as in the standard */
|
|
+ int picture_coding_type;
|
|
+ int f_code; /* pack all four fcode into this */
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned int intra_dc_precision : 2;
|
|
+ unsigned int picture_structure : 2;
|
|
+ unsigned int top_field_first : 1;
|
|
+ unsigned int frame_pred_frame_dct : 1;
|
|
+ unsigned int concealment_motion_vectors : 1;
|
|
+ unsigned int q_scale_type : 1;
|
|
+ unsigned int intra_vlc_format : 1;
|
|
+ unsigned int alternate_scan : 1;
|
|
+ unsigned int repeat_first_field : 1;
|
|
+ unsigned int progressive_frame : 1;
|
|
+ unsigned int is_first_field : 1; /* indicate whether the current field
|
|
+ * is the first field for field picture
|
|
+ */
|
|
+ } bits;
|
|
+ unsigned int value;
|
|
+ } picture_coding_extension;
|
|
+} VAPictureParameterBufferMPEG2_0_30;
|
|
+
|
|
+/* MPEG-2 Slice Parameter Buffer (0.29) */
|
|
+typedef VASliceParameterBufferMPEG2_0_29 VASliceParameterBufferMPEG2_0_30;
|
|
+
|
|
+/* MPEG-4 Picture Parameter Buffer (0.30) */
|
|
+typedef struct _VAPictureParameterBufferMPEG4_0_30
|
|
+{
|
|
+ unsigned short vop_width;
|
|
+ unsigned short vop_height;
|
|
+ VASurfaceID forward_reference_picture;
|
|
+ VASurfaceID backward_reference_picture;
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char short_video_header : 1;
|
|
+ unsigned char chroma_format : 2;
|
|
+ unsigned char interlaced : 1;
|
|
+ unsigned char obmc_disable : 1;
|
|
+ unsigned char sprite_enable : 2;
|
|
+ unsigned char sprite_warping_accuracy : 2;
|
|
+ unsigned char quant_type : 1;
|
|
+ unsigned char quarter_sample : 1;
|
|
+ unsigned char data_partitioned : 1;
|
|
+ unsigned char reversible_vlc : 1;
|
|
+ } bits;
|
|
+ unsigned short value;
|
|
+ } vol_fields;
|
|
+ unsigned char no_of_sprite_warping_points;
|
|
+ short sprite_trajectory_du[3];
|
|
+ short sprite_trajectory_dv[3];
|
|
+ unsigned char quant_precision;
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char vop_coding_type : 2;
|
|
+ unsigned char backward_reference_vop_coding_type : 2;
|
|
+ unsigned char vop_rounding_type : 1;
|
|
+ unsigned char intra_dc_vlc_thr : 3;
|
|
+ unsigned char top_field_first : 1;
|
|
+ unsigned char alternate_vertical_scan_flag : 1;
|
|
+ } bits;
|
|
+ unsigned short value;
|
|
+ } vop_fields;
|
|
+ unsigned char vop_fcode_forward;
|
|
+ unsigned char vop_fcode_backward;
|
|
+ /* short header related */
|
|
+ unsigned char num_gobs_in_vop;
|
|
+ unsigned char num_macroblocks_in_gob;
|
|
+ /* for direct mode prediction */
|
|
+ short TRB;
|
|
+ short TRD;
|
|
+} VAPictureParameterBufferMPEG4_0_30;
|
|
+
|
|
+/* Encode Slice Parameter Buffer (0.30) */
|
|
+typedef struct _VAEncSliceParameterBuffer_0_30
|
|
+{
|
|
+ unsigned int start_row_number; /* starting MB row number for this slice */
|
|
+ unsigned int slice_height; /* slice height measured in MB */
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned char is_intra : 1;
|
|
+ unsigned char disable_deblocking_filter_idc : 2;
|
|
+ } bits;
|
|
+ unsigned char value;
|
|
+ } slice_flags;
|
|
+} VAEncSliceParameterBuffer_0_30;
|
|
+
|
|
+/* MPEG-4 Picture Parameter Buffer (0.31) */
|
|
+typedef struct _VAPictureParameterBufferMPEG4_0_31
|
|
+{
|
|
+ unsigned short vop_width;
|
|
+ unsigned short vop_height;
|
|
+ VASurfaceID forward_reference_picture;
|
|
+ VASurfaceID backward_reference_picture;
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned int short_video_header : 1;
|
|
+ unsigned int chroma_format : 2;
|
|
+ unsigned int interlaced : 1;
|
|
+ unsigned int obmc_disable : 1;
|
|
+ unsigned int sprite_enable : 2;
|
|
+ unsigned int sprite_warping_accuracy : 2;
|
|
+ unsigned int quant_type : 1;
|
|
+ unsigned int quarter_sample : 1;
|
|
+ unsigned int data_partitioned : 1;
|
|
+ unsigned int reversible_vlc : 1;
|
|
+ } bits;
|
|
+ unsigned int value;
|
|
+ } vol_fields;
|
|
+ unsigned char no_of_sprite_warping_points;
|
|
+ short sprite_trajectory_du[3];
|
|
+ short sprite_trajectory_dv[3];
|
|
+ unsigned char quant_precision;
|
|
+ union {
|
|
+ struct {
|
|
+ unsigned int vop_coding_type : 2;
|
|
+ unsigned int backward_reference_vop_coding_type : 2;
|
|
+ unsigned int vop_rounding_type : 1;
|
|
+ unsigned int intra_dc_vlc_thr : 3;
|
|
+ unsigned int top_field_first : 1;
|
|
+ unsigned int alternate_vertical_scan_flag : 1;
|
|
+ } bits;
|
|
+ unsigned int value;
|
|
+ } vop_fields;
|
|
+ unsigned char vop_fcode_forward;
|
|
+ unsigned char vop_fcode_backward;
|
|
+ /* short header related */
|
|
+ unsigned char num_gobs_in_vop;
|
|
+ unsigned char num_macroblocks_in_gob;
|
|
+ /* for direct mode prediction */
|
|
+ short TRB;
|
|
+ short TRD;
|
|
+} VAPictureParameterBufferMPEG4_0_31;
|
|
+
|
|
+typedef struct VADriverContext_0_29 *VADriverContextP_0_29;
|
|
+
|
|
+/* Driver VTable (0.29) */
|
|
+struct VADriverVTable_0_29
|
|
+{
|
|
+ VAStatus (*vaTerminate) ( VADriverContextP_0_29 ctx );
|
|
+
|
|
+ VAStatus (*vaQueryConfigProfiles) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VAProfile *profile_list, /* out */
|
|
+ int *num_profiles /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaQueryConfigEntrypoints) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VAProfile profile,
|
|
+ VAEntrypoint *entrypoint_list, /* out */
|
|
+ int *num_entrypoints /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaGetConfigAttributes) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VAProfile profile,
|
|
+ VAEntrypoint entrypoint,
|
|
+ VAConfigAttrib *attrib_list, /* in/out */
|
|
+ int num_attribs
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaCreateConfig) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VAProfile profile,
|
|
+ VAEntrypoint entrypoint,
|
|
+ VAConfigAttrib *attrib_list,
|
|
+ int num_attribs,
|
|
+ VAConfigID *config_id /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaDestroyConfig) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VAConfigID config_id
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaQueryConfigAttributes) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VAConfigID config_id,
|
|
+ VAProfile *profile, /* out */
|
|
+ VAEntrypoint *entrypoint, /* out */
|
|
+ VAConfigAttrib *attrib_list, /* out */
|
|
+ int *num_attribs /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaCreateSurfaces) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ int width,
|
|
+ int height,
|
|
+ int format,
|
|
+ int num_surfaces,
|
|
+ VASurfaceID *surfaces /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaDestroySurfaces) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VASurfaceID *surface_list,
|
|
+ int num_surfaces
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaCreateContext) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VAConfigID config_id,
|
|
+ int picture_width,
|
|
+ int picture_height,
|
|
+ int flag,
|
|
+ VASurfaceID *render_targets,
|
|
+ int num_render_targets,
|
|
+ VAContextID *context /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaDestroyContext) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VAContextID context
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaCreateBuffer) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VAContextID context, /* in */
|
|
+ VABufferType type, /* in */
|
|
+ unsigned int size, /* in */
|
|
+ unsigned int num_elements, /* in */
|
|
+ void *data, /* in */
|
|
+ VABufferID *buf_id /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaBufferSetNumElements) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VABufferID buf_id, /* in */
|
|
+ unsigned int num_elements /* in */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaMapBuffer) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VABufferID buf_id, /* in */
|
|
+ void **pbuf /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaUnmapBuffer) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VABufferID buf_id /* in */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaDestroyBuffer) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VABufferID buffer_id
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaBeginPicture) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VAContextID context,
|
|
+ VASurfaceID render_target
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaRenderPicture) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VAContextID context,
|
|
+ VABufferID *buffers,
|
|
+ int num_buffers
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaEndPicture) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VAContextID context
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaSyncSurface) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VAContextID context,
|
|
+ VASurfaceID render_target
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaQuerySurfaceStatus) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VASurfaceID render_target,
|
|
+ VASurfaceStatus *status /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaPutSurface) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VASurfaceID surface,
|
|
+ unsigned long draw, /* X Drawable */
|
|
+ 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 the clip list */
|
|
+ unsigned int flags /* de-interlacing flags */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaQueryImageFormats) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VAImageFormat *format_list, /* out */
|
|
+ int *num_formats /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaCreateImage) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VAImageFormat *format,
|
|
+ int width,
|
|
+ int height,
|
|
+ VAImage *image /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaDeriveImage) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VASurfaceID surface,
|
|
+ VAImage *image /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaDestroyImage) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VAImageID image
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaSetImagePalette) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VAImageID image,
|
|
+ /*
|
|
+ * 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
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaGetImage) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VASurfaceID surface,
|
|
+ int x, /* coordinates of the upper left source pixel */
|
|
+ int y,
|
|
+ unsigned int width, /* width and height of the region */
|
|
+ unsigned int height,
|
|
+ VAImageID image
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaPutImage) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VASurfaceID surface,
|
|
+ VAImageID image,
|
|
+ int src_x,
|
|
+ int src_y,
|
|
+ unsigned int width,
|
|
+ unsigned int height,
|
|
+ int dest_x,
|
|
+ int dest_y
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaPutImage2) (
|
|
+ VADriverContextP_0_29 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) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VAImageFormat *format_list, /* out */
|
|
+ unsigned int *flags, /* out */
|
|
+ unsigned int *num_formats /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaCreateSubpicture) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VAImageID image,
|
|
+ VASubpictureID *subpicture /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaDestroySubpicture) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VASubpictureID subpicture
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaSetSubpictureImage) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VASubpictureID subpicture,
|
|
+ VAImageID image
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaSetSubpicturePalette) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ 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 VASubpicture struct
|
|
+ */
|
|
+ unsigned char *palette
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaSetSubpictureChromakey) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VASubpictureID subpicture,
|
|
+ unsigned int chromakey_min,
|
|
+ unsigned int chromakey_max,
|
|
+ unsigned int chromakey_mask
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaSetSubpictureGlobalAlpha) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VASubpictureID subpicture,
|
|
+ float global_alpha
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaAssociateSubpicture) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VASubpictureID subpicture,
|
|
+ VASurfaceID *target_surfaces,
|
|
+ int num_surfaces,
|
|
+ short src_x, /* upper left offset in subpicture */
|
|
+ short src_y,
|
|
+ short dest_x, /* upper left offset in surface */
|
|
+ short dest_y,
|
|
+ unsigned short width,
|
|
+ unsigned short height,
|
|
+ /*
|
|
+ * whether to enable chroma-keying or global-alpha
|
|
+ * see VA_SUBPICTURE_XXX values
|
|
+ */
|
|
+ unsigned int flags
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaAssociateSubpicture2) (
|
|
+ VADriverContextP_0_29 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) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VASubpictureID subpicture,
|
|
+ VASurfaceID *target_surfaces,
|
|
+ int num_surfaces
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaQueryDisplayAttributes) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VADisplayAttribute *attr_list, /* out */
|
|
+ int *num_attributes /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaGetDisplayAttributes) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VADisplayAttribute *attr_list, /* in/out */
|
|
+ int num_attributes
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaSetDisplayAttributes) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VADisplayAttribute *attr_list,
|
|
+ int num_attributes
|
|
+ );
|
|
+
|
|
+
|
|
+ VAStatus (*vaDbgCopySurfaceToBuffer) (
|
|
+ VADriverContextP_0_29 ctx,
|
|
+ VASurfaceID surface,
|
|
+ void **buffer, /* out */
|
|
+ unsigned int *stride /* out */
|
|
+ );
|
|
+};
|
|
+
|
|
+/* Driver context (0.29) */
|
|
+struct VADriverContext_0_29
|
|
+{
|
|
+ void *old_pNext; /* preserved for binary compatibility */
|
|
+
|
|
+ void *pDriverData;
|
|
+ struct VADriverVTable_0_29 vtable;
|
|
+
|
|
+ void *x11_dpy;
|
|
+ int x11_screen;
|
|
+
|
|
+ int version_major;
|
|
+ int version_minor;
|
|
+ int max_profiles;
|
|
+ int max_entrypoints;
|
|
+ int max_attributes;
|
|
+ int max_image_formats;
|
|
+ int max_subpic_formats;
|
|
+ int max_display_attributes;
|
|
+ const char *str_vendor;
|
|
+
|
|
+ void *handle; /* dlopen handle */
|
|
+};
|
|
+
|
|
+/* Forward declarations for VA API 0.30 */
|
|
+struct v4l2_format;
|
|
+struct v4l2_buffer;
|
|
+typedef struct VADriverContext_0_30 *VADriverContextP_0_30;
|
|
+
|
|
+/* Driver VTable (0.30) */
|
|
+struct VADriverVTable_0_30
|
|
+{
|
|
+ VAStatus (*vaTerminate) ( VADriverContextP_0_30 ctx );
|
|
+
|
|
+ VAStatus (*vaQueryConfigProfiles) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VAProfile *profile_list, /* out */
|
|
+ int *num_profiles /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaQueryConfigEntrypoints) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VAProfile profile,
|
|
+ VAEntrypoint *entrypoint_list, /* out */
|
|
+ int *num_entrypoints /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaGetConfigAttributes) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VAProfile profile,
|
|
+ VAEntrypoint entrypoint,
|
|
+ VAConfigAttrib *attrib_list, /* in/out */
|
|
+ int num_attribs
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaCreateConfig) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VAProfile profile,
|
|
+ VAEntrypoint entrypoint,
|
|
+ VAConfigAttrib *attrib_list,
|
|
+ int num_attribs,
|
|
+ VAConfigID *config_id /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaDestroyConfig) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VAConfigID config_id
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaQueryConfigAttributes) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VAConfigID config_id,
|
|
+ VAProfile *profile, /* out */
|
|
+ VAEntrypoint *entrypoint, /* out */
|
|
+ VAConfigAttrib *attrib_list, /* out */
|
|
+ int *num_attribs /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaCreateSurfaces) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ int width,
|
|
+ int height,
|
|
+ int format,
|
|
+ int num_surfaces,
|
|
+ VASurfaceID *surfaces /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaDestroySurfaces) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VASurfaceID *surface_list,
|
|
+ int num_surfaces
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaCreateContext) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VAConfigID config_id,
|
|
+ int picture_width,
|
|
+ int picture_height,
|
|
+ int flag,
|
|
+ VASurfaceID *render_targets,
|
|
+ int num_render_targets,
|
|
+ VAContextID *context /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaDestroyContext) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VAContextID context
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaCreateBuffer) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VAContextID context, /* in */
|
|
+ VABufferType type, /* in */
|
|
+ unsigned int size, /* in */
|
|
+ unsigned int num_elements, /* in */
|
|
+ void *data, /* in */
|
|
+ VABufferID *buf_id /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaBufferSetNumElements) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VABufferID buf_id, /* in */
|
|
+ unsigned int num_elements /* in */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaMapBuffer) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VABufferID buf_id, /* in */
|
|
+ void **pbuf /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaUnmapBuffer) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VABufferID buf_id /* in */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaDestroyBuffer) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VABufferID buffer_id
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaBeginPicture) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VAContextID context,
|
|
+ VASurfaceID render_target
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaRenderPicture) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VAContextID context,
|
|
+ VABufferID *buffers,
|
|
+ int num_buffers
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaEndPicture) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VAContextID context
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaSyncSurface) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VAContextID context,
|
|
+ VASurfaceID render_target
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaQuerySurfaceStatus) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VASurfaceID render_target,
|
|
+ VASurfaceStatus *status /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaPutSurface) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VASurfaceID surface,
|
|
+ unsigned long draw, /* X Drawable */
|
|
+ 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 the clip list */
|
|
+ unsigned int flags /* de-interlacing flags */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaQueryImageFormats) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VAImageFormat *format_list, /* out */
|
|
+ int *num_formats /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaCreateImage) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VAImageFormat *format,
|
|
+ int width,
|
|
+ int height,
|
|
+ VAImage *image /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaDeriveImage) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VASurfaceID surface,
|
|
+ VAImage *image /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaDestroyImage) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VAImageID image
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaSetImagePalette) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VAImageID image,
|
|
+ /*
|
|
+ * 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
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaGetImage) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VASurfaceID surface,
|
|
+ int x, /* coordinates of the upper left source pixel */
|
|
+ int y,
|
|
+ unsigned int width, /* width and height of the region */
|
|
+ unsigned int height,
|
|
+ VAImageID image
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaPutImage) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VASurfaceID surface,
|
|
+ VAImageID image,
|
|
+ int src_x,
|
|
+ int src_y,
|
|
+ unsigned int width,
|
|
+ unsigned int height,
|
|
+ int dest_x,
|
|
+ int dest_y
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaPutImage2) (
|
|
+ VADriverContextP_0_30 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) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VAImageFormat *format_list, /* out */
|
|
+ unsigned int *flags, /* out */
|
|
+ unsigned int *num_formats /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaCreateSubpicture) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VAImageID image,
|
|
+ VASubpictureID *subpicture /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaDestroySubpicture) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VASubpictureID subpicture
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaSetSubpictureImage) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VASubpictureID subpicture,
|
|
+ VAImageID image
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaSetSubpictureChromakey) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VASubpictureID subpicture,
|
|
+ unsigned int chromakey_min,
|
|
+ unsigned int chromakey_max,
|
|
+ unsigned int chromakey_mask
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaSetSubpictureGlobalAlpha) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VASubpictureID subpicture,
|
|
+ float global_alpha
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaAssociateSubpicture) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VASubpictureID subpicture,
|
|
+ VASurfaceID *target_surfaces,
|
|
+ int num_surfaces,
|
|
+ short src_x, /* upper left offset in subpicture */
|
|
+ short src_y,
|
|
+ short dest_x, /* upper left offset in surface */
|
|
+ short dest_y,
|
|
+ unsigned short width,
|
|
+ unsigned short height,
|
|
+ /*
|
|
+ * whether to enable chroma-keying or global-alpha
|
|
+ * see VA_SUBPICTURE_XXX values
|
|
+ */
|
|
+ unsigned int flags
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaAssociateSubpicture2) (
|
|
+ VADriverContextP_0_30 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) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VASubpictureID subpicture,
|
|
+ VASurfaceID *target_surfaces,
|
|
+ int num_surfaces
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaQueryDisplayAttributes) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VADisplayAttribute *attr_list, /* out */
|
|
+ int *num_attributes /* out */
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaGetDisplayAttributes) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VADisplayAttribute *attr_list, /* in/out */
|
|
+ int num_attributes
|
|
+ );
|
|
+
|
|
+ VAStatus (*vaSetDisplayAttributes) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VADisplayAttribute *attr_list,
|
|
+ int num_attributes
|
|
+ );
|
|
+
|
|
+ /* device specific */
|
|
+ VAStatus (*vaCreateSurfaceFromCIFrame) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ unsigned long frame_id,
|
|
+ VASurfaceID *surface /* out */
|
|
+ );
|
|
+
|
|
+
|
|
+ VAStatus (*vaCreateSurfaceFromV4L2Buf) (
|
|
+ VADriverContextP_0_30 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 (*vaCopySurfaceToBuffer) (
|
|
+ VADriverContextP_0_30 ctx,
|
|
+ VASurfaceID surface,
|
|
+ unsigned int *fourcc, /* out for follow argument */
|
|
+ unsigned int *luma_stride,
|
|
+ unsigned int *chroma_u_stride,
|
|
+ unsigned int *chroma_v_stride,
|
|
+ unsigned int *luma_offset,
|
|
+ unsigned int *chroma_u_offset,
|
|
+ unsigned int *chroma_v_offset,
|
|
+ void **buffer
|
|
+ );
|
|
+};
|
|
+
|
|
+/* Driver context (0.30) */
|
|
+struct VADriverContext_0_30
|
|
+{
|
|
+ void *pDriverData;
|
|
+ struct VADriverVTable_0_30 vtable;
|
|
+
|
|
+ void *x11_dpy;
|
|
+ int x11_screen;
|
|
+ int version_major;
|
|
+ int version_minor;
|
|
+ int max_profiles;
|
|
+ int max_entrypoints;
|
|
+ int max_attributes;
|
|
+ int max_image_formats;
|
|
+ int max_subpic_formats;
|
|
+ int max_display_attributes;
|
|
+ const char *str_vendor;
|
|
+
|
|
+ void *handle; /* dlopen handle */
|
|
+
|
|
+ void *dri_state;
|
|
+};
|
|
+
|
|
+/* Driver VTable and context (0.31) */
|
|
+#define VADriverVTable_0_31 VADriverVTable
|
|
+#define VADriverContext_0_31 VADriverContext
|
|
+
|
|
+#endif /* VA_COMPAT_H */
|
|
diff --git a/src/va_compat_template.h b/src/va_compat_template.h
|
|
new file mode 100644
|
|
index 0000000..18349de
|
|
--- /dev/null
|
|
+++ b/src/va_compat_template.h
|
|
@@ -0,0 +1,539 @@
|
|
+/*
|
|
+ * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved.
|
|
+ *
|
|
+ * Permission is hereby granted, free of charge, to any person obtaining a
|
|
+ * copy of this software and associated documentation files (the
|
|
+ * "Software"), to deal in the Software without restriction, including
|
|
+ * without limitation the rights to use, copy, modify, merge, publish,
|
|
+ * distribute, sub license, and/or sell copies of the Software, and to
|
|
+ * permit persons to whom the Software is furnished to do so, subject to
|
|
+ * the following conditions:
|
|
+ *
|
|
+ * The above copyright notice and this permission notice (including the
|
|
+ * next paragraph) shall be included in all copies or substantial portions
|
|
+ * of the Software.
|
|
+ *
|
|
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
|
|
+ * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
|
|
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
+ */
|
|
+
|
|
+#undef CONCAT_
|
|
+#define CONCAT_(x, y) x##y
|
|
+#undef CONCAT
|
|
+#define CONCAT(x, y) CONCAT_(x, y)
|
|
+#undef MKCOMPAT_
|
|
+#define MKCOMPAT_(NAME,MINOR) CONCAT(CONCAT(NAME,_0_),MINOR)
|
|
+#undef MKCOMPAT
|
|
+#define MKCOMPAT(NAME) MKCOMPAT_(NAME,COMPAT_MINOR)
|
|
+#undef STRUCT
|
|
+#define STRUCT(BUFFER, CODEC) MKCOMPAT(VA##BUFFER##Buffer##CODEC)
|
|
+#undef TRANSLATE_1
|
|
+#define TRANSLATE_1(NAME) CONCAT(va_compat_translate_,NAME)
|
|
+#undef TRANSLATE_
|
|
+#define TRANSLATE_(NAME) TRANSLATE_1(MKCOMPAT(NAME))
|
|
+#undef TRANSLATE
|
|
+#define TRANSLATE(BUFFER, CODEC) TRANSLATE_1(STRUCT(BUFFER,CODEC))
|
|
+
|
|
+#undef COPY_ARRAY
|
|
+#define COPY_ARRAY(DST, SRC, ARRAY) \
|
|
+ memcpy((DST)->ARRAY, (SRC)->ARRAY, sizeof((DST)->ARRAY))
|
|
+
|
|
+#undef COPY_FIELD
|
|
+#define COPY_FIELD(DST, SRC, MEMBER) \
|
|
+ (DST)->MEMBER = (SRC)->MEMBER
|
|
+
|
|
+#undef COPY_VTABLE__
|
|
+#define COPY_VTABLE__(DST, DST_MEMBER, SRC, SRC_MEMBER) \
|
|
+ (DST##_vtable)->DST_MEMBER = (SRC##_vtable)->SRC_MEMBER
|
|
+
|
|
+#undef COPY_VTABLE_
|
|
+#define COPY_VTABLE_(DST, DST_SUFFIX, SRC, MEMBER) \
|
|
+ COPY_VTABLE__(DST, MEMBER##_##DST_SUFFIX, SRC, MEMBER)
|
|
+
|
|
+#undef COPY_VTABLE
|
|
+#define COPY_VTABLE(DST, SRC, MEMBER) \
|
|
+ COPY_VTABLE__(DST, MEMBER, SRC, MEMBER)
|
|
+
|
|
+/* 0.29 */
|
|
+#if COMPAT_MAJOR == 0 && COMPAT_MINOR == 29
|
|
+#undef BFV
|
|
+#define BFV(a, b) a
|
|
+#undef BFM
|
|
+#define BFM(a, b, c) c
|
|
+#undef COPY_BIT_FIELD
|
|
+#define COPY_BIT_FIELD(DST, SRC, FIELD, MEMBER) \
|
|
+ (DST)->MEMBER = (SRC)->FIELD.bits.MEMBER
|
|
+#undef COPY_BIT_FLAG
|
|
+#define COPY_BIT_FLAG(DST, SRC, FIELD, MEMBER) \
|
|
+ (DST)->MEMBER = (SRC)->FIELD.flags.MEMBER
|
|
+#endif
|
|
+
|
|
+/* 0.29 glue to match 0.30 names */
|
|
+#undef M_raw_coding
|
|
+#undef M_bitplane_present
|
|
+#undef M_luma_flag
|
|
+#undef M_luma
|
|
+#undef M_chroma_flag
|
|
+#undef M_chroma
|
|
+
|
|
+#if COMPAT_MAJOR == 0 && COMPAT_MINOR == 29
|
|
+#define M_raw_coding raw_coding_flag
|
|
+#define M_bitplane_present bitplane_present_flag
|
|
+#define M_luma_flag range_mapping_luma_flag
|
|
+#define M_luma range_mapping_luma
|
|
+#define M_chroma_flag range_mapping_chroma_flag
|
|
+#define M_chroma range_mapping_chroma
|
|
+#else
|
|
+#define M_raw_coding raw_coding
|
|
+#define M_bitplane_present bitplane_present
|
|
+#define M_luma_flag luma_flag
|
|
+#define M_luma luma
|
|
+#define M_chroma_flag chroma_flag
|
|
+#define M_chroma chroma
|
|
+#endif
|
|
+
|
|
+/* 0.30 */
|
|
+#if COMPAT_MAJOR == 0 && COMPAT_MINOR == 30
|
|
+#undef BFV
|
|
+#define BFV(a, b) a.b
|
|
+#undef BFM
|
|
+#define BFM(a, b, c) a.b.c
|
|
+#undef COPY_BIT_FIELD
|
|
+#define COPY_BIT_FIELD(DST, SRC, FIELD, MEMBER) \
|
|
+ (DST)->FIELD.bits.MEMBER = (SRC)->FIELD.bits.MEMBER
|
|
+#undef COPY_BIT_FLAG
|
|
+#define COPY_BIT_FLAG(DST, SRC, FIELD, MEMBER) \
|
|
+ (DST)->FIELD.flags.MEMBER = (SRC)->FIELD.flags.MEMBER
|
|
+#endif
|
|
+
|
|
+#if COMPAT_MAJOR == 0 && COMPAT_MINOR < 31
|
|
+static VAStatus TRANSLATE_(VAPictureH264)(
|
|
+ VACompatContextP ctx,
|
|
+ void *dest_pic,
|
|
+ const void *src_pic
|
|
+)
|
|
+{
|
|
+ MKCOMPAT(VAPictureH264) *dest = dest_pic;
|
|
+ const VAPictureH264 *src = src_pic;
|
|
+
|
|
+ COPY_FIELD(dest, src, picture_id);
|
|
+ COPY_FIELD(dest, src, flags);
|
|
+ COPY_FIELD(dest, src, TopFieldOrderCnt);
|
|
+ COPY_FIELD(dest, src, BottomFieldOrderCnt);
|
|
+
|
|
+ return VA_STATUS_SUCCESS;
|
|
+}
|
|
+
|
|
+static VAStatus TRANSLATE(PictureParameter,H264)(
|
|
+ VACompatContextP ctx,
|
|
+ void *dest_buffer,
|
|
+ const void *src_buffer
|
|
+)
|
|
+{
|
|
+ STRUCT(PictureParameter,H264) *dest = dest_buffer;
|
|
+ const VAPictureParameterBufferH264 *src = src_buffer;
|
|
+ VAStatus status;
|
|
+ int i;
|
|
+
|
|
+ status = TRANSLATE_(VAPictureH264)(ctx,
|
|
+ &dest->CurrPic, &src->CurrPic);
|
|
+ if (status != VA_STATUS_SUCCESS)
|
|
+ return status;
|
|
+
|
|
+ for (i = 0; i < 16; i++) {
|
|
+ status = TRANSLATE_(VAPictureH264)(ctx,
|
|
+ &dest->ReferenceFrames[i],
|
|
+ &src->ReferenceFrames[i]);
|
|
+ if (status != VA_STATUS_SUCCESS)
|
|
+ return status;
|
|
+ }
|
|
+
|
|
+ COPY_FIELD(dest, src, picture_width_in_mbs_minus1);
|
|
+ COPY_FIELD(dest, src, picture_height_in_mbs_minus1);
|
|
+ COPY_FIELD(dest, src, bit_depth_luma_minus8);
|
|
+ COPY_FIELD(dest, src, bit_depth_chroma_minus8);
|
|
+ COPY_FIELD(dest, src, num_ref_frames);
|
|
+ dest->BFV(seq_fields, value) = 0; /* reset all bits */
|
|
+ COPY_BIT_FIELD(dest, src, seq_fields, chroma_format_idc);
|
|
+ COPY_BIT_FIELD(dest, src, seq_fields, residual_colour_transform_flag);
|
|
+ COPY_BIT_FIELD(dest, src, seq_fields, frame_mbs_only_flag);
|
|
+ COPY_BIT_FIELD(dest, src, seq_fields, mb_adaptive_frame_field_flag);
|
|
+ COPY_BIT_FIELD(dest, src, seq_fields, direct_8x8_inference_flag);
|
|
+ COPY_BIT_FIELD(dest, src, seq_fields, MinLumaBiPredSize8x8);
|
|
+ COPY_FIELD(dest, src, num_slice_groups_minus1);
|
|
+ COPY_FIELD(dest, src, slice_group_map_type);
|
|
+ COPY_FIELD(dest, src, pic_init_qp_minus26);
|
|
+ COPY_FIELD(dest, src, chroma_qp_index_offset);
|
|
+ COPY_FIELD(dest, src, second_chroma_qp_index_offset);
|
|
+ dest->BFV(pic_fields, value) = 0; /* reset all bits */
|
|
+ COPY_BIT_FIELD(dest, src, pic_fields, entropy_coding_mode_flag);
|
|
+ COPY_BIT_FIELD(dest, src, pic_fields, weighted_pred_flag);
|
|
+ COPY_BIT_FIELD(dest, src, pic_fields, weighted_bipred_idc);
|
|
+ COPY_BIT_FIELD(dest, src, pic_fields, transform_8x8_mode_flag);
|
|
+ COPY_BIT_FIELD(dest, src, pic_fields, field_pic_flag);
|
|
+ COPY_BIT_FIELD(dest, src, pic_fields, constrained_intra_pred_flag);
|
|
+ COPY_FIELD(dest, src, frame_num);
|
|
+
|
|
+ return VA_STATUS_SUCCESS;
|
|
+}
|
|
+
|
|
+static VAStatus TRANSLATE(SliceParameter,H264)(
|
|
+ VACompatContextP ctx,
|
|
+ void *dest_buffer,
|
|
+ const void *src_buffer
|
|
+)
|
|
+{
|
|
+ STRUCT(SliceParameter,H264) *dest = dest_buffer;
|
|
+ const VASliceParameterBufferH264 *src = src_buffer;
|
|
+ VAStatus status;
|
|
+ int i;
|
|
+
|
|
+ COPY_FIELD(dest, src, slice_data_size);
|
|
+ COPY_FIELD(dest, src, slice_data_offset);
|
|
+ COPY_FIELD(dest, src, slice_data_flag);
|
|
+ COPY_FIELD(dest, src, slice_data_bit_offset);
|
|
+ COPY_FIELD(dest, src, first_mb_in_slice);
|
|
+ COPY_FIELD(dest, src, slice_type);
|
|
+ COPY_FIELD(dest, src, direct_spatial_mv_pred_flag);
|
|
+ COPY_FIELD(dest, src, num_ref_idx_l0_active_minus1);
|
|
+ COPY_FIELD(dest, src, num_ref_idx_l1_active_minus1);
|
|
+ COPY_FIELD(dest, src, cabac_init_idc);
|
|
+ COPY_FIELD(dest, src, slice_qp_delta);
|
|
+ COPY_FIELD(dest, src, disable_deblocking_filter_idc);
|
|
+ COPY_FIELD(dest, src, slice_alpha_c0_offset_div2);
|
|
+ COPY_FIELD(dest, src, slice_beta_offset_div2);
|
|
+ for (i = 0; i < 32; i++) {
|
|
+ status = TRANSLATE_(VAPictureH264)(ctx,
|
|
+ &dest->RefPicList0[i],
|
|
+ &src->RefPicList0[i]);
|
|
+ if (status != VA_STATUS_SUCCESS)
|
|
+ return status;
|
|
+ status = TRANSLATE_(VAPictureH264)(ctx,
|
|
+ &dest->RefPicList1[i],
|
|
+ &src->RefPicList1[i]);
|
|
+ if (status != VA_STATUS_SUCCESS)
|
|
+ return status;
|
|
+ }
|
|
+ COPY_FIELD(dest, src, luma_log2_weight_denom);
|
|
+ COPY_FIELD(dest, src, chroma_log2_weight_denom);
|
|
+ COPY_FIELD(dest, src, luma_weight_l0_flag);
|
|
+ COPY_ARRAY(dest, src, luma_weight_l0);
|
|
+ COPY_ARRAY(dest, src, luma_offset_l0);
|
|
+ COPY_FIELD(dest, src, chroma_weight_l0_flag);
|
|
+ COPY_ARRAY(dest, src, chroma_weight_l0);
|
|
+ COPY_ARRAY(dest, src, chroma_offset_l0);
|
|
+ COPY_FIELD(dest, src, luma_weight_l1_flag);
|
|
+ COPY_ARRAY(dest, src, luma_weight_l1);
|
|
+ COPY_ARRAY(dest, src, luma_offset_l1);
|
|
+ COPY_FIELD(dest, src, chroma_weight_l1_flag);
|
|
+ COPY_ARRAY(dest, src, chroma_weight_l1);
|
|
+ COPY_ARRAY(dest, src, chroma_offset_l1);
|
|
+
|
|
+ return VA_STATUS_SUCCESS;
|
|
+}
|
|
+
|
|
+static VAStatus TRANSLATE(PictureParameter,VC1)(
|
|
+ VACompatContextP ctx,
|
|
+ void *dest_buffer,
|
|
+ const void *src_buffer
|
|
+)
|
|
+{
|
|
+ STRUCT(PictureParameter,VC1) *dest = dest_buffer;
|
|
+ const VAPictureParameterBufferVC1 *src = src_buffer;
|
|
+
|
|
+ COPY_FIELD(dest, src, forward_reference_picture);
|
|
+ COPY_FIELD(dest, src, backward_reference_picture);
|
|
+ COPY_FIELD(dest, src, inloop_decoded_picture);
|
|
+ dest->BFV(sequence_fields, value) = 0; /* reset all bits */
|
|
+ COPY_BIT_FIELD(dest, src, sequence_fields, interlace);
|
|
+ COPY_BIT_FIELD(dest, src, sequence_fields, syncmarker);
|
|
+ COPY_BIT_FIELD(dest, src, sequence_fields, overlap);
|
|
+ COPY_FIELD(dest, src, coded_width);
|
|
+ COPY_FIELD(dest, src, coded_height);
|
|
+#if COMPAT_MAJOR == 0 && COMPAT_MINOR == 30
|
|
+ dest->closed_entry = src->entrypoint_fields.bits.closed_entry;
|
|
+ dest->broken_link = src->entrypoint_fields.bits.broken_link;
|
|
+ dest->loopfilter = src->entrypoint_fields.bits.loopfilter;
|
|
+#else
|
|
+ COPY_BIT_FIELD(dest, src, entrypoint_fields, closed_entry);
|
|
+ COPY_BIT_FIELD(dest, src, entrypoint_fields, broken_link);
|
|
+ COPY_BIT_FIELD(dest, src, entrypoint_fields, loopfilter);
|
|
+#endif
|
|
+ COPY_FIELD(dest, src, conditional_overlap_flag);
|
|
+ COPY_FIELD(dest, src, fast_uvmc_flag);
|
|
+ dest->BFV(range_mapping_fields, value) = 0; /* reset all bits */
|
|
+ dest->BFM(range_mapping_fields, bits, M_luma_flag) =
|
|
+ src->range_mapping_fields.bits.luma_flag;
|
|
+ dest->BFM(range_mapping_fields, bits, M_luma) =
|
|
+ src->range_mapping_fields.bits.luma;
|
|
+ dest->BFM(range_mapping_fields, bits, M_chroma_flag) =
|
|
+ src->range_mapping_fields.bits.chroma_flag;
|
|
+ dest->BFM(range_mapping_fields, bits, M_chroma) =
|
|
+ src->range_mapping_fields.bits.chroma;
|
|
+ COPY_FIELD(dest, src, b_picture_fraction);
|
|
+ COPY_FIELD(dest, src, cbp_table);
|
|
+ COPY_FIELD(dest, src, mb_mode_table);
|
|
+ COPY_FIELD(dest, src, range_reduction_frame);
|
|
+ COPY_FIELD(dest, src, rounding_control);
|
|
+ COPY_FIELD(dest, src, post_processing);
|
|
+ COPY_FIELD(dest, src, picture_resolution_index);
|
|
+ COPY_FIELD(dest, src, luma_scale);
|
|
+ COPY_FIELD(dest, src, luma_shift);
|
|
+ dest->BFV(picture_fields, value) = 0; /* reset all bits */
|
|
+ COPY_BIT_FIELD(dest, src, picture_fields, picture_type);
|
|
+ COPY_BIT_FIELD(dest, src, picture_fields, frame_coding_mode);
|
|
+ COPY_BIT_FIELD(dest, src, picture_fields, top_field_first);
|
|
+ COPY_BIT_FIELD(dest, src, picture_fields, is_first_field);
|
|
+ COPY_BIT_FIELD(dest, src, picture_fields, intensity_compensation);
|
|
+ dest->BFV(M_raw_coding, value) = 0; /* reset all bits */
|
|
+ COPY_BIT_FLAG(dest, src, raw_coding, mv_type_mb);
|
|
+ COPY_BIT_FLAG(dest, src, raw_coding, direct_mb);
|
|
+ COPY_BIT_FLAG(dest, src, raw_coding, skip_mb);
|
|
+ COPY_BIT_FLAG(dest, src, raw_coding, field_tx);
|
|
+ COPY_BIT_FLAG(dest, src, raw_coding, forward_mb);
|
|
+ COPY_BIT_FLAG(dest, src, raw_coding, ac_pred);
|
|
+ COPY_BIT_FLAG(dest, src, raw_coding, overflags);
|
|
+ dest->BFV(M_bitplane_present, value) = 0; /* reset all bits */
|
|
+ COPY_BIT_FLAG(dest, src, bitplane_present, bp_mv_type_mb);
|
|
+ COPY_BIT_FLAG(dest, src, bitplane_present, bp_direct_mb);
|
|
+ COPY_BIT_FLAG(dest, src, bitplane_present, bp_skip_mb);
|
|
+ COPY_BIT_FLAG(dest, src, bitplane_present, bp_field_tx);
|
|
+ COPY_BIT_FLAG(dest, src, bitplane_present, bp_forward_mb);
|
|
+ COPY_BIT_FLAG(dest, src, bitplane_present, bp_ac_pred);
|
|
+ COPY_BIT_FLAG(dest, src, bitplane_present, bp_overflags);
|
|
+ dest->BFV(reference_fields, value) = 0; /* reset all bits */
|
|
+ COPY_BIT_FIELD(dest, src, reference_fields, reference_distance_flag);
|
|
+ COPY_BIT_FIELD(dest, src, reference_fields, reference_distance);
|
|
+ COPY_BIT_FIELD(dest, src, reference_fields, num_reference_pictures);
|
|
+ COPY_BIT_FIELD(dest, src, reference_fields, reference_field_pic_indicator);
|
|
+ dest->BFV(mv_fields, value) = 0; /* reset all bits */
|
|
+ COPY_BIT_FIELD(dest, src, mv_fields, mv_mode);
|
|
+ COPY_BIT_FIELD(dest, src, mv_fields, mv_mode2);
|
|
+ COPY_BIT_FIELD(dest, src, mv_fields, mv_table);
|
|
+ COPY_BIT_FIELD(dest, src, mv_fields, two_mv_block_pattern_table);
|
|
+ COPY_BIT_FIELD(dest, src, mv_fields, four_mv_switch);
|
|
+ COPY_BIT_FIELD(dest, src, mv_fields, four_mv_block_pattern_table);
|
|
+ COPY_BIT_FIELD(dest, src, mv_fields, extended_mv_flag);
|
|
+ COPY_BIT_FIELD(dest, src, mv_fields, extended_mv_range);
|
|
+ COPY_BIT_FIELD(dest, src, mv_fields, extended_dmv_flag);
|
|
+ COPY_BIT_FIELD(dest, src, mv_fields, extended_dmv_range);
|
|
+ dest->BFV(pic_quantizer_fields, value) = 0; /* reset all bits */
|
|
+ COPY_BIT_FIELD(dest, src, pic_quantizer_fields, dquant);
|
|
+ COPY_BIT_FIELD(dest, src, pic_quantizer_fields, quantizer);
|
|
+ COPY_BIT_FIELD(dest, src, pic_quantizer_fields, half_qp);
|
|
+ COPY_BIT_FIELD(dest, src, pic_quantizer_fields, pic_quantizer_scale);
|
|
+ COPY_BIT_FIELD(dest, src, pic_quantizer_fields, pic_quantizer_type);
|
|
+ COPY_BIT_FIELD(dest, src, pic_quantizer_fields, dq_frame);
|
|
+ COPY_BIT_FIELD(dest, src, pic_quantizer_fields, dq_profile);
|
|
+ COPY_BIT_FIELD(dest, src, pic_quantizer_fields, dq_sb_edge);
|
|
+ COPY_BIT_FIELD(dest, src, pic_quantizer_fields, dq_db_edge);
|
|
+ COPY_BIT_FIELD(dest, src, pic_quantizer_fields, dq_binary_level);
|
|
+ COPY_BIT_FIELD(dest, src, pic_quantizer_fields, alt_pic_quantizer);
|
|
+ dest->BFV(transform_fields, value) = 0; /* reset all bits */
|
|
+ COPY_BIT_FIELD(dest, src, transform_fields, variable_sized_transform_flag);
|
|
+ COPY_BIT_FIELD(dest, src, transform_fields, mb_level_transform_type_flag);
|
|
+ COPY_BIT_FIELD(dest, src, transform_fields, frame_level_transform_type);
|
|
+ COPY_BIT_FIELD(dest, src, transform_fields, transform_ac_codingset_idx1);
|
|
+ COPY_BIT_FIELD(dest, src, transform_fields, transform_ac_codingset_idx2);
|
|
+ COPY_BIT_FIELD(dest, src, transform_fields, intra_transform_dc_table);
|
|
+
|
|
+ if (src->picture_fields.bits.picture_type == 4) {
|
|
+ dest->BFM(picture_fields, bits, picture_type) = 1; /* P-frame */
|
|
+ ctx->skip_frame = 1;
|
|
+ }
|
|
+
|
|
+ return VA_STATUS_SUCCESS;
|
|
+}
|
|
+
|
|
+static VAStatus TRANSLATE(PictureParameter,MPEG2)(
|
|
+ VACompatContextP ctx,
|
|
+ void *dest_buffer,
|
|
+ const void *src_buffer
|
|
+)
|
|
+{
|
|
+ STRUCT(PictureParameter,MPEG2) *dest = dest_buffer;
|
|
+ const VAPictureParameterBufferMPEG2 *src = src_buffer;
|
|
+
|
|
+ COPY_FIELD(dest, src, horizontal_size);
|
|
+ COPY_FIELD(dest, src, vertical_size);
|
|
+ COPY_FIELD(dest, src, forward_reference_picture);
|
|
+ COPY_FIELD(dest, src, backward_reference_picture);
|
|
+ COPY_FIELD(dest, src, picture_coding_type);
|
|
+ COPY_FIELD(dest, src, f_code);
|
|
+ dest->BFV(picture_coding_extension, value) = 0; /* reset all bits */
|
|
+ COPY_BIT_FIELD(dest, src, picture_coding_extension, intra_dc_precision);
|
|
+ COPY_BIT_FIELD(dest, src, picture_coding_extension, picture_structure);
|
|
+ COPY_BIT_FIELD(dest, src, picture_coding_extension, top_field_first);
|
|
+ COPY_BIT_FIELD(dest, src, picture_coding_extension, frame_pred_frame_dct);
|
|
+ COPY_BIT_FIELD(dest, src, picture_coding_extension, concealment_motion_vectors);
|
|
+ COPY_BIT_FIELD(dest, src, picture_coding_extension, q_scale_type);
|
|
+ COPY_BIT_FIELD(dest, src, picture_coding_extension, intra_vlc_format);
|
|
+ COPY_BIT_FIELD(dest, src, picture_coding_extension, alternate_scan);
|
|
+ COPY_BIT_FIELD(dest, src, picture_coding_extension, repeat_first_field);
|
|
+ COPY_BIT_FIELD(dest, src, picture_coding_extension, progressive_frame);
|
|
+ COPY_BIT_FIELD(dest, src, picture_coding_extension, is_first_field);
|
|
+
|
|
+ return VA_STATUS_SUCCESS;
|
|
+}
|
|
+
|
|
+static VAStatus TRANSLATE(SliceParameter,MPEG2)(
|
|
+ VACompatContextP ctx,
|
|
+ void *dest_buffer,
|
|
+ const void *src_buffer
|
|
+)
|
|
+{
|
|
+ STRUCT(SliceParameter,MPEG2) *dest = dest_buffer;
|
|
+ const VASliceParameterBufferMPEG2 *src = src_buffer;
|
|
+
|
|
+ COPY_FIELD(dest, src, slice_data_size);
|
|
+ COPY_FIELD(dest, src, slice_data_offset);
|
|
+ COPY_FIELD(dest, src, slice_data_flag);
|
|
+ COPY_FIELD(dest, src, macroblock_offset);
|
|
+ COPY_FIELD(dest, src, slice_vertical_position);
|
|
+ COPY_FIELD(dest, src, quantiser_scale_code);
|
|
+ COPY_FIELD(dest, src, intra_slice_flag);
|
|
+
|
|
+ return VA_STATUS_SUCCESS;
|
|
+}
|
|
+#endif
|
|
+
|
|
+static VAStatus TRANSLATE(PictureParameter,MPEG4)(
|
|
+ VACompatContextP ctx,
|
|
+ void *dest_buffer,
|
|
+ const void *src_buffer
|
|
+)
|
|
+{
|
|
+ STRUCT(PictureParameter,MPEG4) *dest = dest_buffer;
|
|
+ const VAPictureParameterBufferMPEG4 *src = src_buffer;
|
|
+
|
|
+ COPY_FIELD(dest, src, vop_width);
|
|
+ COPY_FIELD(dest, src, vop_height);
|
|
+ COPY_FIELD(dest, src, forward_reference_picture);
|
|
+ COPY_FIELD(dest, src, backward_reference_picture);
|
|
+ dest->BFV(vol_fields, value) = 0; /* reset all bits */
|
|
+ COPY_BIT_FIELD(dest, src, vol_fields, short_video_header);
|
|
+ COPY_BIT_FIELD(dest, src, vol_fields, chroma_format);
|
|
+ COPY_BIT_FIELD(dest, src, vol_fields, interlaced);
|
|
+ COPY_BIT_FIELD(dest, src, vol_fields, obmc_disable);
|
|
+ COPY_BIT_FIELD(dest, src, vol_fields, sprite_enable);
|
|
+ COPY_BIT_FIELD(dest, src, vol_fields, sprite_warping_accuracy);
|
|
+ COPY_BIT_FIELD(dest, src, vol_fields, quant_type);
|
|
+ COPY_BIT_FIELD(dest, src, vol_fields, quarter_sample);
|
|
+ COPY_BIT_FIELD(dest, src, vol_fields, data_partitioned);
|
|
+ COPY_BIT_FIELD(dest, src, vol_fields, reversible_vlc);
|
|
+ COPY_FIELD(dest, src, no_of_sprite_warping_points);
|
|
+ COPY_ARRAY(dest, src, sprite_trajectory_du);
|
|
+ COPY_ARRAY(dest, src, sprite_trajectory_dv);
|
|
+ COPY_FIELD(dest, src, quant_precision);
|
|
+ dest->BFV(vop_fields, value) = 0; /* reset all bits */
|
|
+ COPY_BIT_FIELD(dest, src, vop_fields, vop_coding_type);
|
|
+ COPY_BIT_FIELD(dest, src, vop_fields, backward_reference_vop_coding_type);
|
|
+ COPY_BIT_FIELD(dest, src, vop_fields, vop_rounding_type);
|
|
+ COPY_BIT_FIELD(dest, src, vop_fields, intra_dc_vlc_thr);
|
|
+ COPY_BIT_FIELD(dest, src, vop_fields, top_field_first);
|
|
+ COPY_BIT_FIELD(dest, src, vop_fields, alternate_vertical_scan_flag);
|
|
+ COPY_FIELD(dest, src, vop_fcode_forward);
|
|
+ COPY_FIELD(dest, src, vop_fcode_backward);
|
|
+ COPY_FIELD(dest, src, num_gobs_in_vop);
|
|
+ COPY_FIELD(dest, src, num_macroblocks_in_gob);
|
|
+ COPY_FIELD(dest, src, TRB);
|
|
+ COPY_FIELD(dest, src, TRD);
|
|
+
|
|
+ return VA_STATUS_SUCCESS;
|
|
+}
|
|
+
|
|
+#if COMPAT_MAJOR == 0 && COMPAT_MINOR == 30
|
|
+static VAStatus TRANSLATE_(VAEncSliceParameterBuffer)(
|
|
+ VACompatContextP ctx,
|
|
+ void *dest_buffer,
|
|
+ const void *src_buffer
|
|
+)
|
|
+{
|
|
+ MKCOMPAT(VAEncSliceParameterBuffer) * const dest = dest_buffer;
|
|
+ const VAEncSliceParameterBuffer * const src = src_buffer;
|
|
+
|
|
+ COPY_FIELD(dest, src, start_row_number);
|
|
+ COPY_FIELD(dest, src, slice_height);
|
|
+ dest->BFV(slice_flags, value) = 0; /* reset all bits */
|
|
+ COPY_BIT_FIELD(dest, src, slice_flags, is_intra);
|
|
+ COPY_BIT_FIELD(dest, src, slice_flags, disable_deblocking_filter_idc);
|
|
+
|
|
+ return VA_STATUS_SUCCESS;
|
|
+}
|
|
+#endif
|
|
+
|
|
+static void TRANSLATE_(VADriverContext)(
|
|
+ VACompatContext *dest,
|
|
+ const struct MKCOMPAT(VADriverContext) *src
|
|
+)
|
|
+{
|
|
+ VACompatDriverVTable *dest_vtable = &dest->vtable;
|
|
+ const struct MKCOMPAT(VADriverVTable) *src_vtable = &src->vtable;
|
|
+
|
|
+ memset(dest_vtable, 0, sizeof(*dest_vtable));
|
|
+ COPY_VTABLE(dest, src, vaTerminate);
|
|
+ COPY_VTABLE(dest, src, vaQueryConfigProfiles);
|
|
+ COPY_VTABLE(dest, src, vaQueryConfigEntrypoints);
|
|
+ COPY_VTABLE(dest, src, vaGetConfigAttributes);
|
|
+ COPY_VTABLE(dest, src, vaCreateConfig);
|
|
+ COPY_VTABLE(dest, src, vaDestroyConfig);
|
|
+ COPY_VTABLE(dest, src, vaQueryConfigAttributes);
|
|
+ COPY_VTABLE(dest, src, vaCreateSurfaces);
|
|
+ COPY_VTABLE(dest, src, vaDestroySurfaces);
|
|
+ COPY_VTABLE(dest, src, vaCreateContext);
|
|
+ COPY_VTABLE(dest, src, vaDestroyContext);
|
|
+ COPY_VTABLE(dest, src, vaCreateBuffer);
|
|
+ COPY_VTABLE(dest, src, vaBufferSetNumElements);
|
|
+ COPY_VTABLE(dest, src, vaMapBuffer);
|
|
+ COPY_VTABLE(dest, src, vaUnmapBuffer);
|
|
+ COPY_VTABLE(dest, src, vaDestroyBuffer);
|
|
+ COPY_VTABLE(dest, src, vaBeginPicture);
|
|
+ COPY_VTABLE(dest, src, vaRenderPicture);
|
|
+ COPY_VTABLE(dest, src, vaEndPicture);
|
|
+ COPY_VTABLE(dest, src, vaQuerySurfaceStatus);
|
|
+ COPY_VTABLE(dest, src, vaPutSurface);
|
|
+ COPY_VTABLE(dest, src, vaQueryImageFormats);
|
|
+ COPY_VTABLE(dest, src, vaCreateImage);
|
|
+ COPY_VTABLE(dest, src, vaDeriveImage);
|
|
+ COPY_VTABLE(dest, src, vaDestroyImage);
|
|
+ COPY_VTABLE(dest, src, vaSetImagePalette);
|
|
+ COPY_VTABLE(dest, src, vaGetImage);
|
|
+ COPY_VTABLE(dest, src, vaQuerySubpictureFormats);
|
|
+ COPY_VTABLE(dest, src, vaCreateSubpicture);
|
|
+ COPY_VTABLE(dest, src, vaDestroySubpicture);
|
|
+ COPY_VTABLE(dest, src, vaSetSubpictureImage);
|
|
+ COPY_VTABLE(dest, src, vaSetSubpictureChromakey);
|
|
+ COPY_VTABLE(dest, src, vaSetSubpictureGlobalAlpha);
|
|
+ COPY_VTABLE(dest, src, vaDeassociateSubpicture);
|
|
+ COPY_VTABLE(dest, src, vaQueryDisplayAttributes);
|
|
+ COPY_VTABLE(dest, src, vaGetDisplayAttributes);
|
|
+ COPY_VTABLE(dest, src, vaSetDisplayAttributes);
|
|
+#if COMPAT_MAJOR == 0 && COMPAT_MINOR <= 29
|
|
+ COPY_VTABLE(dest, src, vaSetSubpicturePalette);
|
|
+ COPY_VTABLE(dest, src, vaDbgCopySurfaceToBuffer);
|
|
+#endif
|
|
+#if COMPAT_MAJOR == 0 && COMPAT_MINOR >= 30
|
|
+ COPY_VTABLE(dest, src, vaCreateSurfaceFromCIFrame);
|
|
+ COPY_VTABLE(dest, src, vaCreateSurfaceFromV4L2Buf);
|
|
+ COPY_VTABLE(dest, src, vaCopySurfaceToBuffer);
|
|
+#endif
|
|
+#if COMPAT_MAJOR == 0 && COMPAT_MINOR >= 31
|
|
+ COPY_VTABLE(dest, src, vaSyncSurface);
|
|
+ COPY_VTABLE(dest, src, vaPutImage);
|
|
+ COPY_VTABLE(dest, src, vaAssociateSubpicture);
|
|
+#else
|
|
+ COPY_VTABLE_(dest, pre31, src, vaSyncSurface);
|
|
+ COPY_VTABLE_(dest, pre31, src, vaPutImage);
|
|
+ COPY_VTABLE_(dest, pre31, src, vaPutImage2);
|
|
+ COPY_VTABLE_(dest, pre31, src, vaAssociateSubpicture);
|
|
+ COPY_VTABLE_(dest, pre31, src, vaAssociateSubpicture2);
|
|
+#endif
|
|
+}
|
|
+
|
|
+#undef COMPAT_MAJOR
|
|
+#undef COMPAT_MINOR
|