summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVíctor Manuel Jáquez Leal <vjaquez@igalia.com>2018-05-25 12:17:21 +0200
committerVíctor Manuel Jáquez Leal <vjaquez@igalia.com>2018-06-06 17:39:15 +0200
commitfdf7f65c60db9cd2ff4b3106e5116755439789c6 (patch)
treef5b8f82cff807e4375384b8f01fbbeafd79f33ef
parent55a14e39e17f415f1e2b3ef68cf18089fe6fa77b (diff)
libs: display: resurrect parent private memember
This is, practically, a revert of commit dcf135e2. The parent logic is useful for the EGL display, which is a decorator of the real windowing subsystem (X11 or Wayland). Thus it is avoided calling vaInitialize() and vaTerminate() twice.
-rw-r--r--gst-libs/gst/vaapi/gstvaapidisplay.c15
-rw-r--r--gst-libs/gst/vaapi/gstvaapidisplay_egl.c3
-rw-r--r--gst-libs/gst/vaapi/gstvaapidisplay_priv.h1
3 files changed, 15 insertions, 4 deletions
diff --git a/gst-libs/gst/vaapi/gstvaapidisplay.c b/gst-libs/gst/vaapi/gstvaapidisplay.c
index 0e80f9ca..037f42a0 100644
--- a/gst-libs/gst/vaapi/gstvaapidisplay.c
+++ b/gst-libs/gst/vaapi/gstvaapidisplay.c
@@ -832,7 +832,8 @@ gst_vaapi_display_destroy (GstVaapiDisplay * display)
}
if (priv->display) {
- vaTerminate (priv->display);
+ if (!priv->parent)
+ vaTerminate (priv->display);
priv->display = NULL;
}
@@ -847,6 +848,8 @@ gst_vaapi_display_destroy (GstVaapiDisplay * display)
g_free (priv->vendor_string);
priv->vendor_string = NULL;
+
+ gst_vaapi_display_replace_internal (&priv->parent, NULL);
}
static gboolean
@@ -893,8 +896,10 @@ gst_vaapi_display_create_unlocked (GstVaapiDisplay * display,
if (!priv->display)
return FALSE;
- if (!vaapi_initialize (priv->display))
- return FALSE;
+ if (!priv->parent) {
+ if (!vaapi_initialize (priv->display))
+ return FALSE;
+ }
GST_INFO_OBJECT (display, "new display addr=%p", display);
g_free (priv->display_name);
@@ -914,6 +919,8 @@ gst_vaapi_display_lock_default (GstVaapiDisplay * display)
{
GstVaapiDisplayPrivate *priv = GST_VAAPI_DISPLAY_GET_PRIVATE (display);
+ if (priv->parent)
+ priv = GST_VAAPI_DISPLAY_GET_PRIVATE (priv->parent);
g_rec_mutex_lock (&priv->mutex);
}
@@ -922,6 +929,8 @@ gst_vaapi_display_unlock_default (GstVaapiDisplay * display)
{
GstVaapiDisplayPrivate *priv = GST_VAAPI_DISPLAY_GET_PRIVATE (display);
+ if (priv->parent)
+ priv = GST_VAAPI_DISPLAY_GET_PRIVATE (priv->parent);
g_rec_mutex_unlock (&priv->mutex);
}
diff --git a/gst-libs/gst/vaapi/gstvaapidisplay_egl.c b/gst-libs/gst/vaapi/gstvaapidisplay_egl.c
index 3bb84720..93f4ac93 100644
--- a/gst-libs/gst/vaapi/gstvaapidisplay_egl.c
+++ b/gst-libs/gst/vaapi/gstvaapidisplay_egl.c
@@ -104,6 +104,7 @@ gst_vaapi_display_egl_bind_display (GstVaapiDisplay * base_display,
EGLDisplay *native_egl_display;
guint gl_platform = EGL_PLATFORM_UNKNOWN;
const InitParams *params = (InitParams *) native_params;
+ GstVaapiDisplayPrivate *const priv = GST_VAAPI_DISPLAY_GET_PRIVATE (display);
native_vaapi_display = params->display;
native_egl_display = params->gl_display;
@@ -124,7 +125,7 @@ gst_vaapi_display_egl_bind_display (GstVaapiDisplay * base_display,
return FALSE;
gst_vaapi_display_replace (&display->display, native_vaapi_display);
- gst_object_unref (native_vaapi_display);
+ priv->parent = native_vaapi_display;
switch (GST_VAAPI_DISPLAY_GET_CLASS_TYPE (display->display)) {
case GST_VAAPI_DISPLAY_TYPE_X11:
diff --git a/gst-libs/gst/vaapi/gstvaapidisplay_priv.h b/gst-libs/gst/vaapi/gstvaapidisplay_priv.h
index 7f96208f..4d6da177 100644
--- a/gst-libs/gst/vaapi/gstvaapidisplay_priv.h
+++ b/gst-libs/gst/vaapi/gstvaapidisplay_priv.h
@@ -109,6 +109,7 @@ typedef enum _GstVaapiDisplayInitType GstVaapiDisplayInitType;
struct _GstVaapiDisplayPrivate
{
+ GstVaapiDisplay *parent;
GRecMutex mutex;
gchar *display_name;
VADisplay display;