summaryrefslogtreecommitdiffstats
path: root/video/image_writer.c
diff options
context:
space:
mode:
authorKacper Michajłow <kasper93@gmail.com>2023-09-08 21:35:20 +0200
committerDudemanguy <random342@airmail.cc>2023-09-09 00:49:19 +0000
commit385719056eba3fe9f25e2417fbdaafce07c0ac47 (patch)
treeb6546cdb3d28409be2bf3df7eca6de2a407b5112 /video/image_writer.c
parent49dfa1430be6821f21141feb3e0377b650de4e5d (diff)
downloadmpv-385719056eba3fe9f25e2417fbdaafce07c0ac47.tar.bz2
mpv-385719056eba3fe9f25e2417fbdaafce07c0ac47.tar.xz
screenshot: support crop with --screenshot-sw
Diffstat (limited to 'video/image_writer.c')
-rw-r--r--video/image_writer.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/video/image_writer.c b/video/image_writer.c
index ba1afc4cc3..75ac01ec37 100644
--- a/video/image_writer.c
+++ b/video/image_writer.c
@@ -651,12 +651,25 @@ static struct mp_image *convert_image(struct mp_image *image, int destfmt,
mp_dbg(log, "Will convert image to %s\n", mp_imgfmt_to_name(p.imgfmt));
+ struct mp_image *src = image;
+ if (mp_image_crop_valid(&src->params) &&
+ (mp_rect_w(src->params.crop) != src->w ||
+ mp_rect_h(src->params.crop) != src->h))
+ {
+ src = mp_image_new_ref(src);
+ if (!src) {
+ mp_err(log, "mp_image_new_ref failed!\n");
+ return NULL;
+ }
+ mp_image_crop_rc(src, src->params.crop);
+ }
+
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);
+ mp_image_copy_attributes(dst, src);
dst->params = p;
@@ -664,9 +677,12 @@ static struct mp_image *convert_image(struct mp_image *image, int destfmt,
sws->log = log;
if (global)
mp_sws_enable_cmdline_opts(sws, global);
- bool ok = mp_sws_scale(sws, dst, image) >= 0;
+ bool ok = mp_sws_scale(sws, dst, src) >= 0;
talloc_free(sws);
+ if (src != image)
+ talloc_free(src);
+
if (!ok) {
mp_err(log, "Error when converting image.\n");
talloc_free(dst);