summaryrefslogtreecommitdiff
path: root/va/egl/va_egl.c
diff options
context:
space:
mode:
Diffstat (limited to 'va/egl/va_egl.c')
-rw-r--r--va/egl/va_egl.c240
1 files changed, 4 insertions, 236 deletions
diff --git a/va/egl/va_egl.c b/va/egl/va_egl.c
index 48ff7a1..36e5504 100644
--- a/va/egl/va_egl.c
+++ b/va/egl/va_egl.c
@@ -53,34 +53,14 @@
*
* Bellow API vaGetEGLClientBufferFromSurface is for this purpose
*/
-#include "va_egl_private.h"
-#include "va_egl_impl.h"
+
+#include "va.h"
+#include "va_backend_egl.h"
+#include "va_egl.h"
#define CTX(dpy) (((VADisplayContextP)dpy)->pDriverContext)
#define CHECK_DISPLAY(dpy) if( !vaDisplayIsValid(dpy) ) { return VA_STATUS_ERROR_INVALID_DISPLAY; }
-#define INIT_CONTEXT(ctx, dpy) do { \
- if (!vaDisplayIsValid(dpy)) \
- return VA_STATUS_ERROR_INVALID_DISPLAY; \
- \
- ctx = ((VADisplayContextP)(dpy))->pDriverContext; \
- if (!(ctx)) \
- return VA_STATUS_ERROR_INVALID_DISPLAY; \
- \
- status = va_egl_init_context(dpy); \
- if (status != VA_STATUS_SUCCESS) \
- return status; \
- } while (0)
-
-#define INVOKE(ctx, func, args) do { \
- VADriverVTablePrivEGLP vtable; \
- vtable = &VA_DRIVER_CONTEXT_EGL(ctx)->vtable; \
- if (!vtable->va##func##EGL) \
- return VA_STATUS_ERROR_UNIMPLEMENTED; \
- status = vtable->va##func##EGL args; \
- } while (0)
-
-
VAStatus vaGetEGLClientBufferFromSurface (
VADisplay dpy,
VASurfaceID surface,
@@ -99,216 +79,4 @@ VAStatus vaGetEGLClientBufferFromSurface (
return VA_STATUS_ERROR_UNIMPLEMENTED;
}
-// Destroy VA/EGL display context
-static void va_DisplayContextDestroy(VADisplayContextP pDisplayContext)
-{
- VADisplayContextEGLP pDisplayContextEGL;
- VADriverContextP pDriverContext;
- VADriverContextEGLP pDriverContextEGL;
-
- if (!pDisplayContext)
- return;
-
- pDriverContext = pDisplayContext->pDriverContext;
- pDriverContextEGL = pDriverContext->egl;
- if (pDriverContextEGL) {
- free(pDriverContextEGL);
- pDriverContext->egl = NULL;
- }
-
- pDisplayContextEGL = pDisplayContext->opaque;
- if (pDisplayContextEGL) {
- vaDestroyFunc vaDestroy = pDisplayContextEGL->vaDestroy;
- free(pDisplayContextEGL);
- pDisplayContext->opaque = NULL;
- if (vaDestroy)
- vaDestroy(pDisplayContext);
- }
-}
-
-// Return a suitable VADisplay for VA API
-VADisplay vaGetDisplayEGL(VANativeDisplay native_dpy,
- EGLDisplay egl_dpy)
-{
- VADisplay dpy = NULL;
- VADisplayContextP pDisplayContext = NULL;
- VADisplayContextEGLP pDisplayContextEGL = NULL;
- VADriverContextP pDriverContext;
- VADriverContextEGLP pDriverContextEGL = NULL;
-
- dpy = vaGetDisplay(native_dpy);
-
- if (!dpy)
- return NULL;
-
- if (egl_dpy == EGL_NO_DISPLAY)
- goto error;
-
- pDisplayContext = (VADisplayContextP)dpy;
- pDriverContext = pDisplayContext->pDriverContext;
-
- pDisplayContextEGL = calloc(1, sizeof(*pDisplayContextEGL));
- if (!pDisplayContextEGL)
- goto error;
-
- pDriverContextEGL = calloc(1, sizeof(*pDriverContextEGL));
- if (!pDriverContextEGL)
- goto error;
-
- pDisplayContextEGL->vaDestroy = pDisplayContext->vaDestroy;
- pDisplayContext->vaDestroy = va_DisplayContextDestroy;
- pDisplayContext->opaque = pDisplayContextEGL;
- pDriverContextEGL->egl_display = egl_dpy;
- pDriverContext->egl = pDriverContextEGL;
- return dpy;
-
-error:
- free(pDriverContextEGL);
- free(pDisplayContextEGL);
- pDisplayContext->vaDestroy(pDisplayContext);
- return NULL;
-}
-
-int vaMaxNumSurfaceTargetsEGL(
- VADisplay dpy
-)
-{
- VADriverContextP ctx;
- struct VADriverVTableEGL *va_egl;
- CHECK_DISPLAY(dpy);
- ctx = CTX(dpy);
-
- va_egl = (struct VADriverVTableEGL *)ctx->vtable_egl;
-
- if (va_egl)
- return va_egl->max_egl_surface_targets;
- else
- return IMPL_MAX_EGL_SURFACE_TARGETS;
-}
-
-int vaMaxNumSurfaceAttributesEGL(
- VADisplay dpy
-)
-{
- VADriverContextP ctx;
- struct VADriverVTableEGL *va_egl;
- CHECK_DISPLAY(dpy);
- ctx = CTX(dpy);
-
- va_egl = (struct VADriverVTableEGL *)ctx->vtable_egl;
-
- if (va_egl)
- return va_egl->max_egl_surface_attributes;
- else
- return IMPL_MAX_EGL_SURFACE_ATTRIBUTES;
-}
-
-VAStatus vaQuerySurfaceTargetsEGL(
- VADisplay dpy,
- EGLenum *target_list, /* out */
- int *num_targets /* out */
-)
-{
- VADriverContextP ctx;
- VAStatus status;
-
- INIT_CONTEXT(ctx, dpy);
-
- INVOKE(ctx, QuerySurfaceTargets, (dpy, target_list, num_targets));
- return status;
-}
-
-VAStatus vaCreateSurfaceEGL(
- VADisplay dpy,
- EGLenum target,
- unsigned int width,
- unsigned int height,
- VASurfaceEGL *gl_surface
-)
-{
- VADriverContextP ctx;
- VAStatus status;
-
- INIT_CONTEXT(ctx, dpy);
-
- INVOKE(ctx, CreateSurface, (dpy, target, width, height, gl_surface));
- return status;
-}
-
-// Destroy a VA/EGL surface
-VAStatus vaDestroySurfaceEGL(
- VADisplay dpy,
- VASurfaceEGL egl_surface
-)
-{
- VADriverContextP ctx;
- VAStatus status;
-
- INIT_CONTEXT(ctx, dpy);
-
- INVOKE(ctx, DestroySurface, (dpy, egl_surface));
- return status;
-}
-
-VAStatus vaAssociateSurfaceEGL(
- VADisplay dpy,
- VASurfaceEGL egl_surface,
- VASurfaceID surface,
- unsigned int flags
-)
-{
- VADriverContextP ctx;
- VAStatus status;
-
- INIT_CONTEXT(ctx, dpy);
-
- INVOKE(ctx, AssociateSurface, (dpy, egl_surface, surface, flags));
- return status;
-}
-
-VAStatus vaSyncSurfaceEGL(
- VADisplay dpy,
- VASurfaceEGL egl_surface
-)
-{
- VADriverContextP ctx;
- VAStatus status;
-
- INIT_CONTEXT(ctx, dpy);
-
- INVOKE(ctx, SyncSurface, (dpy, egl_surface));
- return status;
-}
-
-VAStatus vaGetSurfaceInfoEGL(
- VADisplay dpy,
- VASurfaceEGL egl_surface,
- EGLenum *target, /* out, the type of <buffer> */
- EGLClientBuffer *buffer, /* out */
- EGLint *attrib_list, /* out, the last attribute must be EGL_NONE */
- int *num_attribs /* in/out */
-)
-{
- VADriverContextP ctx;
- VAStatus status;
-
- INIT_CONTEXT(ctx, dpy);
-
- INVOKE(ctx, GetSurfaceInfo, (dpy, egl_surface, target, buffer, attrib_list, num_attribs));
- return status;
-}
-
-VAStatus vaDeassociateSurfaceEGL(
- VADisplay dpy,
- VASurfaceEGL egl_surface
-)
-{
- VADriverContextP ctx;
- VAStatus status;
-
- INIT_CONTEXT(ctx, dpy);
-
- INVOKE(ctx, DeassociateSurface, (dpy, egl_surface));
- return status;
-}