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 {