summaryrefslogtreecommitdiffstats
path: root/player/screenshot.c
diff options
context:
space:
mode:
authorsfan5 <sfan5@live.de>2019-09-14 22:06:00 +0200
committersfan5 <sfan5@live.de>2019-09-14 23:02:39 +0200
commit8925f10962d13d9c3cbcb2e198b892177366c09f (patch)
treec692f022cfc2693b4d3b36fd47892b7cb469952e /player/screenshot.c
parent7cf288ec77f838d3a2ca3134c164ddaaf2b6df55 (diff)
downloadmpv-8925f10962d13d9c3cbcb2e198b892177366c09f.tar.bz2
mpv-8925f10962d13d9c3cbcb2e198b892177366c09f.tar.xz
image_writer: move convert_image() to player/screenshot.c
Diffstat (limited to 'player/screenshot.c')
-rw-r--r--player/screenshot.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/player/screenshot.c b/player/screenshot.c
index e24ca051f1..df8da9697c 100644
--- a/player/screenshot.c
+++ b/player/screenshot.c
@@ -38,6 +38,7 @@
#include "video/mp_image_pool.h"
#include "video/out/vo.h"
#include "video/image_writer.h"
+#include "video/sws_utils.h"
#include "sub/osd.h"
#include "video/csputils.h"
@@ -387,6 +388,42 @@ static struct mp_image *screenshot_get(struct MPContext *mpctx, int mode,
return image;
}
+struct mp_image *convert_image(struct mp_image *image, int destfmt,
+ struct mp_log *log)
+{
+ int d_w, d_h;
+ mp_image_params_get_dsize(&image->params, &d_w, &d_h);
+
+ struct mp_image_params p = {
+ .imgfmt = destfmt,
+ .w = d_w,
+ .h = d_h,
+ .p_w = 1,
+ .p_h = 1,
+ };
+ mp_image_params_guess_csp(&p);
+
+ if (mp_image_params_equal(&p, &image->params))
+ return mp_image_new_ref(image);
+
+ struct mp_image *dst = mp_image_alloc(p.imgfmt, p.w, p.h);
+ if (!dst) {
+ mp_err(log, "Out of memory.\n");
+ return NULL;
+ }
+ mp_image_copy_attributes(dst, image);
+
+ dst->params = p;
+
+ if (mp_image_swscale(dst, image, mp_sws_hq_flags) < 0) {
+ mp_err(log, "Error when converting image.\n");
+ talloc_free(dst);
+ return NULL;
+ }
+
+ return dst;
+}
+
// mode is the same as in screenshot_get()
static struct mp_image *screenshot_get_rgb(struct MPContext *mpctx, int mode)
{