summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--DOCS/man/options.rst7
-rw-r--r--options/options.c1
-rw-r--r--options/options.h1
-rw-r--r--player/sub.c3
4 files changed, 11 insertions, 1 deletions
diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst
index 4dfa459e00..fb111ded39 100644
--- a/DOCS/man/options.rst
+++ b/DOCS/man/options.rst
@@ -2597,6 +2597,13 @@ Subtitles
This works for ``dvb_teletext`` subtitle streams, and if FFmpeg has been
compiled with support for it.
+``--sub-past-video-end``
+ After the last frame of video, if this option is enabled, subtitles will
+ continue to update based on audio timestamps. Otherwise, the subtitles
+ for the last video frame will stay onscreen.
+
+ Default: disabled
+
``--sub-font=<name>``
Specify font to use for subtitles that do not themselves
specify a particular font. The default is ``sans-serif``.
diff --git a/options/options.c b/options/options.c
index 89ea4f85e0..ebeff51d23 100644
--- a/options/options.c
+++ b/options/options.c
@@ -275,6 +275,7 @@ const struct m_sub_options mp_subtitle_sub_opts = {
{"sub", OPT_SUBSTRUCT(sub_style, sub_style_conf)},
{"sub-clear-on-seek", OPT_FLAG(sub_clear_on_seek)},
{"teletext-page", OPT_INT(teletext_page), M_RANGE(1, 999)},
+ {"sub-past-video-end", OPT_FLAG(sub_past_video_end)},
{0}
},
.size = sizeof(OPT_BASE_STRUCT),
diff --git a/options/options.h b/options/options.h
index 6522057cd0..f0de6781ee 100644
--- a/options/options.h
+++ b/options/options.h
@@ -107,6 +107,7 @@ struct mp_subtitle_opts {
int ass_justify;
int sub_clear_on_seek;
int teletext_page;
+ int sub_past_video_end;
};
struct mp_sub_filter_opts {
diff --git a/player/sub.c b/player/sub.c
index ae2a85ac1c..49bae790de 100644
--- a/player/sub.c
+++ b/player/sub.c
@@ -114,7 +114,8 @@ static bool update_subtitle(struct MPContext *mpctx, double video_pts,
// Handle displaying subtitles on VO with no video being played. This is
// quite different, because normally subtitles are redrawn on new video
// frames, using the video frames' timestamps.
- if (mpctx->video_out && mpctx->video_status == STATUS_EOF) {
+ if (mpctx->video_out && mpctx->video_status == STATUS_EOF &&
+ mpctx->opts->subs_rend->sub_past_video_end) {
if (osd_get_force_video_pts(mpctx->osd) != video_pts) {
osd_set_force_video_pts(mpctx->osd, video_pts);
osd_query_and_reset_want_redraw(mpctx->osd);