[FFmpeg-devel] [PATCH v2 1/8] hwcontext_internal: add	ff_hwframe_map_replace
    Rostislav Pehlivanov 
    atomnuker at gmail.com
       
    Sun Apr 22 19:47:44 EEST 2018
    
    
  
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 70c556ecac..f9ce2f5b13 100644
--- a/libavutil/hwcontext.c
+++ b/libavutil/hwcontext.c
@@ -871,3 +871,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;
-- 
2.17.0
    
    
More information about the ffmpeg-devel
mailing list