[FFmpeg-cvslog] fftools/ffmpeg_filter: try to configure filtergraphs earlier

Anton Khirnov git at videolan.org
Wed May 31 17:25:59 EEST 2023


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Sun May 21 23:18:29 2023 +0200| [ad4efb91586dc4918121d96030d247be6af630c1] | committer: Anton Khirnov

fftools/ffmpeg_filter: try to configure filtergraphs earlier

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.

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

 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)



More information about the ffmpeg-cvslog mailing list