aboutsummaryrefslogtreecommitdiffstats
path: root/fftools/ffmpeg_filter.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2023-05-21 23:18:29 +0200
committerAnton Khirnov <anton@khirnov.net>2023-05-31 16:15:47 +0200
commitad4efb91586dc4918121d96030d247be6af630c1 (patch)
treee9c77c69d6dad7b5b0c7d74f783ec0ff7faadc3b /fftools/ffmpeg_filter.c
parent7520cd9f07293259759783ba003d3aa1a87b17c2 (diff)
downloadffmpeg-ad4efb91586dc4918121d96030d247be6af630c1.tar.gz
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.
Diffstat (limited to 'fftools/ffmpeg_filter.c')
-rw-r--r--fftools/ffmpeg_filter.c18
1 files changed, 18 insertions, 0 deletions
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)