macOS gst-plugins-base/gl/cocoa: UI API called on a background thread: -[NSView remov...
authorRoman Shpuntov <roman.shpuntov@gmail.com>
Wed, 20 Mar 2019 11:44:12 +0000 (18:44 +0700)
committerRoman Shpuntov <roman.shpuntov@gmail.com>
Wed, 20 Mar 2019 11:44:12 +0000 (18:44 +0700)
The problem inside gstglwindow_cocoa.m, all UI operations must be called from main UI thread.

https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/568
Fixes #568

gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m

index 996c2ea..203204c 100644 (file)
@@ -240,16 +240,24 @@ gst_gl_window_cocoa_open (GstGLWindow *window, GError **err)
 }
 
 static void
-gst_gl_window_cocoa_close (GstGLWindow *window)
+_close_window (gpointer * data)
 {
-  GstGLWindowCocoa *window_cocoa = GST_GL_WINDOW_COCOA (window);
-  GstGLNSWindow *internal_win_id = (__bridge GstGLNSWindow *)window_cocoa->priv->internal_win_id;
+  GstGLWindowCocoa *window_cocoa = GST_GL_WINDOW_COCOA (data);
+  GstGLNSWindow *internal_win_id =
+      (__bridge GstGLNSWindow *) window_cocoa->priv->internal_win_id;
 
   [[internal_win_id contentView] removeFromSuperview];
-  CFBridgingRelease(window_cocoa->priv->internal_win_id);
+  CFBridgingRelease (window_cocoa->priv->internal_win_id);
   window_cocoa->priv->internal_win_id = NULL;
 }
 
+static void
+gst_gl_window_cocoa_close (GstGLWindow * window)
+{
+  _invoke_on_main ((GstGLWindowCB) _close_window, gst_object_ref (window),
+      (GDestroyNotify) gst_object_unref);
+}
+
 static guintptr
 gst_gl_window_cocoa_get_window_handle (GstGLWindow *window)
 {