diff options
author | Cameron Gutman <aicommander@gmail.com> | 2022-01-03 00:33:19 +0000 |
---|---|---|
committer | Aman Karmani <aman@tmm1.net> | 2022-01-06 19:17:42 -0800 |
commit | 242ed971cb005157488b9a21942d9fb4be4d0347 (patch) | |
tree | 888ee3521b2c9d0ab693136de25f222f631c89e5 | |
parent | 3e17e0e5eff896f43654635bd3219da56f807f11 (diff) | |
download | ffmpeg-242ed971cb005157488b9a21942d9fb4be4d0347.tar.gz |
lavu/videotoolbox: add support for memory mapping frames
Signed-off-by: Cameron Gutman <aicommander@gmail.com>
Signed-off-by: Aman Karmani <aman@tmm1.net>
-rw-r--r-- | libavutil/hwcontext_videotoolbox.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/libavutil/hwcontext_videotoolbox.c b/libavutil/hwcontext_videotoolbox.c index 0a8dbe9f33..026127d412 100644 --- a/libavutil/hwcontext_videotoolbox.c +++ b/libavutil/hwcontext_videotoolbox.c @@ -711,6 +711,30 @@ fail: return err; } +static int vt_map_from(AVHWFramesContext *hwfc, AVFrame *dst, + const AVFrame *src, int flags) +{ + int err; + + if (dst->format == AV_PIX_FMT_NONE) + dst->format = hwfc->sw_format; + else if (dst->format != hwfc->sw_format) + return AVERROR(ENOSYS); + + err = vt_map_frame(hwfc, dst, src, flags); + if (err) + return err; + + dst->width = src->width; + dst->height = src->height; + + err = av_frame_copy_props(dst, src); + if (err) + return err; + + return 0; +} + static int vt_device_create(AVHWDeviceContext *ctx, const char *device, AVDictionary *opts, int flags) { @@ -736,6 +760,7 @@ const HWContextType ff_hwcontext_type_videotoolbox = { .transfer_get_formats = vt_transfer_get_formats, .transfer_data_to = vt_transfer_data_to, .transfer_data_from = vt_transfer_data_from, + .map_from = vt_map_from, .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_VIDEOTOOLBOX, AV_PIX_FMT_NONE }, }; |