aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2022-10-25 22:27:13 +0200
committerAnton Khirnov <anton@khirnov.net>2022-11-17 10:52:58 +0100
commit25620b69e0d3b4098add3242872f05cb0e641be5 (patch)
tree4e5dd86e9fc690030acf5768f3f764883fd76a95
parent6a8145a4b1bf0d4508978972a881e84758ab80d7 (diff)
downloadffmpeg-25620b69e0d3b4098add3242872f05cb0e641be5.tar.gz
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 <ullysses.a.eoff@intel.com>
-rw-r--r--fftools/ffmpeg.c12
1 files 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++;