diff options
author | Anton Khirnov <anton@khirnov.net> | 2022-06-19 15:05:20 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2022-07-28 16:37:16 +0200 |
commit | 1eae0ee02ee74dc1833e9610a1574fe25cc7a2f0 (patch) | |
tree | fc63979e1af14b74f8a6aa896b8c004194b25098 /fftools/ffmpeg.c | |
parent | 61e42e04eda6532f341a5a840a9e51bfc1030ee7 (diff) |
fftools/ffmpeg: do not use the encoder context for streamcopy
The streamcopy initialization code briefly needs an AVCodecContext to
apply AVOptions to. Allocate a temporary codec context, do not use the
encoding one.
Diffstat (limited to 'fftools/ffmpeg.c')
-rw-r--r-- | fftools/ffmpeg.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index ab2841f3d4..f98150660c 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -2757,22 +2757,29 @@ static int init_output_stream_streamcopy(OutputStream *ost) OutputFile *of = output_files[ost->file_index]; InputStream *ist = get_input_stream(ost); AVCodecParameters *par = ost->st->codecpar; + AVCodecContext *codec_ctx; AVRational sar; int i, ret; uint32_t codec_tag = par->codec_tag; av_assert0(ist && !ost->filter); - ret = avcodec_parameters_to_context(ost->enc_ctx, ist->st->codecpar); + codec_ctx = avcodec_alloc_context3(NULL); + if (!codec_ctx) + return AVERROR(ENOMEM); + + ret = avcodec_parameters_to_context(codec_ctx, ist->st->codecpar); if (ret >= 0) - ret = av_opt_set_dict(ost->enc_ctx, &ost->encoder_opts); + ret = av_opt_set_dict(codec_ctx, &ost->encoder_opts); if (ret < 0) { av_log(NULL, AV_LOG_FATAL, "Error setting up codec context options.\n"); + avcodec_free_context(&codec_ctx); return ret; } - ret = avcodec_parameters_from_context(par, ost->enc_ctx); + ret = avcodec_parameters_from_context(par, codec_ctx); + avcodec_free_context(&codec_ctx); if (ret < 0) { av_log(NULL, AV_LOG_FATAL, "Error getting reference codec parameters.\n"); |