From 4cc9a74bd82e9b1c5cfe7fc5fce056a01b99ecdb Mon Sep 17 00:00:00 2001 From: Mark Thompson Date: Mon, 2 Oct 2017 23:49:33 +0100 Subject: [PATCH] Move driver context allocation to common code This will be required to set common options on a newly-created driver context. Signed-off-by: Mark Thompson --- va/android/va_android.cpp | 59 ++++++++++++++++++------------------- va/drm/va_drm.c | 19 ++++++------ va/va.c | 11 +++++++ va/va_internal.h | 2 ++ va/wayland/va_wayland.c | 3 +- va/x11/va_x11.c | 74 ++++++++++++++++++++++------------------------- 6 files changed, 87 insertions(+), 81 deletions(-) diff --git a/va/android/va_android.cpp b/va/android/va_android.cpp index ae96236..4a8fe9f 100644 --- a/va/android/va_android.cpp +++ b/va/android/va_android.cpp @@ -125,43 +125,40 @@ VADisplay vaGetDisplay ( void *native_dpy /* implementation specific */ ) { - VADisplay dpy = NULL; VADisplayContextP pDisplayContext; + VADriverContextP pDriverContext; + struct drm_state *drm_state; if (!native_dpy) return NULL; - if (!dpy) - { - /* create new entry */ - VADriverContextP pDriverContext = 0; - struct drm_state *drm_state = 0; - pDisplayContext = va_newDisplayContext(); - pDriverContext = (VADriverContextP)calloc(1, sizeof(*pDriverContext)); - drm_state = (struct drm_state*)calloc(1, sizeof(*drm_state)); - if (pDisplayContext && pDriverContext && drm_state) - { - pDriverContext->native_dpy = (void *)native_dpy; - pDriverContext->display_type = VA_DISPLAY_ANDROID; - pDisplayContext->pDriverContext = pDriverContext; - pDisplayContext->vaIsValid = va_DisplayContextIsValid; - pDisplayContext->vaDestroy = va_DisplayContextDestroy; - pDisplayContext->vaGetDriverName = va_DisplayContextGetDriverName; - pDriverContext->drm_state = drm_state; - dpy = (VADisplay)pDisplayContext; - } - else - { - if (pDisplayContext) - free(pDisplayContext); - if (pDriverContext) - free(pDriverContext); - if (drm_state) - free(drm_state); - } + pDisplayContext = va_newDisplayContext(); + if (!pDisplayContext) + return NULL; + + pDisplayContext->vaIsValid = va_DisplayContextIsValid; + pDisplayContext->vaDestroy = va_DisplayContextDestroy; + pDisplayContext->vaGetDriverName = va_DisplayContextGetDriverName; + + pDriverContext = va_newDriverContext(pDisplayContext); + if (!pDriverContext) { + free(pDisplayContext); + return NULL; } - - return dpy; + + pDriverContext->native_dpy = (void *)native_dpy; + pDriverContext->display_type = VA_DISPLAY_ANDROID + + drm_state = calloc(1, sizeof(*drm_state)); + if (!drm_state) { + free(pDisplayContext); + free(pDriverContext); + return NULL; + } + + pDriverContext->drm_state = drm_state; + + return (VADisplay)pDisplayContext; } diff --git a/va/drm/va_drm.c b/va/drm/va_drm.c index bccd108..b406e68 100644 --- a/va/drm/va_drm.c +++ b/va/drm/va_drm.c @@ -102,22 +102,23 @@ vaGetDisplayDRM(int fd) goto error; drm_state->fd = fd; - pDriverContext = calloc(1, sizeof(*pDriverContext)); - if (!pDriverContext) - goto error; - pDriverContext->native_dpy = NULL; - pDriverContext->display_type = is_render_nodes ? - VA_DISPLAY_DRM_RENDERNODES : VA_DISPLAY_DRM; - pDriverContext->drm_state = drm_state; - pDisplayContext = va_newDisplayContext(); if (!pDisplayContext) goto error; - pDisplayContext->pDriverContext = pDriverContext; pDisplayContext->vaIsValid = va_DisplayContextIsValid; pDisplayContext->vaDestroy = va_DisplayContextDestroy; pDisplayContext->vaGetDriverName = va_DisplayContextGetDriverName; + + pDriverContext = va_newDriverContext(pDisplayContext); + if (!pDriverContext) + goto error; + + pDriverContext->native_dpy = NULL; + pDriverContext->display_type = is_render_nodes ? + VA_DISPLAY_DRM_RENDERNODES : VA_DISPLAY_DRM; + pDriverContext->drm_state = drm_state; + return pDisplayContext; error: diff --git a/va/va.c b/va/va.c index 819bef1..257b241 100644 --- a/va/va.c +++ b/va/va.c @@ -275,6 +275,17 @@ VADisplayContextP va_newDisplayContext(void) return dctx; } +VADriverContextP va_newDriverContext(VADisplayContextP dctx) +{ + VADriverContextP ctx = calloc(1, sizeof(*ctx)); + if (!ctx) + return NULL; + + dctx->pDriverContext = ctx; + + return ctx; +} + static bool va_checkVtable(VADisplay dpy, void *ptr, char *function) { if (!ptr) { diff --git a/va/va_internal.h b/va/va_internal.h index 7b8da55..cc909c1 100644 --- a/va/va_internal.h +++ b/va/va_internal.h @@ -39,6 +39,8 @@ int va_parseConfig(char *env, char *env_value); VADisplayContextP va_newDisplayContext(void); +VADriverContextP va_newDriverContext(VADisplayContextP dctx); + #ifdef __cplusplus } #endif diff --git a/va/wayland/va_wayland.c b/va/wayland/va_wayland.c index f7ddfe8..86ae6ac 100644 --- a/va/wayland/va_wayland.c +++ b/va/wayland/va_wayland.c @@ -129,10 +129,9 @@ vaGetDisplayWl(struct wl_display *display) pDisplayContext->vaDestroy = va_DisplayContextDestroy; pDisplayContext->vaGetDriverName = va_DisplayContextGetDriverName; - pDriverContext = calloc(1, sizeof(*pDriverContext)); + pDriverContext = va_newDriverContext(pDisplayContext); if (!pDriverContext) goto error; - pDisplayContext->pDriverContext = pDriverContext; pDriverContext->native_dpy = display; pDriverContext->display_type = VA_DISPLAY_WAYLAND; diff --git a/va/x11/va_x11.c b/va/x11/va_x11.c index ed06826..c40c8c4 100644 --- a/va/x11/va_x11.c +++ b/va/x11/va_x11.c @@ -153,45 +153,41 @@ VADisplay vaGetDisplay ( Display *native_dpy /* implementation specific */ ) { - VADisplay dpy = NULL; - VADisplayContextP pDisplayContext; - - if (!native_dpy) - return NULL; - - if (!dpy) - { - /* create new entry */ - VADriverContextP pDriverContext; - struct dri_state *dri_state; - pDisplayContext = va_newDisplayContext(); - pDriverContext = calloc(1, sizeof(*pDriverContext)); - dri_state = calloc(1, sizeof(*dri_state)); - if (pDisplayContext && pDriverContext && dri_state) - { - pDriverContext->native_dpy = (void *)native_dpy; - pDriverContext->x11_screen = XDefaultScreen(native_dpy); - pDriverContext->display_type = VA_DISPLAY_X11; - pDisplayContext->pDriverContext = pDriverContext; - pDisplayContext->vaIsValid = va_DisplayContextIsValid; - pDisplayContext->vaDestroy = va_DisplayContextDestroy; - pDisplayContext->vaGetDriverName = va_DisplayContextGetDriverName; - pDisplayContext->opaque = NULL; - pDriverContext->drm_state = dri_state; - dpy = (VADisplay)pDisplayContext; - } - else - { - if (pDisplayContext) - free(pDisplayContext); - if (pDriverContext) - free(pDriverContext); - if (dri_state) - free(dri_state); - } - } - - return dpy; + VADisplayContextP pDisplayContext; + VADriverContextP pDriverContext; + struct dri_state *dri_state; + + if (!native_dpy) + return NULL; + + pDisplayContext = va_newDisplayContext(); + if (!pDisplayContext) + return NULL; + + pDisplayContext->vaIsValid = va_DisplayContextIsValid; + pDisplayContext->vaDestroy = va_DisplayContextDestroy; + pDisplayContext->vaGetDriverName = va_DisplayContextGetDriverName; + + pDriverContext = va_newDriverContext(pDisplayContext); + if (!pDriverContext) { + free(pDisplayContext); + return NULL; + } + + pDriverContext->native_dpy = (void *)native_dpy; + pDriverContext->x11_screen = XDefaultScreen(native_dpy); + pDriverContext->display_type = VA_DISPLAY_X11; + + dri_state = calloc(1, sizeof(*dri_state)); + if (!dri_state) { + free(pDisplayContext); + free(pDriverContext); + return NULL; + } + + pDriverContext->drm_state = dri_state; + + return (VADisplay)pDisplayContext; } -- 2.11.0