gtkglsink: expose the created display and context correctly
authorMatthew Waters <matthew@centricular.com>
Fri, 1 Sep 2017 05:00:12 +0000 (15:00 +1000)
committerMatthew Waters <matthew@centricular.com>
Tue, 5 Sep 2017 11:16:33 +0000 (21:16 +1000)
1. Propagate the GstGLDisplay we create
2. Add the created GstGLContext to the propagated GstGLDisplay

Otherwise with multi-branch GL pipelines involving gtkglsink, things
will fall apart and errors will be genarated somewhere.

ext/gtk/gstgtkglsink.c
ext/gtk/gtkgstglwidget.c

index 39b54fa..d9d389b 100644 (file)
@@ -166,6 +166,9 @@ gst_gtk_gl_sink_start (GstBaseSink * bsink)
   if (!gtk_sink->display || !gtk_sink->context || !gtk_sink->gtk_context)
     return FALSE;
 
+  gst_gl_element_propagate_display_context (GST_ELEMENT (bsink),
+      gtk_sink->display);
+
   return TRUE;
 }
 
index 2423afc..cfad4f1 100644 (file)
@@ -515,12 +515,16 @@ gtk_gst_gl_widget_init_winsys (GtkGstGLWidget * gst_widget)
     return FALSE;
   }
 
+  GST_OBJECT_LOCK (priv->display);
   if (!gst_gl_display_create_context (priv->display, priv->other_context,
           &priv->context, &error)) {
     g_clear_error (&error);
+    GST_OBJECT_UNLOCK (priv->display);
     GTK_GST_BASE_WIDGET_UNLOCK (gst_widget);
     return FALSE;
   }
+  gst_gl_display_add_context (priv->display, priv->context);
+  GST_OBJECT_UNLOCK (priv->display);
 
   GTK_GST_BASE_WIDGET_UNLOCK (gst_widget);
   return TRUE;