Fix glimagesink wayland window fixed size of 320x240
Ported from gstreamer 1.16
https://bugzilla.gnome.org/show_bug.cgi?id=789384
Change-Id: I96dedb537819fc785bc34ad111c36e5f72b02264
diff --git a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c
index 06809fa..513fdec 100644
--- a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c
+++ b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c
@@ -304,14 +304,29 @@
}
}
- if (window_egl->window.window_width > 0)
+ /*
+ * render_rect is the application requested size so choose that first if
+ * available.
+ * Else choose the already chosen size if set
+ * Else choose the preferred size if set
+ * Else choose a default value
+ */
+ if (window_egl->window.render_rect.w > 0)
+ width = window_egl->window.render_rect.w;
+ else if (window_egl->window.window_width > 0)
width = window_egl->window.window_width;
+ else if (window_egl->window.preferred_width > 0)
+ width = window_egl->window.preferred_width;
else
width = 320;
window_egl->window.window_width = width;
- if (window_egl->window.window_height > 0)
+ if (window_egl->window.render_rect.h > 0)
+ height = window_egl->window.render_rect.h;
+ else if (window_egl->window.window_height > 0)
height = window_egl->window.window_height;
+ else if (window_egl->window.preferred_height > 0)
+ height = window_egl->window.preferred_height;
else
height = 240;
window_egl->window.window_height = height;
@@ -344,6 +359,13 @@
window_egl->window.preferred_width = width;
window_egl->window.preferred_height = height;
+ if (window_egl->window.render_rect.w < 0
+ && window_egl->window.render_rect.h < 0) {
+ if (window_egl->window.window_height != height
+ || window_egl->window.window_width != width) {
+ window_resize (window_egl, width, height);
+ }
+ }
}
static void
@@ -372,6 +394,7 @@
static void
gst_gl_window_wayland_egl_init (GstGLWindowWaylandEGL * window)
{
+ window->window.render_rect.w = window->window.render_rect.h = -1;
}
/* Must be called in the gl thread */
@@ -595,6 +618,8 @@
}
window_resize (render->window_egl, render->rect.w, render->rect.h);
+
+ render->window_egl->window.render_rect = render->rect;
}
static gboolean
diff --git a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h
index a643617..d96fa47 100644
--- a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h
+++ b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h
@@ -75,6 +75,7 @@
int window_x, window_y;
int preferred_width, preferred_height;
gboolean preferred_fullscreen;
+ GstVideoRectangle render_rect;
};
struct _GstGLWindowWaylandEGL {