diff options
Diffstat (limited to 'player/screenshot.c')
-rw-r--r-- | player/screenshot.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/player/screenshot.c b/player/screenshot.c index 13532ec1a3..4c043ab986 100644 --- a/player/screenshot.c +++ b/player/screenshot.c @@ -31,6 +31,7 @@ #include "common/msg.h" #include "options/path.h" #include "video/mp_image.h" +#include "video/mp_image_pool.h" #include "video/decode/dec_video.h" #include "video/out/vo.h" #include "video/image_writer.h" @@ -346,12 +347,15 @@ static struct mp_image *screenshot_get(struct MPContext *mpctx, int mode) } } - if (image && mpctx->vo_chain && mpctx->vo_chain->hwdec_devs) { - struct mp_hwdec_ctx *ctx = - hwdec_devices_get_first(mpctx->vo_chain->hwdec_devs); - struct mp_image *nimage = NULL; - if (ctx && ctx->download_image && (image->fmt.flags & MP_IMGFLAG_HWACCEL)) - nimage = ctx->download_image(ctx, image, NULL); + bool hwimage = image && (image->fmt.flags & MP_IMGFLAG_HWACCEL); + if (hwimage) { + struct mp_image *nimage = mp_image_hw_download(image, NULL); + if (!nimage && mpctx->vo_chain && mpctx->vo_chain->hwdec_devs) { + struct mp_hwdec_ctx *ctx = + hwdec_devices_get_first(mpctx->vo_chain->hwdec_devs); + if (ctx && ctx->download_image && hwimage) + nimage = ctx->download_image(ctx, image, NULL); + } if (nimage) { talloc_free(image); image = nimage; |