summaryrefslogtreecommitdiffstats
path: root/video
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-08-16 15:49:05 +0200
committerwm4 <wm4@nowhere>2014-08-16 17:09:59 +0200
commita4cfab7ee003fa60cab8d29676f3642830be47db (patch)
tree4182338310eb0dd766f29bb1fa043d9c4206e4eb /video
parent4f984b987c323b63db9e4926da8f6265f841a6ca (diff)
downloadmpv-a4cfab7ee003fa60cab8d29676f3642830be47db.tar.bz2
mpv-a4cfab7ee003fa60cab8d29676f3642830be47db.tar.xz
vo_wayland: fix redrawing logic
I must have broken it some time ago. The error case dealing with an unavailable backbuffer was broken, and didn't handle memory management correctly.
Diffstat (limited to 'video')
-rw-r--r--video/out/vo_wayland.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/video/out/vo_wayland.c b/video/out/vo_wayland.c
index 2abb2b534f..cde13bcded 100644
--- a/video/out/vo_wayland.c
+++ b/video/out/vo_wayland.c
@@ -475,7 +475,7 @@ static struct buffer * buffer_pool_get_no(struct buffer_pool *pool, uint32_t no)
static bool redraw_frame(struct priv *p)
{
- draw_image(p->vo, p->original_image);
+ draw_image(p->vo, NULL);
return true;
}
@@ -656,9 +656,13 @@ static void draw_image(struct vo *vo, mp_image_t *mpi)
struct priv *p = vo->priv;
struct buffer *buf = buffer_pool_get_back(&p->video_bufpool);
+ if (mpi) {
+ talloc_free(p->original_image);
+ p->original_image = mpi;
+ }
+
if (!buf) {
MP_VERBOSE(p->wl, "can't draw, back buffer is busy\n");
- talloc_free(mpi);
return;
}
@@ -672,8 +676,8 @@ static void draw_image(struct vo *vo, mp_image_t *mpi)
struct mp_image img = buffer_get_mp_image(p, &p->video_bufpool, buf);
- if (mpi) {
- struct mp_image src = *mpi;
+ if (p->original_image) {
+ struct mp_image src = *p->original_image;
struct mp_rect src_rc = p->src;
src_rc.x0 = MP_ALIGN_DOWN(src_rc.x0, src.fmt.align_x);
src_rc.y0 = MP_ALIGN_DOWN(src_rc.y0, src.fmt.align_y);
@@ -684,10 +688,6 @@ static void draw_image(struct vo *vo, mp_image_t *mpi)
mp_image_clear(&img, 0, 0, img.w, img.h);
}
- if (mpi != p->original_image) {
- talloc_free(p->original_image);
- p->original_image = mpi;
- }
buffer_finalise_back(buf);
draw_osd(vo);