diff options
-rw-r--r-- | DOCS/man/options.rst | 7 | ||||
-rw-r--r-- | options/options.c | 1 | ||||
-rw-r--r-- | options/options.h | 1 | ||||
-rw-r--r-- | player/sub.c | 3 |
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); |