[FFmpeg-devel] [PATCH 1/2] ffmpeg: fallback to codecpar parameters on input filter eof
Marton Balint
cus at passwd.hu
Mon Mar 19 21:01:40 EET 2018
On Mon, 19 Mar 2018, wm4 wrote:
> On Sun, 18 Mar 2018 20:09:08 +0100
> Marton Balint <cus at passwd.hu> wrote:
>
>> 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;
>
> Does it make sense to mux audio or video without packets? And why?
Because filters may generate packets on output even if no packets are
received on some input.
Regards,
Marton
More information about the ffmpeg-devel
mailing list