[FFmpeg-cvslog] lavfi/buffersink: loop over ff_request_frame().

Nicolas George git at videolan.org
Sun Sep 20 19:06:18 CEST 2015


ffmpeg | branch: master | Nicolas George <george at nsup.org> | Wed Aug 26 00:15:22 2015 +0200| [807d4b635567e51108ea3a6a774336321c3250e5] | committer: Nicolas George

lavfi/buffersink: loop over ff_request_frame().

Do not assume that ff_request_frame() returning success
implies a frame has arrived in the FIFO.
Instead, just loop until a frame is in the FIFO.
It does not change anything since the same loop is present
in ff_request_frame(), confirmed by an assertion.

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

 libavfilter/buffersink.c |    5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/libavfilter/buffersink.c b/libavfilter/buffersink.c
index e693161..3206bd9 100644
--- a/libavfilter/buffersink.c
+++ b/libavfilter/buffersink.c
@@ -133,7 +133,7 @@ int attribute_align_arg av_buffersink_get_frame_flags(AVFilterContext *ctx, AVFr
     AVFrame *cur_frame;
 
     /* no picref available, fetch it from the filterchain */
-    if (!av_fifo_size(buf->fifo)) {
+    while (!av_fifo_size(buf->fifo)) {
         if (inlink->closed)
             return AVERROR_EOF;
         if (flags & AV_BUFFERSINK_FLAG_NO_REQUEST)
@@ -142,9 +142,6 @@ int attribute_align_arg av_buffersink_get_frame_flags(AVFilterContext *ctx, AVFr
             return ret;
     }
 
-    if (!av_fifo_size(buf->fifo))
-        return AVERROR(EINVAL);
-
     if (flags & AV_BUFFERSINK_FLAG_PEEK) {
         cur_frame = *((AVFrame **)av_fifo_peek2(buf->fifo, 0));
         if ((ret = av_frame_ref(frame, cur_frame)) < 0)



More information about the ffmpeg-cvslog mailing list