summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cfg-mplayer.h10
-rw-r--r--defaultopts.c2
-rw-r--r--mp_core.h1
-rw-r--r--mplayer.c26
4 files changed, 27 insertions, 12 deletions
diff --git a/cfg-mplayer.h b/cfg-mplayer.h
index 342fbccd62..a790b52fdc 100644
--- a/cfg-mplayer.h
+++ b/cfg-mplayer.h
@@ -907,7 +907,15 @@ const m_option_t mplayer_opts[]={
OPT_STRING("rtc-device", rtc_device, 0),
#endif
- OPT_MAKE_FLAGS("term-osd", term_osd, 0),
+ OPT_CHOICE("term-osd", term_osd, M_OPT_IMPLICIT_DEFAULT,
+ ({"force", 1},
+ {"auto", 2},
+ {"off", 0})),
+
+ // set term_osd to 0
+ // this is for compatibility
+ {"noterm-osd", NULL, &m_option_type_flag, 0, 1, 0, NULL, 1, offsetof(struct MPOpts, term_osd)},
+
OPT_STRING("term-osd-esc", term_osd_esc, 0),
OPT_STRING("playing-msg", playing_msg, 0),
diff --git a/defaultopts.c b/defaultopts.c
index a398c32417..16b4b808b9 100644
--- a/defaultopts.c
+++ b/defaultopts.c
@@ -30,7 +30,7 @@ void set_default_mplayer_options(struct MPOpts *opts)
.edition_id = -1,
.user_correct_pts = -1,
.initial_audio_sync = 1,
- .term_osd = 1,
+ .term_osd = 2,
.term_osd_esc = "\x1b[A\r\x1b[K",
.consolecontrols = 1,
.doubleclick_time = 300,
diff --git a/mp_core.h b/mp_core.h
index fbcd03b8ba..26ba1b764f 100644
--- a/mp_core.h
+++ b/mp_core.h
@@ -90,6 +90,7 @@ typedef struct MPContext {
struct mp_fifo *key_fifo;
struct input_ctx *input;
struct osd_state *osd;
+ char *terminal_osd_text;
struct sub_data *subdata; // current sub_data style subtitles if any
// last sub_data style sub line if any, used by log_sub() only
struct subtitle *vo_sub_last;
diff --git a/mplayer.c b/mplayer.c
index 97525bfbb7..e74f53d65d 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -1610,7 +1610,7 @@ void set_osd_bar(struct MPContext *mpctx, int type, const char *name,
if (opts->osd_level < 1)
return;
- if (mpctx->sh_video) {
+ if (mpctx->sh_video && opts->term_osd != 1) {
mpctx->osd_visible = (GetTimerMS() + 1000) | 1;
vo_osd_progbar_type = type;
vo_osd_progbar_value = 256 * (val - min) / (max - min);
@@ -1665,25 +1665,30 @@ static void update_osd_msg(struct MPContext *mpctx)
if (mpctx->add_osd_seek_info) {
double percentage = get_percent_pos(mpctx);
set_osd_bar(mpctx, 0, "Position", 0, 100, percentage);
- if (mpctx->sh_video)
+ if (mpctx->sh_video && opts->term_osd != 1)
mpctx->osd_show_percentage_until = (GetTimerMS() + 1000) | 1;
mpctx->add_osd_seek_info = false;
}
// Look if we have a msg
if ((msg = get_osd_msg(mpctx))) {
- if (strcmp(osd->osd_text, msg->msg)) {
- osd_set_text(osd, msg->msg);
- if (mpctx->sh_video)
+ if (mpctx->sh_video && opts->term_osd != 1) {
+ if (strcmp(osd->osd_text, msg->msg)) {
+ osd_set_text(osd, msg->msg);
vo_osd_changed(OSDTYPE_OSD);
- else if (opts->term_osd)
+ }
+ } else if (opts->term_osd) {
+ if (strcmp(mpctx->terminal_osd_text, msg->msg)) {
+ talloc_free(mpctx->terminal_osd_text);
+ mpctx->terminal_osd_text = talloc_strdup(mpctx, msg->msg);
mp_msg(MSGT_CPLAYER, MSGL_STATUS, "%s%s\n", opts->term_osd_esc,
- msg->msg);
+ mpctx->terminal_osd_text);
+ }
}
return;
}
- if (mpctx->sh_video) {
+ if (mpctx->sh_video && opts->term_osd != 1) {
// fallback on the timer
if (opts->osd_level >= 2) {
int len = get_time_length(mpctx);
@@ -1748,8 +1753,8 @@ static void update_osd_msg(struct MPContext *mpctx)
}
// Clear the term osd line
- if (opts->term_osd && osd->osd_text[0]) {
- osd->osd_text[0] = 0;
+ if (opts->term_osd && mpctx->terminal_osd_text[0]) {
+ mpctx->terminal_osd_text[0] = '\0';
printf("%s\n", opts->term_osd_esc);
}
}
@@ -3962,6 +3967,7 @@ int main(int argc, char *argv[])
.file_format = DEMUXER_TYPE_UNKNOWN,
.last_dvb_step = 1,
.paused_cache_fill = -1,
+ .terminal_osd_text = talloc_strdup(mpctx, ""),
};
InitTimer();