From: Xiang, Haihao Date: Wed, 9 Nov 2011 08:32:51 +0000 (+0800) Subject: New hooks to create/free native pixmap X-Git-Tag: libva-1.1.0~103 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=731d575b238238e90d576692af82f74d47c1ae77;p=platform%2Fupstream%2Flibva.git New hooks to create/free native pixmap Signed-off-by: Xiang, Haihao --- diff --git a/va/va_backend.h b/va/va_backend.h index 9b47cae..22f1765 100644 --- a/va/va_backend.h +++ b/va/va_backend.h @@ -459,6 +459,16 @@ struct VADisplayContext ); void *opaque; /* opaque for display extensions (e.g. GLX) */ + + VAStatus (*vaCreateNativePixmap) ( + VADisplayContextP pDisplayContext, + unsigned int width, + unsigned int height, + void **native_pixmap); + + VAStatus (*vaFreeNativePixmap) ( + VADisplayContextP pDisplayContext, + void *native_pixmap); }; typedef VAStatus (*VADriverInit) ( diff --git a/va/x11/va_x11.c b/va/x11/va_x11.c index b51f5f0..036499c 100644 --- a/va/x11/va_x11.c +++ b/va/x11/va_x11.c @@ -161,6 +161,47 @@ static VAStatus va_DisplayContextGetDriverName ( return vaStatus; } +static VAStatus va_CreateNativePixmap( + VADisplayContextP pDisplayContext, + unsigned int width, + unsigned int height, + void **native_pixmap) +{ + VADriverContextP ctx = pDisplayContext->pDriverContext; + Window root_window; + XWindowAttributes wattr; + Pixmap pixmap = None; + + root_window = RootWindow(ctx->native_dpy, ctx->x11_screen); + XGetWindowAttributes(ctx->native_dpy, root_window, &wattr); + + if (wattr.depth != 24 && wattr.depth != 32) + return VA_STATUS_ERROR_INVALID_DISPLAY; + + pixmap = XCreatePixmap( + ctx->native_dpy, + root_window, + width, + height, + wattr.depth + ); + + *native_pixmap = (void *)pixmap; + + return !pixmap ? VA_STATUS_ERROR_UNKNOWN : VA_STATUS_SUCCESS; +} + +static VAStatus va_FreeNativePixmap( + VADisplayContextP pDisplayContext, + void *native_pixmap) +{ + VADriverContextP ctx = pDisplayContext->pDriverContext; + Pixmap pixmap = (Pixmap)native_pixmap; + + XFreePixmap(ctx->native_dpy, pixmap); + + return VA_STATUS_SUCCESS; +} VADisplay vaGetDisplay ( VANativeDisplay native_dpy /* implementation specific */ @@ -190,6 +231,8 @@ VADisplay vaGetDisplay ( pDisplayContext->vaDestroy = va_DisplayContextDestroy; pDisplayContext->vaGetDriverName = va_DisplayContextGetDriverName; pDisplayContext->opaque = NULL; + pDisplayContext->vaCreateNativePixmap = va_CreateNativePixmap; + pDisplayContext->vaFreeNativePixmap = va_FreeNativePixmap; pDriverContext->dri_state = dri_state; dpy = (VADisplay)pDisplayContext; }