libs: display: egl: avoid two vaDisplay instantiates
authorVíctor Manuel Jáquez Leal <vjaquez@igalia.com>
Thu, 28 Sep 2017 16:58:17 +0000 (18:58 +0200)
committerVíctor Manuel Jáquez Leal <vjaquez@igalia.com>
Tue, 3 Oct 2017 11:14:55 +0000 (13:14 +0200)
GstVaapiDisplayEGL is a wrapper of another GstVaapiDisplay, either X11
or Wayland. Nonetheless it created another vaDisplay for it, instead
of using the wrapped one.

This patch enables the reuse of the wrapped vaDisplay avoiding
instantiating two.

https://bugzilla.gnome.org/show_bug.cgi?id=782212

gst-libs/gst/vaapi/gstvaapidisplay_egl.c

index 7d3d27e..fd5814e 100644 (file)
@@ -189,6 +189,8 @@ gst_vaapi_display_egl_get_display_info (GstVaapiDisplay * base_display,
   GstVaapiDisplayClass *const klass =
       GST_VAAPI_DISPLAY_GET_CLASS (display->display);
 
+  info->va_display = GST_VAAPI_DISPLAY_VADISPLAY (display->display);
+
   if (klass->get_display && !klass->get_display (display->display, info))
     return FALSE;
   return TRUE;
@@ -279,6 +281,11 @@ gst_vaapi_display_egl_finalize (GObject * object)
 
   if (dpy->texture_map)
     gst_object_unref (dpy->texture_map);
+
+  /* HACK to avoid to call twice vaTerminate() since this and the
+   * proxied display share the same vaDisplay */
+  GST_VAAPI_DISPLAY_VADISPLAY (object) = NULL;
+
   G_OBJECT_CLASS (gst_vaapi_display_egl_parent_class)->finalize (object);
 }