diff mbox

[FFmpeg-devel,1/2] lavf/framesync: detect EOF immediately.

Message ID 20161224094101.27898-1-george@nsup.org
State Accepted
Commit 3b64e3ea45c580c5e158c086f2eb7c65635fc33b
Headers show

Commit Message

Nicolas George Dec. 24, 2016, 9:41 a.m. UTC
Fix an infinite loop in forward_status_change().

Signed-off-by: Nicolas George <george@nsup.org>
---
 libavfilter/framesync.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

Comments

Paul B Mahol July 29, 2017, 9:57 a.m. UTC | #1
On 12/24/16, Nicolas George <george@nsup.org> wrote:
> Fix an infinite loop in forward_status_change().
>
> Signed-off-by: Nicolas George <george@nsup.org>
> ---
>  libavfilter/framesync.c | 10 +++++++++-
>  1 file changed, 9 insertions(+), 1 deletion(-)
>

lgtm
diff mbox

Patch

diff --git a/libavfilter/framesync.c b/libavfilter/framesync.c
index 7920cdb379..eb05d66a86 100644
--- a/libavfilter/framesync.c
+++ b/libavfilter/framesync.c
@@ -18,6 +18,9 @@ 
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#define FF_INTERNAL_FIELDS 1
+#include "framequeue.h"
+
 #include "libavutil/avassert.h"
 #include "avfilter.h"
 #include "bufferqueue.h"
@@ -314,7 +317,7 @@  int ff_framesync_filter_frame(FFFrameSync *fs, AVFilterLink *inlink,
 int ff_framesync_request_frame(FFFrameSync *fs, AVFilterLink *outlink)
 {
     AVFilterContext *ctx = outlink->src;
-    int input, ret;
+    int input, ret, i;
 
     if ((ret = ff_framesync_process_frame(fs, 0)) < 0)
         return ret;
@@ -323,6 +326,11 @@  int ff_framesync_request_frame(FFFrameSync *fs, AVFilterLink *outlink)
     if (fs->eof)
         return AVERROR_EOF;
     input = fs->in_request;
+    /* Detect status change early */
+    for (i = 0; i < fs->nb_in; i++)
+        if (!ff_framequeue_queued_frames(&ctx->inputs[i]->fifo) &&
+            ctx->inputs[i]->status_in && !ctx->inputs[i]->status_out)
+            input = i;
     ret = ff_request_frame(ctx->inputs[input]);
     if (ret == AVERROR_EOF) {
         if ((ret = ff_framesync_add_frame(fs, input, NULL)) < 0)