diff options
author | Jan Ekström <jeebjp@gmail.com> | 2018-03-31 19:39:07 +0300 |
---|---|---|
committer | Jan Ekström <jeebjp@gmail.com> | 2018-04-01 13:56:31 +0300 |
commit | e760c12aeef608aa8b416664687b9aca3a2c6f68 (patch) | |
tree | 9fc2124fb5f35b2e22a2abda2c5de81c3f93f211 /fftools/ffmpeg.c | |
parent | be502ec6cde004e1fa05643282939bf3a1507922 (diff) | |
download | ffmpeg-e760c12aeef608aa8b416664687b9aca3a2c6f68.tar.gz |
ffmpeg: prevent premature EOF in sub2video with nullptr AVSubtitles
With certain types of input and the filter chain getting re-initialized
or re-configured, multiple nullptr AVSubtitles can get pushed into
sub2video_update() in a row from sub2video_heartbeat.
This causes end_pts, and on the next round pts, to become INT64_MAX,
latter of which signals EOF in framesync, leading to complete loss of
subtitles from that point on.
Thus, check that the sub2video.end_pts is smaller than INT64_MAX
in a similar fashion to sub2video_flush before sending out the
nullptr AVSubtitle. This keeps premature EOFs from happening in
framesync and the subtitle overlay is kept past the filter chain
re-initializations/configurations.
Diffstat (limited to 'fftools/ffmpeg.c')
-rw-r--r-- | fftools/ffmpeg.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 4724f62fff..d3bc382dec 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -285,7 +285,8 @@ static void sub2video_heartbeat(InputStream *ist, int64_t pts) /* do not send the heartbeat frame if the subtitle is already ahead */ if (pts2 <= ist2->sub2video.last_pts) continue; - if (pts2 >= ist2->sub2video.end_pts || !ist2->sub2video.frame->data[0]) + if (pts2 >= ist2->sub2video.end_pts || + (!ist2->sub2video.frame->data[0] && ist2->sub2video.end_pts < INT64_MAX)) sub2video_update(ist2, NULL); for (j = 0, nb_reqs = 0; j < ist2->nb_filters; j++) nb_reqs += av_buffersrc_get_nb_failed_requests(ist2->filters[j]->filter); |