[FFmpeg-cvslog] lavfi: Make default get_video_buffer work with hardware frames

Mark Thompson git at videolan.org
Thu Mar 30 00:20:09 EEST 2017


ffmpeg | branch: master | Mark Thompson <sw at jkqxz.net> | Mon Oct 31 22:14:04 2016 +0000| [7433feb82f75827884d909de34d341a1c4401d4a] | committer: Mark Thompson

lavfi: Make default get_video_buffer work with hardware frames

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=7433feb82f75827884d909de34d341a1c4401d4a
---

 libavfilter/video.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/libavfilter/video.c b/libavfilter/video.c
index cadac50..533946a 100644
--- a/libavfilter/video.c
+++ b/libavfilter/video.c
@@ -20,6 +20,7 @@
 #include <stdio.h>
 
 #include "libavutil/buffer.h"
+#include "libavutil/hwcontext.h"
 #include "libavutil/imgutils.h"
 #include "libavutil/mem.h"
 
@@ -43,11 +44,16 @@ AVFrame *ff_default_get_video_buffer(AVFilterLink *link, int w, int h)
     if (!frame)
         return NULL;
 
-    frame->width  = w;
-    frame->height = h;
-    frame->format = link->format;
+    if (link->hw_frames_ctx &&
+        ((AVHWFramesContext*)link->hw_frames_ctx->data)->format == link->format) {
+        ret = av_hwframe_get_buffer(link->hw_frames_ctx, frame, 0);
+    } else {
+        frame->width  = w;
+        frame->height = h;
+        frame->format = link->format;
 
-    ret = av_frame_get_buffer(frame, 32);
+        ret = av_frame_get_buffer(frame, 32);
+    }
     if (ret < 0)
         av_frame_free(&frame);
 



More information about the ffmpeg-cvslog mailing list