diff options
author | Anton Khirnov <anton@khirnov.net> | 2023-12-19 12:44:48 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2024-01-19 17:54:10 +0100 |
commit | 50448ca290811fe76192e89000b279f1361033f5 (patch) | |
tree | 846bba480909d01c3f3ad2b6bd289eba62c8c171 | |
parent | 2ee1c6ffb22aacb90f6513defc4b06948703e77f (diff) | |
download | ffmpeg-50448ca290811fe76192e89000b279f1361033f5.tar.gz |
fftools/ffmpeg_demux: only allocate the decoder when actually decoding
It is not needed otherwise.
-rw-r--r-- | fftools/ffmpeg_demux.c | 24 |
1 files 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"); + 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; } |