1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-28 20:53:54 +02:00

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>
This commit is contained in:
Anton Khirnov 2022-10-25 22:27:13 +02:00
parent 6a8145a4b1
commit 25620b69e0

View File

@ -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++;