From 6a9cdfa7718535bbc0d1c1a4bd5009775429dacd Mon Sep 17 00:00:00 2001 From: wm4 Date: Mon, 12 Jan 2015 15:16:11 +0100 Subject: [PATCH] wayland: don't compute absurd window size For some reason, schedule_resize() can be called with everything set to 0. The code couldn't handle wl->window.aspect set to 0, converting NaNs to integers. Just work this around. (I have no idea what I'm doing. This is probably a corner case caused by my broken-ish wayland setup.) --- video/out/wayland_common.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/video/out/wayland_common.c b/video/out/wayland_common.c index 4eb7eb2d45..d0a37a66ce 100644 --- a/video/out/wayland_common.c +++ b/video/out/wayland_common.c @@ -717,6 +717,9 @@ static void schedule_resize(struct vo_wayland_state *wl, int32_t minimum_size = 150; int32_t x, y; float temp_aspect = width / (float) MPMAX(height, 1); + float win_aspect = wl->window.aspect; + if (win_aspect <= 0) + win_aspect = 1; MP_DBG(wl, "schedule resize: %dx%d\n", width, height); @@ -734,7 +737,7 @@ static void schedule_resize(struct vo_wayland_state *wl, switch (edges) { case WL_SHELL_SURFACE_RESIZE_TOP: case WL_SHELL_SURFACE_RESIZE_BOTTOM: - width = wl->window.aspect * height; + width = win_aspect * height; break; case WL_SHELL_SURFACE_RESIZE_LEFT: case WL_SHELL_SURFACE_RESIZE_RIGHT: @@ -742,13 +745,13 @@ static void schedule_resize(struct vo_wayland_state *wl, case WL_SHELL_SURFACE_RESIZE_TOP_RIGHT: case WL_SHELL_SURFACE_RESIZE_BOTTOM_LEFT: case WL_SHELL_SURFACE_RESIZE_BOTTOM_RIGHT: - height = (1 / wl->window.aspect) * width; + height = (1 / win_aspect) * width; break; default: if (wl->window.aspect < temp_aspect) width = wl->window.aspect * height; else - height = (1 / wl->window.aspect) * width; + height = (1 / win_aspect) * width; break; }