[FFmpeg-devel] [PATCH 1/2] ffmpeg: fallback to codecpar parameters on input filter eof
Marton Balint
cus at passwd.hu
Sun Mar 18 21:09:08 EET 2018
Fixes ticket #6854 and the following simpler case:
ffmpeg -f lavfi -i testsrc=d=1 -f lavfi -i testsrc=d=0 -filter_complex overlay -f null none
Signed-off-by: Marton Balint <cus at passwd.hu>
---
fftools/ffmpeg.c | 33 ++++++++++++++++-----------------
1 file changed, 16 insertions(+), 17 deletions(-)
diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c
index ee7258fcd1..8876c99560 100644
--- a/fftools/ffmpeg.c
+++ b/fftools/ffmpeg.c
@@ -1855,23 +1855,6 @@ static void flush_encoders(void)
ost->file_index, ost->st->index);
if (ost->filter && !fg->graph) {
- int x;
- for (x = 0; x < fg->nb_inputs; x++) {
- InputFilter *ifilter = fg->inputs[x];
- if (ifilter->format < 0) {
- AVCodecParameters *par = ifilter->ist->st->codecpar;
- // We never got any input. Set a fake format, which will
- // come from libavformat.
- ifilter->format = par->format;
- ifilter->sample_rate = par->sample_rate;
- ifilter->channels = par->channels;
- ifilter->channel_layout = par->channel_layout;
- ifilter->width = par->width;
- ifilter->height = par->height;
- ifilter->sample_aspect_ratio = par->sample_aspect_ratio;
- }
- }
-
if (!ifilter_has_all_input_formats(fg))
continue;
@@ -2214,6 +2197,22 @@ static int ifilter_send_eof(InputFilter *ifilter, int64_t pts)
} else {
// the filtergraph was never configured
FilterGraph *fg = ifilter->graph;
+ if (ifilter->format < 0) {
+ AVCodecParameters *par = ifilter->ist->st->codecpar;
+ // We never got any input. Set a fake format, which will
+ // come from libavformat.
+ ifilter->format = par->format;
+ ifilter->sample_rate = par->sample_rate;
+ ifilter->channels = par->channels;
+ ifilter->channel_layout = par->channel_layout;
+ ifilter->width = par->width;
+ ifilter->height = par->height;
+ ifilter->sample_aspect_ratio = par->sample_aspect_ratio;
+ }
+ 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 %d, stream %d after EOF\n", ifilter->ist->file_index, ifilter->ist->st->index);
+ return AVERROR_INVALIDDATA;
+ }
for (i = 0; i < fg->nb_inputs; i++)
if (!fg->inputs[i]->eof)
break;
--
2.13.6
More information about the ffmpeg-devel
mailing list