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 */
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);
}
}

View File

@ -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 {