[FFmpeg-cvslog] fftools/ffmpeg: move a check to a more appropriate place
Anton Khirnov
git at videolan.org
Mon Apr 17 13:07:08 EEST 2023
ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Tue Apr 11 09:57:08 2023 +0200| [4358d4d8e71bc5ff205f43daac8448fc4953c794] | committer: Anton Khirnov
fftools/ffmpeg: move a check to a more appropriate place
reap_filters() no longer needs to access the encoding context.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=4358d4d8e71bc5ff205f43daac8448fc4953c794
---
fftools/ffmpeg.c | 21 +--------------------
fftools/ffmpeg_enc.c | 7 +++++++
2 files changed, 8 insertions(+), 20 deletions(-)
diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c
index 0f43b7baa7..054a9ce88a 100644
--- a/fftools/ffmpeg.c
+++ b/fftools/ffmpeg.c
@@ -669,7 +669,6 @@ static int reap_filters(int flush)
/* Reap all buffers present in the buffer sinks */
for (OutputStream *ost = ost_iter(NULL); ost; ost = ost_iter(ost)) {
AVFilterContext *filter;
- AVCodecContext *enc = ost->enc_ctx;
int ret = 0;
if (!ost->filter || !ost->filter->graph->graph)
@@ -709,25 +708,7 @@ static int reap_filters(int flush)
tb.num, tb.den);
}
- switch (av_buffersink_get_type(filter)) {
- case AVMEDIA_TYPE_VIDEO:
- enc_frame(ost, filtered_frame);
- break;
- case AVMEDIA_TYPE_AUDIO:
- if (!(enc->codec->capabilities & AV_CODEC_CAP_PARAM_CHANGE) &&
- avcodec_is_open(enc) &&
- enc->ch_layout.nb_channels != filtered_frame->ch_layout.nb_channels) {
- av_log(NULL, AV_LOG_ERROR,
- "Audio filter graph output is not normalized and encoder does not support parameter changes\n");
- break;
- }
- enc_frame(ost, filtered_frame);
- break;
- default:
- // TODO support subtitle filters
- av_assert0(0);
- }
-
+ enc_frame(ost, filtered_frame);
av_frame_unref(filtered_frame);
}
}
diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c
index 0236e50e38..063053623f 100644
--- a/fftools/ffmpeg_enc.c
+++ b/fftools/ffmpeg_enc.c
@@ -789,6 +789,13 @@ static void do_audio_out(OutputFile *of, OutputStream *ost,
AVCodecContext *enc = ost->enc_ctx;
int ret;
+ if (!(enc->codec->capabilities & AV_CODEC_CAP_PARAM_CHANGE) &&
+ enc->ch_layout.nb_channels != frame->ch_layout.nb_channels) {
+ av_log(ost, AV_LOG_ERROR,
+ "Audio channel count changed and encoder does not support parameter changes\n");
+ return;
+ }
+
if (frame->pts == AV_NOPTS_VALUE)
frame->pts = e->next_pts;
else {
More information about the ffmpeg-cvslog
mailing list