From b2f44f131fe5de61ba0cdafc4b0bb6749720b9b3 Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 8 May 2015 22:31:59 +0200 Subject: vo_drm: don't mutate the current frame when clamping for panscan When running with --panscan=1, this could crash - because the current frame was reduced in size each time the image was redrawn, which would result in a failed assertion the second time it's drawn. (cherry picked from commit 859ddc99064357c752c6f6dfa475cb96430531d2) --- video/out/vo_drm.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/video/out/vo_drm.c b/video/out/vo_drm.c index 71c73bd6f8..b8f6e1cffe 100644 --- a/video/out/vo_drm.c +++ b/video/out/vo_drm.c @@ -491,12 +491,13 @@ static void draw_image(struct vo *vo, mp_image_t *mpi) struct priv *p = vo->priv; if (p->active) { + struct mp_image src = *mpi; struct mp_rect src_rc = p->src; src_rc.x0 = MP_ALIGN_DOWN(src_rc.x0, mpi->fmt.align_x); src_rc.y0 = MP_ALIGN_DOWN(src_rc.y0, mpi->fmt.align_y); - mp_image_crop_rc(mpi, src_rc); - mp_sws_scale(p->sws, p->cur_frame, mpi); - osd_draw_on_image(vo->osd, p->osd, mpi ? mpi->pts : 0, 0, p->cur_frame); + mp_image_crop_rc(&src, src_rc); + mp_sws_scale(p->sws, p->cur_frame, &src); + osd_draw_on_image(vo->osd, p->osd, src.pts, 0, p->cur_frame); struct modeset_buf *front_buf = &p->dev->bufs[p->dev->front_buf]; int32_t shift = (p->device_w * p->y + p->x) * 4; -- cgit v1.2.3