summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--DOCS/man/options.rst23
-rw-r--r--options/options.c3
-rw-r--r--options/options.h2
-rw-r--r--player/osd.c13
4 files changed, 33 insertions, 8 deletions
diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst
index ec8f82349d..7cc66dcb8d 100644
--- a/DOCS/man/options.rst
+++ b/DOCS/man/options.rst
@@ -2890,6 +2890,17 @@ OSD
Default: 0.
+``--video-osd=<yes|no>``
+ Enabled OSD rendering on the video window (default: yes). This can be used
+ in situations where terminal OSD is preferred. If you just want to disable
+ all OSD rendering, use ``--osd-level=0``.
+
+ It does not affect subtitles or overlays created by scripts (in particular,
+ the OSC needs to be disabled with ``--no-osc``).
+
+ This option is somewhat experimental and could be replaced by another
+ mechanism in the future.
+
Screenshot
----------
@@ -3136,11 +3147,15 @@ Terminal
Only show warnings or worse, and let the ao_alsa output show errors
only.
-``--term-osd, --no-term-osd``, ``--term-osd=force``
- Display OSD messages on the console when no video output is available.
- Enabled by default.
+``--term-osd=<auto|no|force>``
+ Control whether OSD messages are shown on the console when no video output
+ is available (default: auto).
+
+ :auto: use terminal OSD if no video output active
+ :no: disable terminal OSD
+ :force: use terminal OSD even if video output active
- ``force`` enables terminal OSD even if a video window is created.
+ The ``auto`` mode also enables terminal OSD if ``--video-osd=no`` was set.
``--term-osd-bar``, ``--no-term-osd-bar``
Enable printing a progress bar under the status line on the terminal.
diff --git a/options/options.c b/options/options.c
index 0ef89650a3..129f0cc53c 100644
--- a/options/options.c
+++ b/options/options.c
@@ -589,6 +589,8 @@ const m_option_t mp_opts[] = {
OPT_STRING("osd-msg2", osd_msg[1], 0),
OPT_STRING("osd-msg3", osd_msg[2], 0),
+ OPT_FLAG("video-osd", video_osd, 0),
+
OPT_CHOICE("idle", player_idle_mode, 0,
({"no", 0},
{"once", 1},
@@ -739,6 +741,7 @@ const struct MPOpts mp_default_opts = {
.gamma_contrast = 1000,
.gamma_saturation = 1000,
.gamma_hue = 1000,
+ .video_osd = 1,
.osd_level = 1,
.osd_duration = 1000,
.osd_bar_align_y = 0.5,
diff --git a/options/options.h b/options/options.h
index 263caaa8de..187abc2c1a 100644
--- a/options/options.h
+++ b/options/options.h
@@ -127,6 +127,8 @@ typedef struct MPOpts {
int osd_level;
int osd_duration;
int osd_fractions;
+ int video_osd;
+
int untimed;
char *stream_capture;
char *stream_dump;
diff --git a/player/osd.c b/player/osd.c
index 48bf22b346..6f26e9361c 100644
--- a/player/osd.c
+++ b/player/osd.c
@@ -117,8 +117,8 @@ void term_osd_set_subs(struct MPContext *mpctx, const char *text)
static void term_osd_set_text_lazy(struct MPContext *mpctx, const char *text)
{
- if ((mpctx->video_out && mpctx->opts->term_osd != 1) ||
- !mpctx->opts->term_osd || !text)
+ bool video_osd = mpctx->video_out && mpctx->opts->video_osd;
+ if ((video_osd && mpctx->opts->term_osd != 1) || !text)
text = ""; // disable
talloc_free(mpctx->term_osd_text);
mpctx->term_osd_text = talloc_strdup(mpctx, text);
@@ -325,7 +325,8 @@ void set_osd_bar(struct MPContext *mpctx, int type,
double min, double max, double neutral, double val)
{
struct MPOpts *opts = mpctx->opts;
- if (opts->osd_level < 1 || !opts->osd_bar_visible || !mpctx->video_out)
+ bool video_osd = mpctx->video_out && mpctx->opts->video_osd;
+ if (opts->osd_level < 1 || !opts->osd_bar_visible || !video_osd)
return;
mpctx->osd_visible = mp_time_sec() + opts->osd_duration / 1000.0;
@@ -460,7 +461,8 @@ static void add_seek_osd_messages(struct MPContext *mpctx)
}
if (mpctx->add_osd_seek_info & OSD_SEEK_INFO_TEXT) {
// Never in term-osd mode
- if (mpctx->video_out && mpctx->opts->term_osd != 1) {
+ bool video_osd = mpctx->video_out && mpctx->opts->video_osd;
+ if (video_osd && mpctx->opts->term_osd != 1) {
if (set_osd_msg(mpctx, 1, mpctx->opts->osd_duration, ""))
mpctx->osd_show_pos = true;
}
@@ -564,6 +566,9 @@ void update_osd_msg(struct MPContext *mpctx)
term_osd_print_status_lazy(mpctx);
term_osd_update(mpctx);
+ if (!opts->video_osd)
+ return;
+
int osd_level = opts->osd_level;
if (mpctx->osd_show_pos)
osd_level = 3;