aboutsummaryrefslogtreecommitdiffstats
path: root/fftools/ffmpeg_filter.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2023-05-11 11:59:44 +0200
committerAnton Khirnov <anton@khirnov.net>2023-05-22 17:10:44 +0200
commita16d7171d1e1ee03ab2473257e275ac2a8c265bf (patch)
treeb4e67940f6b81c8cd591fbb362aa88438436a4d8 /fftools/ffmpeg_filter.c
parent65f3d042a614ed62f4bc272f3859bb092e56e35e (diff)
downloadffmpeg-a16d7171d1e1ee03ab2473257e275ac2a8c265bf.tar.gz
fftools/ffmpeg_filter: only use fallback parameters when necessary
With complex filtergraphs it can happen that the filtergraph is unconfigured because some other filter than the one we just got EOF on is missing parameters. Make sure that the fallback parametes for a given input are only used when that input is unconfigured.
Diffstat (limited to 'fftools/ffmpeg_filter.c')
-rw-r--r--fftools/ffmpeg_filter.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c
index 2c3e2a96f7..8eca0f2cae 100644
--- a/fftools/ffmpeg_filter.c
+++ b/fftools/ffmpeg_filter.c
@@ -1521,17 +1521,19 @@ int ifilter_send_eof(InputFilter *ifilter, int64_t pts, AVRational tb)
if (ret < 0)
return ret;
} else {
- // the filtergraph was never configured, use the fallback parameters
- ifilter->format = ifp->fallback.format;
- ifilter->sample_rate = ifp->fallback.sample_rate;
- ifilter->width = ifp->fallback.width;
- ifilter->height = ifp->fallback.height;
- ifilter->sample_aspect_ratio = ifp->fallback.sample_aspect_ratio;
-
- ret = av_channel_layout_copy(&ifilter->ch_layout,
- &ifp->fallback.ch_layout);
- if (ret < 0)
- return ret;
+ if (ifilter->format < 0) {
+ // the filtergraph was never configured, use the fallback parameters
+ ifilter->format = ifp->fallback.format;
+ ifilter->sample_rate = ifp->fallback.sample_rate;
+ ifilter->width = ifp->fallback.width;
+ ifilter->height = ifp->fallback.height;
+ ifilter->sample_aspect_ratio = ifp->fallback.sample_aspect_ratio;
+
+ ret = av_channel_layout_copy(&ifilter->ch_layout,
+ &ifp->fallback.ch_layout);
+ if (ret < 0)
+ return ret;
+ }
if (ifilter->format < 0 && (ifilter->type == AVMEDIA_TYPE_AUDIO || ifilter->type == AVMEDIA_TYPE_VIDEO)) {
av_log(NULL, AV_LOG_ERROR, "Cannot determine format of input stream %d:%d after EOF\n", ifilter->ist->file_index, ifilter->ist->st->index);