aboutsummaryrefslogtreecommitdiffstats
path: root/fftools/ffmpeg_mux.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2024-09-10 11:08:38 +0200
committerAnton Khirnov <anton@khirnov.net>2024-09-26 18:25:21 +0200
commit78038d51c5ba7eb449913b06f279d59c5d4d3162 (patch)
tree90f1dd7d7e38675d15c8b5b0556f6dc889765865 /fftools/ffmpeg_mux.c
parent238f439992f7e77609c2dc7ab6230da756c460b8 (diff)
downloadffmpeg-78038d51c5ba7eb449913b06f279d59c5d4d3162.tar.gz
fftools/ffmpeg_enc: do not set output stream codec parameters directly
Have the muxer code read them out of the encoder context in of_stream_init() instead. OutputStream.par_in no longer needs to be public, so can be moved to MuxStream. This is a step towards decoupling encoders from muxers.
Diffstat (limited to 'fftools/ffmpeg_mux.c')
-rw-r--r--fftools/ffmpeg_mux.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/fftools/ffmpeg_mux.c b/fftools/ffmpeg_mux.c
index 71a771052f..ea0bbeed32 100644
--- a/fftools/ffmpeg_mux.c
+++ b/fftools/ffmpeg_mux.c
@@ -581,9 +581,9 @@ static int bsf_init(MuxStream *ms)
int ret;
if (!ctx)
- return avcodec_parameters_copy(ost->st->codecpar, ost->par_in);
+ return avcodec_parameters_copy(ost->st->codecpar, ms->par_in);
- ret = avcodec_parameters_copy(ctx->par_in, ost->par_in);
+ ret = avcodec_parameters_copy(ctx->par_in, ms->par_in);
if (ret < 0)
return ret;
@@ -619,6 +619,13 @@ int of_stream_init(OutputFile *of, OutputStream *ost,
// use upstream time base unless it has been overridden previously
if (ost->st->time_base.num <= 0 || ost->st->time_base.den <= 0)
ost->st->time_base = av_add_q(enc_ctx->time_base, (AVRational){0, 1});
+
+ ret = avcodec_parameters_from_context(ms->par_in, enc_ctx);
+ if (ret < 0) {
+ av_log(ost, AV_LOG_FATAL,
+ "Error initializing the output stream codec parameters.\n");
+ return ret;
+ }
}
/* initialize bitstream filters for the output stream
@@ -813,7 +820,7 @@ static void ost_free(OutputStream **post)
ost->logfile = NULL;
}
- avcodec_parameters_free(&ost->par_in);
+ avcodec_parameters_free(&ms->par_in);
av_bsf_free(&ms->bsf_ctx);
av_packet_free(&ms->bsf_pkt);