From 0ea43daae2db5fbfcb4c412853d763f77328414b Mon Sep 17 00:00:00 2001 From: Austin Yuan Date: Fri, 16 Apr 2010 05:36:59 +0800 Subject: [PATCH] save Signed-off-by: Austin Yuan --- configure.ac | 1 + va/Makefile.am | 2 +- va/android/va_android.c | 38 ++++++++++++++++++++++++++++++++------ va/va_android.h | 46 +++++++++++++++++++++++++++------------------- 4 files changed, 61 insertions(+), 26 deletions(-) diff --git a/configure.ac b/configure.ac index a59fa2b..9bb2db8 100644 --- a/configure.ac +++ b/configure.ac @@ -119,6 +119,7 @@ AC_OUTPUT([ va/Makefile va/va_version.h va/x11/Makefile + va/android/Makefile dummy_drv_video/Makefile i965_drv_video/Makefile i965_drv_video/shaders/Makefile diff --git a/va/Makefile.am b/va/Makefile.am index fd94382..2c89cfa 100644 --- a/va/Makefile.am +++ b/va/Makefile.am @@ -40,7 +40,7 @@ libva_x11_la_LIBADD = $(libvacorelib) x11/libva_x11.la $(LIBVA_LIBS) $(X11_LIBS libva_x11_la_LDFLAGS = $(LDADD) libva_x11_la_DEPENDENCIES = $(libvacorelib) x11/libva_x11.la -SUBDIRS = x11 +SUBDIRS = x11 android libva_la_SOURCES = va.c va_trace.c diff --git a/va/android/va_android.c b/va/android/va_android.c index c7176c9..f3ae345 100644 --- a/va/android/va_android.c +++ b/va/android/va_android.c @@ -26,6 +26,7 @@ #include "va.h" #include "va_backend.h" #include "va_android.h" +#include "va_dricommon.h" #include #include #include @@ -36,6 +37,7 @@ #include #include + static VADisplayContextP pDisplayContexts = NULL; static int va_DisplayContextIsValid ( @@ -70,6 +72,7 @@ static void va_DisplayContextDestroy ( } ctx = &((*ctx)->pNext); } + free(pDisplayContext->pDriverContext->dri_state); free(pDisplayContext->pDriverContext); free(pDisplayContext); } @@ -79,8 +82,11 @@ static VAStatus va_DisplayContextGetDriverName ( VADisplayContextP pDisplayContext, char **driver_name ) -{ +{ + VADriverContextP ctx = pDisplayContext->pDriverContext; + struct dri_state *dri_state = (struct dri_state *)ctx->dri_state; char *driver_name_env; + struct { unsigned int verndor_id; unsigned int device_id; @@ -89,17 +95,29 @@ static VAStatus va_DisplayContextGetDriverName ( { 0x8086, 0x4100, "pvr" }, }; - if (driver_name) - *driver_name = NULL; + memset(dri_state, 0, sizeof(*dri_state)); + dri_state->fd = drm_open_any_master(); + if (dri_state->fd < 0) + return VA_STATUS_ERROR_UNKNOWN; + + if ((driver_name_env = getenv("LIBVA_DRIVER_NAME")) != NULL + && geteuid() == getuid()) + { + /* don't allow setuid apps to use LIBVA_DRIVER_NAME */ + *driver_name = strdup(driver_name_env); + return VA_STATUS_SUCCESS; + } else /* TBD: other vendor driver names */ + *driver_name = strdup(devices[0].driver_name); - *driver_name = strdup(devices[0].driver_name); + + dri_state->driConnectedFlag = VA_DRI2; return VA_STATUS_SUCCESS; } VADisplay vaGetDisplay ( - Display *native_dpy /* implementation specific */ + void *native_dpy /* implementation specific */ ) { VADisplay dpy = NULL; @@ -123,9 +141,12 @@ VADisplay vaGetDisplay ( { /* create new entry */ VADriverContextP pDriverContext; + struct dri_state *dri_state; pDisplayContext = (VADisplayContextP)calloc(1, sizeof(*pDisplayContext)); pDriverContext = (VADriverContextP)calloc(1, sizeof(*pDriverContext)); - if (pDisplayContext && pDriverContext) + dri_state = calloc(1, sizeof(*dri_state)); + + if (pDisplayContext && pDriverContext && dri_state) { pDisplayContext->vadpy_magic = VA_DISPLAY_MAGIC; @@ -136,6 +157,7 @@ VADisplay vaGetDisplay ( pDisplayContext->vaDestroy = va_DisplayContextDestroy; pDisplayContext->vaGetDriverName = va_DisplayContextGetDriverName; pDisplayContexts = pDisplayContext; + pDriverContext->dri_state = dri_state; dpy = (VADisplay)pDisplayContext; } else @@ -144,6 +166,8 @@ VADisplay vaGetDisplay ( free(pDisplayContext); if (pDriverContext) free(pDriverContext); + if (dri_state) + free(dri_state); } } @@ -160,6 +184,7 @@ static int vaDisplayIsValid(VADisplay dpy) return pDisplayContext && (pDisplayContext->vadpy_magic == VA_DISPLAY_MAGIC) && pDisplayContext->vaIsValid(pDisplayContext); } +#ifdef ANDROID VAStatus vaPutSurface ( VADisplay dpy, VASurfaceID surface, @@ -214,3 +239,4 @@ VAStatus vaPutSurfaceBuf ( return ctx->vtable.vaPutSurfaceBuf( ctx, surface, draw, data, data_len, srcx, srcy, srcw, srch, destx, desty, destw, desth, cliprects, number_cliprects, flags ); } +#endif diff --git a/va/va_android.h b/va/va_android.h index eefe4f4..4b92c88 100644 --- a/va/va_android.h +++ b/va/va_android.h @@ -2,13 +2,13 @@ #define _VA_ANDROID_H_ #include -#include -class Surface; + #ifdef __cplusplus extern "C" { #endif + /* * Returns a suitable VADisplay for VA API */ @@ -16,6 +16,11 @@ VADisplay vaGetDisplay ( void *dpy ); +#ifdef ANDROID + +#include +class Surface; + /* * Output rendering * Following is the rendering interface for X windows, @@ -42,23 +47,26 @@ VAStatus vaPutSurface ( ); VAStatus vaPutSurfaceBuf ( - VADriverContextP ctx, - VASurfaceID surface, - Drawable draw, /* X Drawable */ - unsigned char* data, - int* data_len, - short srcx, - short srcy, - unsigned short srcw, - unsigned short srch, - short destx, - short desty, - unsigned short destw, - unsigned short desth, - VARectangle *cliprects, /* client supplied clip list */ - unsigned int number_cliprects, /* number of clip rects in the clip list */ - unsigned int flags /* de-interlacing flags */ - ); + VADriverContextP ctx, + VASurfaceID surface, + Drawable draw, /* X Drawable */ + unsigned char* data, + int* data_len, + short srcx, + short srcy, + unsigned short srcw, + unsigned short srch, + short destx, + short desty, + unsigned short destw, + unsigned short desth, + VARectangle *cliprects, /* client supplied clip list */ + unsigned int number_cliprects, /* number of clip rects in the clip list */ + unsigned int flags /* de-interlacing flags */ +); + +#endif + #ifdef __cplusplus } #endif -- 2.7.4