diff options
Diffstat (limited to 'recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0008-gl-wayland-fix-loop-test-hang-in-glimagesink.patch')
-rw-r--r-- | recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0008-gl-wayland-fix-loop-test-hang-in-glimagesink.patch | 142 |
1 files changed, 0 insertions, 142 deletions
diff --git a/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0008-gl-wayland-fix-loop-test-hang-in-glimagesink.patch b/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0008-gl-wayland-fix-loop-test-hang-in-glimagesink.patch deleted file mode 100644 index 25bd452..0000000 --- a/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0008-gl-wayland-fix-loop-test-hang-in-glimagesink.patch +++ /dev/null @@ -1,142 +0,0 @@ -From 810fb3179c01747534af7f5b566f5e792be50b2b Mon Sep 17 00:00:00 2001 -From: Haihua Hu <b55597@freescale.com> -Date: Sun, 6 Dec 2015 14:25:44 +0800 -Subject: [PATCH 08/26] gl/wayland: fix loop test hang in glimagesink - -Root cause: In glimagesink, gl thread will dispatch event queue and window_show() -is called from streaming thread. Gl thread will empty event queue and -potentially cause gst_gl_wl_display_roundtrip_queue() blocking the -streaming thread to wait for an event occur. Actually, no event can occur -becaue the swap_buffer event is queued by streaming thread but it is blocked. - -Solution: Use two event queue, One for surface and another for gl thread - -Upstream-Status: Pending - -bugzilla URL: https://bugzilla.gnome.org/show_bug.cgi?id=758984 - -Signed-off-by: Haihua Hu <b55597@freescale.com> ---- - gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c | 33 +++++++++++++++-------- - gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h | 2 +- - 2 files changed, 23 insertions(+), 12 deletions(-) - -diff --git a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c -index 1930585..326e051 100644 ---- a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c -+++ b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c -@@ -245,6 +245,10 @@ destroy_surfaces (GstGLWindowWaylandEGL * window_egl) - wl_egl_window_destroy (window_egl->window.native); - window_egl->window.native = NULL; - } -+ if(window_egl->window.surface_queue) { -+ wl_event_queue_destroy (window_egl->window.surface_queue); -+ window_egl->window.surface_queue = NULL; -+ } - } - - static void -@@ -253,13 +257,15 @@ create_surfaces (GstGLWindowWaylandEGL * window_egl) - GstGLDisplayWayland *display = - GST_GL_DISPLAY_WAYLAND (GST_GL_WINDOW (window_egl)->display); - gint width, height; -+ if (!window_egl->window.surface_queue) -+ window_egl->window.surface_queue = wl_display_create_queue (display->display); - - if (!window_egl->window.surface) { - window_egl->window.surface = - wl_compositor_create_surface (display->compositor); -- if (window_egl->window.queue) -+ if (window_egl->window.surface_queue) - wl_proxy_set_queue ((struct wl_proxy *) window_egl->window.surface, -- window_egl->window.queue); -+ window_egl->window.surface_queue); - } - - if (window_egl->window.foreign_surface) { -@@ -275,9 +281,9 @@ create_surfaces (GstGLWindowWaylandEGL * window_egl) - window_egl->window.subsurface = - wl_subcompositor_get_subsurface (display->subcompositor, - window_egl->window.surface, window_egl->window.foreign_surface); -- if (window_egl->window.queue) -+ if (window_egl->window.surface_queue) - wl_proxy_set_queue ((struct wl_proxy *) window_egl->window.subsurface, -- window_egl->window.queue); -+ window_egl->window.surface_queue); - - wl_subsurface_set_position (window_egl->window.subsurface, - window_egl->window.window_x, window_egl->window.window_y); -@@ -289,9 +295,9 @@ create_surfaces (GstGLWindowWaylandEGL * window_egl) - window_egl->window.shell_surface = - wl_shell_get_shell_surface (display->shell, - window_egl->window.surface); -- if (window_egl->window.queue) -+ if (window_egl->window.surface_queue) - wl_proxy_set_queue ((struct wl_proxy *) window_egl->window. -- shell_surface, window_egl->window.queue); -+ shell_surface, window_egl->window.surface_queue); - - wl_shell_surface_add_listener (window_egl->window.shell_surface, - &shell_surface_listener, window_egl); -@@ -319,9 +325,9 @@ create_surfaces (GstGLWindowWaylandEGL * window_egl) - - window_egl->window.native = - wl_egl_window_create (window_egl->window.surface, width, height); -- if (window_egl->window.queue) -+ if (window_egl->window.surface_queue) - wl_proxy_set_queue ((struct wl_proxy *) window_egl->window.native, -- window_egl->window.queue); -+ window_egl->window.surface_queue); - } - } - -@@ -372,6 +378,11 @@ gst_gl_window_wayland_egl_close (GstGLWindow * window) - - destroy_surfaces (window_egl); - -+ if(window_egl->window.wl_queue) { -+ wl_event_queue_destroy (window_egl->window.wl_queue); -+ window_egl->window.wl_queue = NULL; -+ } -+ - g_source_destroy (window_egl->wl_source); - g_source_unref (window_egl->wl_source); - window_egl->wl_source = NULL; -@@ -400,10 +411,10 @@ gst_gl_window_wayland_egl_open (GstGLWindow * window, GError ** error) - return FALSE; - } - -- window_egl->window.queue = wl_display_create_queue (display->display); -+ window_egl->window.wl_queue = wl_display_create_queue (display->display); - - window_egl->wl_source = wayland_event_source_new (display->display, -- window_egl->window.queue); -+ window_egl->window.wl_queue); - - if (!GST_GL_WINDOW_CLASS (parent_class)->open (window, error)) - return FALSE; -@@ -452,7 +463,7 @@ gst_gl_window_wayland_egl_show (GstGLWindow * window) - create_surfaces (window_egl); - - if (gst_gl_wl_display_roundtrip_queue (display_wayland->display, -- window_egl->window.queue) < 0) -+ window_egl->window.surface_queue) < 0) - GST_WARNING_OBJECT (window, "failed a roundtrip"); - } - -diff --git a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h -index 16a0543..5256728 100644 ---- a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h -+++ b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h -@@ -63,7 +63,7 @@ struct display { - struct window { - struct display *display; - -- struct wl_event_queue *queue; -+ struct wl_event_queue *wl_queue, *surface_queue; - struct wl_surface *surface; - struct wl_shell_surface *shell_surface; - struct wl_egl_window *native; --- -1.9.1 - |