summaryrefslogtreecommitdiffstats
path: root/video
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2012-12-31 17:12:38 +0100
committerwm4 <wm4@nowhere>2013-01-13 20:04:14 +0100
commitdd89c542e3364bd4f9294c3ac5bcbfb6b0f16594 (patch)
tree259fca6ff858d8a91907ded7c0bc15bfbc8498a2 /video
parentbd6470ec6a5cc6e729257a0fd737ef5ef25aa544 (diff)
downloadmpv-dd89c542e3364bd4f9294c3ac5bcbfb6b0f16594.tar.bz2
mpv-dd89c542e3364bd4f9294c3ac5bcbfb6b0f16594.tar.xz
vo_sdl: avoid copying just for taking screenshots
Use reference counting instead.
Diffstat (limited to 'video')
-rw-r--r--video/out/vo_sdl.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/video/out/vo_sdl.c b/video/out/vo_sdl.c
index d760aff50c..b4d88eb341 100644
--- a/video/out/vo_sdl.c
+++ b/video/out/vo_sdl.c
@@ -450,8 +450,6 @@ static int config(struct vo *vo, uint32_t width, uint32_t height,
return -1;
}
- vc->ssmpi = mp_image_alloc(format, width, height);
-
resize(vo, d_width, d_height);
SDL_DisableScreenSaver();
@@ -899,6 +897,8 @@ static void draw_image(struct vo *vo, mp_image_t *mpi)
mp_image_copy(texmpi, mpi);
SDL_UnlockTexture(vc->tex);
+
+ mp_image_setrefp(&vc->ssmpi, mpi);
}
SDL_Rect src, dst;
@@ -920,8 +920,6 @@ static void draw_image(struct vo *vo, mp_image_t *mpi)
SDL_SetTextureColorMod(vc->tex, color_mod, color_mod, color_mod);
SDL_RenderCopy(vc->renderer, vc->tex, &src, &dst);
}
- if (mpi)
- mp_image_copy(vc->ssmpi, mpi);
}
static void update_screeninfo(struct vo *vo)
@@ -942,7 +940,7 @@ static void update_screeninfo(struct vo *vo)
static struct mp_image *get_screenshot(struct vo *vo)
{
struct priv *vc = vo->priv;
- return mp_image_new_copy(vc->ssmpi);
+ return vc->ssmpi ? mp_image_new_ref(vc->ssmpi) : NULL;
}
static struct mp_image *get_window_screenshot(struct vo *vo)