[FFmpeg-devel] [PATCH 11/24] fftools/ffmpeg_filter: try to configure filtergraphs earlier

Anton Khirnov anton at khirnov.net
Sun May 28 12:14:03 EEST 2023


When the filtergraph has no inputs, it can be configured immediately
when all its outputs are bound to output streams. This will simplify
treating some corner cases.
---
 fftools/ffmpeg_filter.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c
index 3f6b906468..3bf1862ab6 100644
--- a/fftools/ffmpeg_filter.c
+++ b/fftools/ffmpeg_filter.c
@@ -504,6 +504,7 @@ static void set_channel_layout(OutputFilter *f, OutputStream *ost)
 
 void ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost)
 {
+    FilterGraph  *fg = ofilter->graph;
     const AVCodec *c = ost->enc_ctx->codec;
 
     ofilter->ost = ost;
@@ -538,6 +539,23 @@ void ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost)
         }
         break;
     }
+
+    // if we have all input parameters and all outputs are bound,
+    // the graph can now be configured
+    if (ifilter_has_all_input_formats(fg)) {
+        int ret;
+
+        for (int i = 0; i < fg->nb_outputs; i++)
+            if (!fg->outputs[i]->ost)
+                return;
+
+        ret = configure_filtergraph(fg);
+        if (ret < 0) {
+            av_log(NULL, AV_LOG_ERROR, "Error configuring filter graph: %s\n",
+                   av_err2str(ret));
+            exit_program(1);
+        }
+    }
 }
 
 static InputFilter *ifilter_alloc(FilterGraph *fg)
-- 
2.40.1



More information about the ffmpeg-devel mailing list