[FFmpeg-devel] [PATCH 5/8] fftools/ffmpeg_demux: only allocate the decoder when actually decoding

Stefano Sabatini stefasab at gmail.com
Sat Jan 6 13:34:53 EET 2024


On date Friday 2024-01-05 17:42:48 +0100, Anton Khirnov wrote:
> It is not needed otherwise.
> ---
>  fftools/ffmpeg_demux.c | 24 ++++++++++++------------
>  1 file changed, 12 insertions(+), 12 deletions(-)
> 
> diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c
> index 892094c512..c51140b1c5 100644
> --- a/fftools/ffmpeg_demux.c
> +++ b/fftools/ffmpeg_demux.c
> @@ -782,6 +782,16 @@ static int ist_use(InputStream *ist, int decoding_needed)
>      if (decoding_needed && ds->sch_idx_dec < 0) {
>          int is_audio = ist->st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO;
>  
> +        ist->dec_ctx = avcodec_alloc_context3(ist->dec);
> +        if (!ist->dec_ctx)
> +            return AVERROR(ENOMEM);
> +
> +        ret = avcodec_parameters_to_context(ist->dec_ctx, ist->par);
> +        if (ret < 0) {

> +            av_log(ist, AV_LOG_ERROR, "Error initializing the decoder context.\n");

unrelated, here and below: might be useful to notify the failing
stream identifier, assuming it is not already shown in the log

> +            return ret;
> +        }
> +
>          ret = sch_add_dec(d->sch, decoder_thread, ist, d->loop && is_audio);
>          if (ret < 0)
>              return ret;
> @@ -1215,23 +1225,13 @@ static int ist_add(const OptionsContext *o, Demuxer *d, AVStream *st)
>      default: av_assert0(0);
>      }
>  
> -    ist->dec_ctx = avcodec_alloc_context3(ist->dec);
> -    if (!ist->dec_ctx)
> -        return AVERROR(ENOMEM);
> -
> -    ret = avcodec_parameters_to_context(ist->dec_ctx, par);
> -    if (ret < 0) {
> -        av_log(ist, AV_LOG_ERROR, "Error initializing the decoder context.\n");
> -        return ret;
> -    }
> -
>      ist->par = avcodec_parameters_alloc();
>      if (!ist->par)
>          return AVERROR(ENOMEM);
>  
> -    ret = avcodec_parameters_from_context(ist->par, ist->dec_ctx);
> +    ret = avcodec_parameters_copy(ist->par, par);
>      if (ret < 0) {
> -        av_log(ist, AV_LOG_ERROR, "Error initializing the decoder context.\n");
> +        av_log(ist, AV_LOG_ERROR, "Error exporting stream parameters.\n");
>          return ret;
>      }

LGTM anyway.


More information about the ffmpeg-devel mailing list