From 25620b69e0d3b4098add3242872f05cb0e641be5 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Tue, 25 Oct 2022 22:27:13 +0200 Subject: [PATCH] fftools/ffmpeg: stop handling max_frames in do_video_out() Frame limiting is now handled using sync queues. This code prevents the sync queue from triggering EOF, resulting in unnecessarily many frames being decoded, filtered, and then discarded. Found-by: U. Artie Eoff --- fftools/ffmpeg.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 0fa2fe8c52..dfdfad3ce4 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -1206,14 +1206,6 @@ static void do_video_out(OutputFile *of, } } - /* - * For video, number of frames in == number of packets out. - * But there may be reordering, so we can't throw away frames on encoder - * flush, we need to limit them here, before they go into encoder. - */ - nb_frames = FFMIN(nb_frames, ost->max_frames - ost->vsync_frame_number); - nb0_frames = FFMIN(nb0_frames, nb_frames); - memmove(ost->last_nb0_frames + 1, ost->last_nb0_frames, sizeof(ost->last_nb0_frames[0]) * (FF_ARRAY_ELEMS(ost->last_nb0_frames) - 1)); @@ -1262,7 +1254,9 @@ static void do_video_out(OutputFile *of, in_picture->pict_type = forced_kf_apply(ost, in_picture, i); ret = submit_encode_frame(of, ost, in_picture); - if (ret < 0 && ret != AVERROR_EOF) + if (ret == AVERROR_EOF) + break; + else if (ret < 0) exit_program(1); ost->next_pts++;