[FFmpeg-devel] [PATCH] avfilter/af_join: detect EOF immediately

Paul B Mahol onemda at gmail.com
Fri Aug 25 21:42:41 EEST 2017


Prevents hang.

Signed-off-by: Paul B Mahol <onemda at gmail.com>
---
 libavfilter/af_join.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/libavfilter/af_join.c b/libavfilter/af_join.c
index f8af0a1..7fbab47 100644
--- a/libavfilter/af_join.c
+++ b/libavfilter/af_join.c
@@ -24,6 +24,9 @@
  * a single output
  */
 
+#define FF_INTERNAL_FIELDS 1
+#include "framequeue.h"
+
 #include "libavutil/avassert.h"
 #include "libavutil/channel_layout.h"
 #include "libavutil/common.h"
@@ -402,13 +405,16 @@ static int join_request_frame(AVFilterLink *outlink)
 {
     AVFilterContext *ctx = outlink->src;
     JoinContext *s       = ctx->priv;
-    int i;
+    int i, ret;
 
     /* get a frame on each input */
     for (i = 0; i < ctx->nb_inputs; i++) {
         AVFilterLink *inlink = ctx->inputs[i];
-        if (!s->input_frames[i])
-            return ff_request_frame(inlink);
+        if (!s->input_frames[i] ||
+            /* detect EOF immediately */
+            (ctx->inputs[i]->status_in && !ctx->inputs[i]->status_out))
+            if ((ret = ff_request_frame(inlink)) < 0)
+                return ret;
     }
     return 0;
 }
-- 
2.9.3



More information about the ffmpeg-devel mailing list