From b080d01b68f6eb99a3d5ccb6528b229ff3647269 Mon Sep 17 00:00:00 2001 From: Matthew Waters Date: Tue, 2 Apr 2024 12:34:16 +1100 Subject: [PATCH] glwindow/cocoa: keep a window reference across an async callback Esnures that the window is alive when the callback is fired. Part-of: --- .../gst-plugins-base/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/subprojects/gst-plugins-base/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m b/subprojects/gst-plugins-base/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m index 3be6c88b01..06a8b95047 100644 --- a/subprojects/gst-plugins-base/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m +++ b/subprojects/gst-plugins-base/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m @@ -286,6 +286,7 @@ gst_gl_window_cocoa_set_window_handle (GstGLWindow * window, guintptr handle) priv = window_cocoa->priv; if (priv->internal_win_id) { + GstGLWindowCocoa *window_cocoa2 = gst_object_ref (window_cocoa); if (handle) { priv->external_view = (gpointer)handle; priv->visible = TRUE; @@ -295,7 +296,6 @@ gst_gl_window_cocoa_set_window_handle (GstGLWindow * window, guintptr handle) priv->visible = FALSE; } - dispatch_async (dispatch_get_main_queue (), ^{ GstGLNSWindow *internal_win_id = (__bridge GstGLNSWindow *)window_cocoa->priv->internal_win_id; @@ -310,6 +310,7 @@ gst_gl_window_cocoa_set_window_handle (GstGLWindow * window, guintptr handle) [external_view setAutoresizesSubviews: YES]; [view setFrame: [external_view bounds]]; [view setAutoresizingMask: NSViewWidthSizable|NSViewHeightSizable]; + gst_object_unref (window_cocoa2); }); } else { /* no internal window yet so delay it to the next drawing */