diff options
author | Kacper Michajłow <kasper93@gmail.com> | 2023-09-08 21:35:20 +0200 |
---|---|---|
committer | Dudemanguy <random342@airmail.cc> | 2023-09-09 00:49:19 +0000 |
commit | 385719056eba3fe9f25e2417fbdaafce07c0ac47 (patch) | |
tree | b6546cdb3d28409be2bf3df7eca6de2a407b5112 /video/image_writer.c | |
parent | 49dfa1430be6821f21141feb3e0377b650de4e5d (diff) | |
download | mpv-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.c | 20 |
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); |