From 4cd94ddd258976d5fc2d9cc5c3258eae882a42af Mon Sep 17 00:00:00 2001 From: Haihua Hu Date: Wed, 27 Jul 2016 10:55:01 +0800 Subject: [PATCH] glwindow: Fix glimagesink cannot show frame when connect to qmlglsrc When connect to qmlglsrc, x11 event loop will be replace by qt event loop which will cause the window cannot receive event from xserver, such as resize https://bugzilla.gnome.org/show_bug.cgi?id=768160 --- gst-libs/gst/gl/x11/gstglwindow_x11.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/gst-libs/gst/gl/x11/gstglwindow_x11.c b/gst-libs/gst/gl/x11/gstglwindow_x11.c index a330825..d08b757 100644 --- a/gst-libs/gst/gl/x11/gstglwindow_x11.c +++ b/gst-libs/gst/gl/x11/gstglwindow_x11.c @@ -391,6 +391,7 @@ draw_cb (gpointer data) GstGLWindow *window = GST_GL_WINDOW (window_x11); if (gst_gl_window_is_running (window)) { + guint width, height; XWindowAttributes attr; XGetWindowAttributes (window_x11->device, window_x11->internal_win_id, @@ -414,13 +415,16 @@ draw_cb (gpointer data) } } - if (window_x11->allow_extra_expose_events) { - if (window->queue_resize) { - guint width, height; + gst_gl_window_get_surface_dimensions (window, &width, &height); + if (attr.width != width || attr.height != height) { + width = attr.width; + height = attr.height; + gst_gl_window_queue_resize (window); + } - gst_gl_window_get_surface_dimensions (window, &width, &height); + if (window_x11->allow_extra_expose_events) { + if (window->queue_resize) gst_gl_window_resize (window, width, height); - } if (window->draw) { GstGLContext *context = gst_gl_window_get_context (window); -- 2.7.4