diff options
author | Anton Khirnov <anton@khirnov.net> | 2023-05-21 23:18:29 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2023-05-31 16:15:47 +0200 |
commit | ad4efb91586dc4918121d96030d247be6af630c1 (patch) | |
tree | e9c77c69d6dad7b5b0c7d74f783ec0ff7faadc3b /fftools/ffmpeg_filter.c | |
parent | 7520cd9f07293259759783ba003d3aa1a87b17c2 (diff) | |
download | ffmpeg-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.c | 18 |
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) |