1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-15 14:13:16 +02:00

fftools/ffmpeg: move a check to a more appropriate place

reap_filters() no longer needs to access the encoding context.
This commit is contained in:
Anton Khirnov
2023-04-11 09:57:08 +02:00
parent 4fc513b5e3
commit 4358d4d8e7
2 changed files with 8 additions and 20 deletions

View File

@@ -669,7 +669,6 @@ static int reap_filters(int flush)
/* Reap all buffers present in the buffer sinks */ /* Reap all buffers present in the buffer sinks */
for (OutputStream *ost = ost_iter(NULL); ost; ost = ost_iter(ost)) { for (OutputStream *ost = ost_iter(NULL); ost; ost = ost_iter(ost)) {
AVFilterContext *filter; AVFilterContext *filter;
AVCodecContext *enc = ost->enc_ctx;
int ret = 0; int ret = 0;
if (!ost->filter || !ost->filter->graph->graph) if (!ost->filter || !ost->filter->graph->graph)
@@ -709,25 +708,7 @@ static int reap_filters(int flush)
tb.num, tb.den); tb.num, tb.den);
} }
switch (av_buffersink_get_type(filter)) { enc_frame(ost, filtered_frame);
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);
}
av_frame_unref(filtered_frame); av_frame_unref(filtered_frame);
} }
} }

View File

@@ -789,6 +789,13 @@ static void do_audio_out(OutputFile *of, OutputStream *ost,
AVCodecContext *enc = ost->enc_ctx; AVCodecContext *enc = ost->enc_ctx;
int ret; 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) if (frame->pts == AV_NOPTS_VALUE)
frame->pts = e->next_pts; frame->pts = e->next_pts;
else { else {