diff options
author | Rostislav Pehlivanov <atomnuker@gmail.com> | 2018-04-20 05:30:03 +0100 |
---|---|---|
committer | Rostislav Pehlivanov <atomnuker@gmail.com> | 2018-06-21 16:34:06 +0100 |
commit | 7062e4dbc8240389bf64f46f527eabfc5adcd58b (patch) | |
tree | de88a476f69a6e2dfc29a32f70c633877439da3e | |
parent | deb9a04d54045c8021816cfe019bf2bba0e9595d (diff) |
hwcontext_internal: add ff_hwframe_map_replace
Used to fix unmapping when no direct interop exists between APIs.
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
-rw-r--r-- | libavutil/hwcontext.c | 7 | ||||
-rw-r--r-- | libavutil/hwcontext_internal.h | 5 |
2 files changed, 12 insertions, 0 deletions
diff --git a/libavutil/hwcontext.c b/libavutil/hwcontext.c index 745016ed7e..f1e404ab20 100644 --- a/libavutil/hwcontext.c +++ b/libavutil/hwcontext.c @@ -870,3 +870,10 @@ fail: av_buffer_unref(&dst_ref); return ret; } + +int ff_hwframe_map_replace(AVFrame *dst, const AVFrame *src) +{ + HWMapDescriptor *hwmap = (HWMapDescriptor*)dst->buf[0]->data; + av_frame_unref(hwmap->source); + return av_frame_ref(hwmap->source, src); +} diff --git a/libavutil/hwcontext_internal.h b/libavutil/hwcontext_internal.h index 332062ddaa..77dc47ddd6 100644 --- a/libavutil/hwcontext_internal.h +++ b/libavutil/hwcontext_internal.h @@ -156,6 +156,11 @@ int ff_hwframe_map_create(AVBufferRef *hwframe_ref, HWMapDescriptor *hwmap), void *priv); +/** + * Replace the current hwmap of dst with the one from src, used for indirect + * mappings like VAAPI->(DRM)->OpenCL/Vulkan where a direct interop is missing + */ +int ff_hwframe_map_replace(AVFrame *dst, const AVFrame *src); extern const HWContextType ff_hwcontext_type_cuda; extern const HWContextType ff_hwcontext_type_d3d11va; |