glwindow: marshal gst_gl_window_resize through the window loop
authorMatthew Waters <matthew@centricular.com>
Fri, 1 Jul 2016 06:18:55 +0000 (16:18 +1000)
committerTim-Philipp Müller <tim@centricular.com>
Sat, 9 Dec 2017 19:32:22 +0000 (19:32 +0000)
saves having every caller do it themselves.

gst-libs/gst/gl/gstglwindow.c

index d30b911..b74d397 100644 (file)
@@ -1162,13 +1162,35 @@ gst_gl_window_queue_resize (GstGLWindow * window)
     window_class->queue_resize (window);
 }
 
+struct resize_data
+{
+  GstGLWindow *window;
+  guint width, height;
+};
+
+static void
+_on_resize (gpointer data)
+{
+  struct resize_data *resize = data;
+
+  resize->window->resize (resize->window->resize_data, resize->width,
+      resize->height);
+}
+
 void
 gst_gl_window_resize (GstGLWindow * window, guint width, guint height)
 {
   g_return_if_fail (GST_IS_GL_WINDOW (window));
 
-  if (window->resize)
-    window->resize (window->resize_data, width, height);
+  if (window->resize) {
+    struct resize_data resize = { 0, };
+
+    resize.window = window;
+    resize.width = width;
+    resize.height = height;
+
+    gst_gl_window_send_message (window, (GstGLWindowCB) _on_resize, &resize);
+  }
 
   window->priv->surface_width = width;
   window->priv->surface_height = height;