aboutsummaryrefslogtreecommitdiffstats
path: root/fftools/ffmpeg_demux.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2023-12-19 12:44:48 +0100
committerAnton Khirnov <anton@khirnov.net>2024-01-19 17:54:10 +0100
commit50448ca290811fe76192e89000b279f1361033f5 (patch)
tree846bba480909d01c3f3ad2b6bd289eba62c8c171 /fftools/ffmpeg_demux.c
parent2ee1c6ffb22aacb90f6513defc4b06948703e77f (diff)
downloadffmpeg-50448ca290811fe76192e89000b279f1361033f5.tar.gz
fftools/ffmpeg_demux: only allocate the decoder when actually decoding
It is not needed otherwise.
Diffstat (limited to 'fftools/ffmpeg_demux.c')
-rw-r--r--fftools/ffmpeg_demux.c24
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;
}