From 1c65428d6f70f05333ecc8284e3f235c679fff26 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sat, 22 Dec 2012 17:17:43 +0100 Subject: sub: do not copy the target image if there is no OSD/subs It's not easy to tell whether the OSD/subs are empty, or if something is drawn. In general you have to use osd_draw() with a custom callback. If nothing is visible, the callback is never invoked. (The actual reason why this is so "hard" is the implementation of osd_libass.c, which doesn't allow separating rendering and drawing of OSD elements, because all OSD elements share the same ASS_Renderer.) To simplify avoiding copies, make osd_draw_on_image() instead of the caller use mp_image_make_writeable(). Introduce osd_draw_on_image_p(), which works like osd_draw_on_image(), but gets the new image allocation from an image pool. This is supposed to be an optimization, because it reduces the frequency of large allocations/deallocations for image data. The result of this is that the frequency of copies needed in conjunction with vf_sub, screenshots, and vo_lavc (encoding) should be reduced. vf_sub now always does true pass-through if no subs are shown. Drop the pts check from vf_sub. This didn't make much sense. --- core/screenshot.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'core') diff --git a/core/screenshot.c b/core/screenshot.c index 0f397f2dd7..ae259fcbc0 100644 --- a/core/screenshot.c +++ b/core/screenshot.c @@ -235,8 +235,6 @@ static char *gen_fname(screenshot_ctx *ctx, const char *file_ext) static void add_subs(struct MPContext *mpctx, struct mp_image *image) { - mp_image_make_writeable(image); - int d_w = image->display_w ? image->display_w : image->w; int d_h = image->display_h ? image->display_h : image->h; -- cgit v1.2.3