diff options
author | Mark Thompson <sw@jkqxz.net> | 2017-10-02 23:49:33 +0100 |
---|---|---|
committer | Xiang, Haihao <haihao.xiang@intel.com> | 2017-11-21 21:38:52 -0800 |
commit | 4cc9a74bd82e9b1c5cfe7fc5fce056a01b99ecdb (patch) | |
tree | 75ab72891e8f7910b02ae0d86a684e14bec1e1dd | |
parent | cff70165e08ab3372487d619564590abf6fbfb04 (diff) | |
download | libva-4cc9a74bd82e9b1c5cfe7fc5fce056a01b99ecdb.tar.gz |
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 <sw@jkqxz.net>
-rw-r--r-- | va/android/va_android.cpp | 59 | ||||
-rw-r--r-- | va/drm/va_drm.c | 19 | ||||
-rw-r--r-- | va/va.c | 11 | ||||
-rw-r--r-- | va/va_internal.h | 2 | ||||
-rw-r--r-- | va/wayland/va_wayland.c | 3 | ||||
-rw-r--r-- | 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: @@ -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; } |