diff options
author | Anton Khirnov <anton@khirnov.net> | 2023-04-11 09:57:08 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2023-04-17 12:01:40 +0200 |
commit | 4358d4d8e71bc5ff205f43daac8448fc4953c794 (patch) | |
tree | 88232c1a58430f8672abf660f54f3cfac42e568e /fftools | |
parent | 4fc513b5e379dc4d45c8aa23af7d580708bbe4d9 (diff) | |
download | ffmpeg-4358d4d8e71bc5ff205f43daac8448fc4953c794.tar.gz |
fftools/ffmpeg: move a check to a more appropriate place
reap_filters() no longer needs to access the encoding context.
Diffstat (limited to 'fftools')
-rw-r--r-- | fftools/ffmpeg.c | 21 | ||||
-rw-r--r-- | 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 { |