meta-agl-core: gstreamer: Add 0001-waylandsink-Fix-xdg_shell-fullscreen-mode.patch.
[AGL/meta-agl.git] / meta-agl-core / recipes-multimedia / gstreamer / files / 0001-waylandsink-Fix-xdg_shell-fullscreen-mode.patch
diff --git a/meta-agl-core/recipes-multimedia/gstreamer/files/0001-waylandsink-Fix-xdg_shell-fullscreen-mode.patch b/meta-agl-core/recipes-multimedia/gstreamer/files/0001-waylandsink-Fix-xdg_shell-fullscreen-mode.patch
new file mode 100644 (file)
index 0000000..9a11fa1
--- /dev/null
@@ -0,0 +1,60 @@
+From 58b1f41f992e457b25eda125b6f823f97128e203 Mon Sep 17 00:00:00 2001
+From: Shinya Saito <ssaito@igel.co.jp>
+Date: Thu, 22 Aug 2019 16:04:37 +0900
+Subject: [PATCH] waylandsink: Fix xdg_shell fullscreen mode
+
+xdg_shell fullscreen mode doesn't work for committing
+xdg_surface without configure acknowledgement.
+
+In addition, we can't set different surface setting from
+acknowledged config in this mode.
+
+Upstream-Status: Backport [from master/1.17.1]
+---
+ ext/wayland/wlwindow.c | 16 +++++++++++-----
+ 1 file changed, 11 insertions(+), 5 deletions(-)
+
+diff --git a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c
+index f22ebcab6..50158795b 100644
+--- a/ext/wayland/wlwindow.c
++++ b/ext/wayland/wlwindow.c
+@@ -259,7 +259,6 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info,
+     gboolean fullscreen, GMutex * render_lock)
+ {
+   GstWlWindow *window;
+-  gint width;
+   window = gst_wl_window_new_internal (display, render_lock);
+@@ -325,10 +324,14 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info,
+     goto error;
+   }
+-  /* set the initial size to be the same as the reported video size */
+-  width =
+-      gst_util_uint64_scale_int_round (info->width, info->par_n, info->par_d);
+-  gst_wl_window_set_render_rectangle (window, 0, 0, width, info->height);
++  /* render_rectangle is already set via toplevel_configure in
++   * xdg_shell fullscreen mode */
++  if (!(display->xdg_wm_base && fullscreen)) {
++    /* set the initial size to be the same as the reported video size */
++    gint width =
++        gst_util_uint64_scale_int_round (info->width, info->par_n, info->par_d);
++    gst_wl_window_set_render_rectangle (window, 0, 0, width, info->height);
++  }
+   return window;
+@@ -548,6 +551,9 @@ gst_wl_window_set_render_rectangle (GstWlWindow * window, gint x, gint y,
+   gst_wl_window_update_borders (window);
++  if (!window->configured)
++    return;
++
+   if (window->video_width != 0) {
+     wl_subsurface_set_sync (window->video_subsurface);
+     gst_wl_window_resize_video_surface (window, TRUE);
+-- 
+2.20.1
+