69 lines
2.5 KiB
Diff
69 lines
2.5 KiB
Diff
From 76477c4516556b9cc8ba95c6402e7b45f4868937 Mon Sep 17 00:00:00 2001
|
|
From: Haihua Hu <jared.hu@nxp.com>
|
|
Date: Wed, 27 Jul 2016 10:55:01 +0800
|
|
Subject: [PATCH] glwindow: Fix glimagesink cannot show frame when connect to
|
|
qmlglsrc
|
|
|
|
1.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
|
|
2.Also advertise support for the affine transformation meta in the allocation
|
|
query.
|
|
|
|
Upstream-Status: Backport [1.9.2]
|
|
|
|
https://bugzilla.gnome.org/show_bug.cgi?id=768160
|
|
|
|
Signed-off-by: Haihua Hu <jared.hu@nxp.com>
|
|
---
|
|
ext/gl/gstglimagesink.c | 2 ++
|
|
gst-libs/gst/gl/x11/gstglwindow_x11.c | 14 +++++++++-----
|
|
2 files changed, 11 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/ext/gl/gstglimagesink.c b/ext/gl/gstglimagesink.c
|
|
index cd3147d3fcd4..d81fcfb42330 100644
|
|
--- a/ext/gl/gstglimagesink.c
|
|
+++ b/ext/gl/gstglimagesink.c
|
|
@@ -1957,6 +1957,8 @@ gst_glimage_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
|
|
|
|
gst_query_add_allocation_meta (query,
|
|
GST_VIDEO_OVERLAY_COMPOSITION_META_API_TYPE, allocation_meta);
|
|
+ gst_query_add_allocation_meta (query,
|
|
+ GST_VIDEO_AFFINE_TRANSFORMATION_META_API_TYPE, 0);
|
|
|
|
if (allocation_meta)
|
|
gst_structure_free (allocation_meta);
|
|
diff --git a/gst-libs/gst/gl/x11/gstglwindow_x11.c b/gst-libs/gst/gl/x11/gstglwindow_x11.c
|
|
index 67160f6d700d..bc7b9c09cf5f 100644
|
|
--- a/gst-libs/gst/gl/x11/gstglwindow_x11.c
|
|
+++ b/gst-libs/gst/gl/x11/gstglwindow_x11.c
|
|
@@ -399,6 +399,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,
|
|
@@ -422,13 +423,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);
|