diff options
author | Víctor Manuel Jáquez Leal <vjaquez@igalia.com> | 2018-05-25 12:17:21 +0200 |
---|---|---|
committer | Víctor Manuel Jáquez Leal <vjaquez@igalia.com> | 2018-06-06 17:39:15 +0200 |
commit | fdf7f65c60db9cd2ff4b3106e5116755439789c6 (patch) | |
tree | f5b8f82cff807e4375384b8f01fbbeafd79f33ef | |
parent | 55a14e39e17f415f1e2b3ef68cf18089fe6fa77b (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.c | 15 | ||||
-rw-r--r-- | gst-libs/gst/vaapi/gstvaapidisplay_egl.c | 3 | ||||
-rw-r--r-- | gst-libs/gst/vaapi/gstvaapidisplay_priv.h | 1 |
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; |