[FFmpeg-devel] [PATCH v3 1/8] hwcontext_internal: add ff_hwframe_map_replace
Mark Thompson
sw at jkqxz.net
Sun May 27 17:04:53 EEST 2018
On 22/05/18 03:46, Rostislav Pehlivanov wrote:
> Used to fix unmapping when no direct interop exists between APIs.
>
> Signed-off-by: Rostislav Pehlivanov <atomnuker at gmail.com>
> ---
> libavutil/hwcontext.c | 7 +++++++
> libavutil/hwcontext_internal.h | 5 +++++
> 2 files changed, 12 insertions(+)
>
> 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
"missing" makes it sound like you /want/ to have direct interop, and the consequent mess of one-to-one cases. You shouldn't! :P
> + */
> +int ff_hwframe_map_replace(AVFrame *dst, const AVFrame *src);
>
> extern const HWContextType ff_hwcontext_type_cuda;
> extern const HWContextType ff_hwcontext_type_d3d11va;
>
On 22/05/18 03:46, Rostislav Pehlivanov wrote:
> Signed-off-by: Rostislav Pehlivanov <atomnuker at gmail.com>
> ---
> libavutil/hwcontext_opencl.c | 5 +----
> 1 file changed, 1 insertion(+), 4 deletions(-)
>
> diff --git a/libavutil/hwcontext_opencl.c b/libavutil/hwcontext_opencl.c
> index 43b5c5ae0c..1d18da37bf 100644
> --- a/libavutil/hwcontext_opencl.c
> +++ b/libavutil/hwcontext_opencl.c
> @@ -2171,10 +2171,7 @@ static int opencl_map_from_vaapi(AVHWFramesContext *dst_fc,
> if (err < 0)
> goto fail;
>
> - // Adjust the map descriptor so that unmap works correctly.
> - hwmap = (HWMapDescriptor*)dst->buf[0]->data;
> - av_frame_unref(hwmap->source);
> - err = av_frame_ref(hwmap->source, src);
> + err = ff_hwframe_map_replace(dst, src);
>
> fail:
> av_frame_free(&tmp);
>
These two patches LGTM.
Thanks,
- Mark
More information about the ffmpeg-devel
mailing list