glviewconvert: fix reset context for GL context change
authorMatthew Waters <matthew@centricular.com>
Tue, 4 Feb 2020 03:01:47 +0000 (14:01 +1100)
committerMatthew Waters <matthew@centricular.com>
Wed, 5 Feb 2020 04:32:14 +0000 (15:32 +1100)
We need to remove GL resources from the old context instead of the new
GL context.  The two GL context may not even be shared.

gst-libs/gst/gl/gstglviewconvert.c

index d6e6cd9..aab126f 100644 (file)
@@ -358,11 +358,20 @@ void
 gst_gl_view_convert_set_context (GstGLViewConvert * viewconvert,
     GstGLContext * context)
 {
+  GstGLContext *old_context = NULL;
+
   g_return_if_fail (GST_IS_GL_VIEW_CONVERT (viewconvert));
 
-  if (gst_object_replace ((GstObject **) & viewconvert->context,
-          GST_OBJECT (context)))
+  GST_OBJECT_LOCK (viewconvert);
+  if (context != viewconvert->context) {
     gst_gl_view_convert_reset (viewconvert);
+    if (viewconvert->context)
+      old_context = viewconvert->context;
+    viewconvert->context = context ? gst_object_ref (context) : NULL;
+  }
+  GST_OBJECT_UNLOCK (viewconvert);
+
+  gst_clear_object (&old_context);
 }
 
 static gboolean