summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Thompson <sw@jkqxz.net>2017-10-02 23:49:33 +0100
committerXiang, Haihao <haihao.xiang@intel.com>2017-11-21 21:38:52 -0800
commit4cc9a74bd82e9b1c5cfe7fc5fce056a01b99ecdb (patch)
tree75ab72891e8f7910b02ae0d86a684e14bec1e1dd
parentcff70165e08ab3372487d619564590abf6fbfb04 (diff)
downloadlibva-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.cpp59
-rw-r--r--va/drm/va_drm.c19
-rw-r--r--va/va.c11
-rw-r--r--va/va_internal.h2
-rw-r--r--va/wayland/va_wayland.c3
-rw-r--r--va/x11/va_x11.c74
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;
}