[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