[FFmpeg-cvslog] fftools/ffmpeg_filter: stop accessing encoder AVCodecContext
Anton Khirnov
git at videolan.org
Tue Apr 9 11:54:25 EEST 2024
ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Mon Apr 1 06:29:16 2024 +0200| [bc206ed1b3631801869b1bd4ddb3d3e4dd5f7aef] | committer: Anton Khirnov
fftools/ffmpeg_filter: stop accessing encoder AVCodecContext
Pass all the necessary value through OutputFilterOptions.
Will allow decoupling filtering from encoding in future commits.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=bc206ed1b3631801869b1bd4ddb3d3e4dd5f7aef
---
fftools/ffmpeg.h | 7 +++++++
fftools/ffmpeg_filter.c | 22 +++++++++++-----------
fftools/ffmpeg_mux_init.c | 6 ++++++
3 files changed, 24 insertions(+), 11 deletions(-)
diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h
index d0e896dbe7..598ca2fa96 100644
--- a/fftools/ffmpeg.h
+++ b/fftools/ffmpeg.h
@@ -282,6 +282,13 @@ typedef struct OutputFilterOptions {
// A combination of OFilterFlags.
unsigned flags;
+
+ int format;
+ int width;
+ int height;
+
+ int sample_rate;
+ AVChannelLayout ch_layout;
} OutputFilterOptions;
typedef struct InputFilter {
diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c
index 5661dc960a..3c25d2ed65 100644
--- a/fftools/ffmpeg_filter.c
+++ b/fftools/ffmpeg_filter.c
@@ -782,12 +782,12 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost,
ofp->ts_offset = opts->ts_offset;
ofp->enc_timebase = opts->output_tb;
- switch (ost->enc_ctx->codec_type) {
+ switch (ofilter->type) {
case AVMEDIA_TYPE_VIDEO:
- ofp->width = ost->enc_ctx->width;
- ofp->height = ost->enc_ctx->height;
- if (ost->enc_ctx->pix_fmt != AV_PIX_FMT_NONE) {
- ofp->format = ost->enc_ctx->pix_fmt;
+ ofp->width = opts->width;
+ ofp->height = opts->height;
+ if (opts->format != AV_PIX_FMT_NONE) {
+ ofp->format = opts->format;
} else if (opts->pix_fmts)
ofp->formats = opts->pix_fmts;
else if (opts->enc)
@@ -812,19 +812,19 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost,
break;
case AVMEDIA_TYPE_AUDIO:
- if (ost->enc_ctx->sample_fmt != AV_SAMPLE_FMT_NONE) {
- ofp->format = ost->enc_ctx->sample_fmt;
+ if (opts->format != AV_SAMPLE_FMT_NONE) {
+ ofp->format = opts->format;
} else if (opts->enc) {
ofp->formats = opts->enc->sample_fmts;
}
- if (ost->enc_ctx->sample_rate) {
- ofp->sample_rate = ost->enc_ctx->sample_rate;
+ if (opts->sample_rate) {
+ ofp->sample_rate = opts->sample_rate;
} else if (opts->enc) {
ofp->sample_rates = opts->enc->supported_samplerates;
}
- if (ost->enc_ctx->ch_layout.nb_channels) {
+ if (opts->ch_layout.nb_channels) {
int ret = set_channel_layout(ofp, opts->enc ? opts->enc->ch_layouts : NULL,
- &ost->enc_ctx->ch_layout);
+ &opts->ch_layout);
if (ret < 0)
return ret;
} else if (opts->enc) {
diff --git a/fftools/ffmpeg_mux_init.c b/fftools/ffmpeg_mux_init.c
index 04642f5c8b..b031cc59d2 100644
--- a/fftools/ffmpeg_mux_init.c
+++ b/fftools/ffmpeg_mux_init.c
@@ -1378,6 +1378,12 @@ static int ost_add(Muxer *mux, const OptionsContext *o, enum AVMediaType type,
(type == AVMEDIA_TYPE_VIDEO || type == AVMEDIA_TYPE_AUDIO)) {
OutputFilterOptions opts = {
.enc = enc,
+ .format = (type == AVMEDIA_TYPE_VIDEO) ?
+ ost->enc_ctx->pix_fmt : ost->enc_ctx->sample_fmt,
+ .width = ost->enc_ctx->width,
+ .height = ost->enc_ctx->height,
+ .sample_rate = ost->enc_ctx->sample_rate,
+ .ch_layout = ost->enc_ctx->ch_layout,
.output_tb = enc_tb,
.ts_offset = mux->of.start_time == AV_NOPTS_VALUE ?
0 : mux->of.start_time,
More information about the ffmpeg-cvslog
mailing list