[FFmpeg-devel] [PATCH 1/2] ffmpeg: fallback to codecpar parameters on input filter eof

wm4 nfxjfg at googlemail.com
Mon Mar 19 18:47:34 EET 2018


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?


More information about the ffmpeg-devel mailing list