summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--command.c68
-rw-r--r--input/input.c66
-rw-r--r--input/input.h12
-rw-r--r--mp_osd.h1
-rw-r--r--mplayer.c2
5 files changed, 89 insertions, 60 deletions
diff --git a/command.c b/command.c
index 56885ef179..9a94ceea08 100644
--- a/command.c
+++ b/command.c
@@ -558,7 +558,6 @@ static int mp_property_editions(m_option_t *prop, int action, void *arg,
static int mp_property_angle(m_option_t *prop, int action, void *arg,
MPContext *mpctx)
{
- struct MPOpts *opts = &mpctx->opts;
struct demuxer *demuxer = mpctx->master_demuxer;
int angle = -1;
int angles;
@@ -618,8 +617,6 @@ static int mp_property_angle(m_option_t *prop, int action, void *arg,
resync_audio_stream(sh_audio);
}
- set_osd_tmsg(mpctx, OSD_MSG_TEXT, 1, opts->osd_duration,
- "Angle: %d/%d", angle, angles);
return M_PROPERTY_OK;
}
@@ -1897,6 +1894,7 @@ static struct property_osd_display {
{ "saturation", _("Saturation"), .osd_progbar = OSD_SATURATION },
{ "hue", _("Hue"), .osd_progbar = OSD_HUE },
{ "vsync", _("VSync: %s") },
+ { "angle", _("Angle: %s") },
// subs
{ "sub", _("Subtitles: %s") },
{ "sub_pos", _("Sub position: %s/100") },
@@ -2065,31 +2063,32 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
sh_audio_t *const sh_audio = mpctx->sh_audio;
sh_video_t *const sh_video = mpctx->sh_video;
int osd_duration = opts->osd_duration;
+ int osdl = cmd->on_osd ? 1 : OSD_LEVEL_INVISIBLE;
int case_fallthrough_hack = 0;
switch (cmd->id) {
case MP_CMD_SEEK: {
- mpctx->add_osd_seek_info = true;
float v = cmd->args[0].v.f;
int abs = (cmd->nargs > 1) ? cmd->args[1].v.i : 0;
int exact = (cmd->nargs > 2) ? cmd->args[2].v.i : 0;
+ int function;
if (abs == 2) { // Absolute seek to a timestamp in seconds
queue_seek(mpctx, MPSEEK_ABSOLUTE, v, exact);
- mpctx->osd_function = v > get_current_time(mpctx) ?
- OSD_FFW : OSD_REW;
+ function = v > get_current_time(mpctx) ? OSD_FFW : OSD_REW;
} else if (abs) { /* Absolute seek by percentage */
queue_seek(mpctx, MPSEEK_FACTOR, v / 100.0, exact);
- mpctx->osd_function = OSD_FFW; // Direction isn't set correctly
+ function = OSD_FFW; // Direction isn't set correctly
} else {
queue_seek(mpctx, MPSEEK_RELATIVE, v, exact);
- mpctx->osd_function = (v > 0) ? OSD_FFW : OSD_REW;
+ function = (v > 0) ? OSD_FFW : OSD_REW;
+ }
+ if (cmd->on_osd) {
+ mpctx->add_osd_seek_info = true;
+ mpctx->osd_function = function;
}
break;
}
- case MP_CMD_SET_PROPERTY_OSD:
- case_fallthrough_hack = 1;
-
- case MP_CMD_SET_PROPERTY: {
+ case MP_CMD_SET: {
int r = mp_property_do(cmd->args[0].v.s, M_PROPERTY_PARSE,
cmd->args[1].v.s, mpctx);
if (r == M_PROPERTY_UNKNOWN)
@@ -2099,7 +2098,7 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
mp_msg(MSGT_CPLAYER, MSGL_WARN,
"Failed to set property '%s' to '%s'.\n",
cmd->args[0].v.s, cmd->args[1].v.s);
- else if (case_fallthrough_hack)
+ else if (cmd->on_osd)
show_property_osd(mpctx, cmd->args[0].v.s);
if (r <= 0)
mp_msg(MSGT_GLOBAL, MSGL_INFO,
@@ -2107,10 +2106,7 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
break;
}
- case MP_CMD_STEP_PROPERTY_OSD:
- case_fallthrough_hack = 1;
-
- case MP_CMD_STEP_PROPERTY: {
+ case MP_CMD_SWITCH: {
void *arg = NULL;
int r, i;
double d;
@@ -2149,7 +2145,7 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
mp_msg(MSGT_CPLAYER, MSGL_WARN,
"Failed to increment property '%s' by %f.\n",
cmd->args[0].v.s, cmd->args[1].v.f);
- else if (case_fallthrough_hack)
+ else if (cmd->on_osd)
show_property_osd(mpctx, cmd->args[0].v.s);
if (r <= 0)
mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_ERROR=%s\n",
@@ -2209,7 +2205,8 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
case MP_CMD_SPEED_INCR: {
float v = cmd->args[0].v.f;
mp_property_do("speed", M_PROPERTY_STEP_UP, &v, mpctx);
- show_property_osd(mpctx, "speed");
+ if (cmd->on_osd)
+ show_property_osd(mpctx, "speed");
break;
}
@@ -2221,7 +2218,8 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
if (case_fallthrough_hack)
v *= mpctx->opts.playback_speed;
mp_property_do("speed", M_PROPERTY_SET, &v, mpctx);
- show_property_osd(mpctx, "speed");
+ if (cmd->on_osd)
+ show_property_osd(mpctx, "speed");
break;
}
@@ -2267,7 +2265,7 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
}
#endif
if (available)
- set_osd_tmsg(mpctx, OSD_MSG_SUB_DELAY, 1, osd_duration,
+ set_osd_tmsg(mpctx, OSD_MSG_SUB_DELAY, osdl, osd_duration,
"Sub delay: %d ms", ROUND(sub_delay * 1000));
}
break;
@@ -2282,9 +2280,7 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
opts->osd_level = (opts->osd_level + 1) % (max + 1);
else
opts->osd_level = v > max ? max : v;
- /* Show OSD state when disabled, but not when an explicit
- argument is given to the OSD command, i.e. in slave mode. */
- if (v == -1 && opts->osd_level <= 1)
+ if (cmd->on_osd && opts->osd_level <= 1)
set_osd_tmsg(mpctx, OSD_MSG_OSD_STATUS, 0, osd_duration,
"OSD: %s",
opts->osd_level ? mp_gtext("enabled") :
@@ -2386,7 +2382,7 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
else
radio_step_channel(mpctx->stream, RADIO_CHANNEL_LOWER);
if (radio_get_channel_name(mpctx->stream)) {
- set_osd_tmsg(OSD_MSG_RADIO_CHANNEL, 1, osd_duration,
+ set_osd_tmsg(OSD_MSG_RADIO_CHANNEL, osdl, osd_duration,
"Channel: %s",
radio_get_channel_name(mpctx->stream));
}
@@ -2397,7 +2393,7 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
if (mpctx->stream && mpctx->stream->type == STREAMTYPE_RADIO) {
radio_set_channel(mpctx->stream, cmd->args[0].v.s);
if (radio_get_channel_name(mpctx->stream)) {
- set_osd_tmsg(OSD_MSG_RADIO_CHANNEL, 1, osd_duration,
+ set_osd_tmsg(OSD_MSG_RADIO_CHANNEL, osdl, osd_duration,
"Channel: %s",
radio_get_channel_name(mpctx->stream));
}
@@ -2426,7 +2422,7 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
#ifdef CONFIG_PVR
else if (mpctx->stream && mpctx->stream->type == STREAMTYPE_PVR) {
pvr_set_freq(mpctx->stream, ROUND(cmd->args[0].v.f));
- set_osd_msg(mpctx, OSD_MSG_TV_CHANNEL, 1, osd_duration, "%s: %s",
+ set_osd_msg(mpctx, OSD_MSG_TV_CHANNEL, osdl, osd_duration, "%s: %s",
pvr_get_current_channelname(mpctx->stream),
pvr_get_current_stationname(mpctx->stream));
}
@@ -2439,7 +2435,7 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
#ifdef CONFIG_PVR
else if (mpctx->stream && mpctx->stream->type == STREAMTYPE_PVR) {
pvr_force_freq_step(mpctx->stream, ROUND(cmd->args[0].v.f));
- set_osd_msg(mpctx, OSD_MSG_TV_CHANNEL, 1, osd_duration, "%s: f %d",
+ set_osd_msg(mpctx, OSD_MSG_TV_CHANNEL, osdl, osd_duration, "%s: f %d",
pvr_get_current_channelname(mpctx->stream),
pvr_get_current_frequency(mpctx->stream));
}
@@ -2460,7 +2456,7 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
tv_step_channel(get_tvh(mpctx), TV_CHANNEL_LOWER);
}
if (tv_channel_list) {
- set_osd_tmsg(mpctx, OSD_MSG_TV_CHANNEL, 1, osd_duration,
+ set_osd_tmsg(mpctx, OSD_MSG_TV_CHANNEL, osdl, osd_duration,
"Channel: %s", tv_channel_current->name);
//vo_osd_changed(OSDTYPE_SUBTITLE);
}
@@ -2469,7 +2465,7 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
else if (mpctx->stream &&
mpctx->stream->type == STREAMTYPE_PVR) {
pvr_set_channel_step(mpctx->stream, cmd->args[0].v.i);
- set_osd_msg(mpctx, OSD_MSG_TV_CHANNEL, 1, osd_duration, "%s: %s",
+ set_osd_msg(mpctx, OSD_MSG_TV_CHANNEL, osdl, osd_duration, "%s: %s",
pvr_get_current_channelname(mpctx->stream),
pvr_get_current_stationname(mpctx->stream));
}
@@ -2498,7 +2494,7 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
if (get_tvh(mpctx)) {
tv_set_channel(get_tvh(mpctx), cmd->args[0].v.s);
if (tv_channel_list) {
- set_osd_tmsg(mpctx, OSD_MSG_TV_CHANNEL, 1, osd_duration,
+ set_osd_tmsg(mpctx, OSD_MSG_TV_CHANNEL, osdl, osd_duration,
"Channel: %s", tv_channel_current->name);
//vo_osd_changed(OSDTYPE_SUBTITLE);
}
@@ -2506,7 +2502,7 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
#ifdef CONFIG_PVR
else if (mpctx->stream && mpctx->stream->type == STREAMTYPE_PVR) {
pvr_set_channel(mpctx->stream, cmd->args[0].v.s);
- set_osd_msg(mpctx, OSD_MSG_TV_CHANNEL, 1, osd_duration, "%s: %s",
+ set_osd_msg(mpctx, OSD_MSG_TV_CHANNEL, osdl, osd_duration, "%s: %s",
pvr_get_current_channelname(mpctx->stream),
pvr_get_current_stationname(mpctx->stream));
}
@@ -2531,7 +2527,7 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
if (get_tvh(mpctx)) {
tv_last_channel(get_tvh(mpctx));
if (tv_channel_list) {
- set_osd_tmsg(mpctx, OSD_MSG_TV_CHANNEL, 1, osd_duration,
+ set_osd_tmsg(mpctx, OSD_MSG_TV_CHANNEL, osdl, osd_duration,
"Channel: %s", tv_channel_current->name);
//vo_osd_changed(OSDTYPE_SUBTITLE);
}
@@ -2539,7 +2535,7 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
#ifdef CONFIG_PVR
else if (mpctx->stream && mpctx->stream->type == STREAMTYPE_PVR) {
pvr_set_lastchannel(mpctx->stream);
- set_osd_msg(mpctx, OSD_MSG_TV_CHANNEL, 1, osd_duration, "%s: %s",
+ set_osd_msg(mpctx, OSD_MSG_TV_CHANNEL, osdl, osd_duration, "%s: %s",
pvr_get_current_channelname(mpctx->stream),
pvr_get_current_stationname(mpctx->stream));
}
@@ -2599,9 +2595,9 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
mp_msg(MSGT_CPLAYER, MSGL_INFO, "Setting vo cmd line to '%s'.\n",
s);
if (vo_control(mpctx->video_out, VOCTRL_SET_COMMAND_LINE, s) > 0) {
- set_osd_msg(mpctx, OSD_MSG_TEXT, 1, osd_duration, "vo='%s'", s);
+ set_osd_msg(mpctx, OSD_MSG_TEXT, osdl, osd_duration, "vo='%s'", s);
} else {
- set_osd_msg(mpctx, OSD_MSG_TEXT, 1, osd_duration, "Failed!");
+ set_osd_msg(mpctx, OSD_MSG_TEXT, osdl, osd_duration, "Failed!");
}
}
break;
diff --git a/input/input.c b/input/input.c
index a2bc7d838a..5d3ab686df 100644
--- a/input/input.c
+++ b/input/input.c
@@ -138,11 +138,9 @@ static const mp_cmd_t mp_cmds[] = {
{ MP_CMD_RUN, "run", { ARG_STRING } },
{ MP_CMD_KEYDOWN_EVENTS, "key_down_event", { ARG_INT } },
- { MP_CMD_SET_PROPERTY, "set_property", { ARG_STRING, ARG_STRING } },
- { MP_CMD_SET_PROPERTY_OSD, "set_property_osd", { ARG_STRING, ARG_STRING } },
+ { MP_CMD_SET, "set", { ARG_STRING, ARG_STRING } },
{ MP_CMD_GET_PROPERTY, "get_property", { ARG_STRING } },
- { MP_CMD_STEP_PROPERTY, "step_property", { ARG_STRING, OARG_FLOAT(0), OARG_INT(0) } },
- { MP_CMD_STEP_PROPERTY_OSD, "step_property_osd", { ARG_STRING, OARG_FLOAT(0), OARG_INT(0) } },
+ { MP_CMD_SWITCH, "switch", { ARG_STRING, OARG_FLOAT(0), OARG_INT(0) } },
{ MP_CMD_SET_MOUSE_POS, "set_mouse_pos", { ARG_INT, ARG_INT } },
@@ -164,40 +162,44 @@ static const mp_cmd_t mp_cmds[] = {
struct legacy_cmd {
const char *old, *new;
};
-#define LEGACY_STEP(old) {old, "step_property_osd " old}
+#define LEGACY_STEP(old) {old, "switch " old}
static const struct legacy_cmd legacy_cmds[] = {
LEGACY_STEP("loop"),
- {"seek_chapter", "step_property_osd chapter"},
- {"switch_angle", "step_property_osd angle"},
+ {"seek_chapter", "switch chapter"},
+ {"switch_angle", "switch angle"},
LEGACY_STEP("pause"),
LEGACY_STEP("volume"),
LEGACY_STEP("mute"),
LEGACY_STEP("audio_delay"),
LEGACY_STEP("switch_audio"),
LEGACY_STEP("balance"),
- {"vo_fullscreen", "step_property fullscreen"},
+ {"vo_fullscreen", "no-osd switch fullscreen"},
LEGACY_STEP("panscan"),
- {"vo_ontop", "step_property_osd ontop"},
- {"vo_rootwin", "step_property_osd rootwin"},
- {"vo_border", "step_property_osd border"},
- {"frame_drop", "step_property_osd framedropping"},
+ {"vo_ontop", "switch ontop"},
+ {"vo_rootwin", "switch rootwin"},
+ {"vo_border", "switch border"},
+ {"frame_drop", "switch framedropping"},
LEGACY_STEP("gamma"),
LEGACY_STEP("brightness"),
LEGACY_STEP("contrast"),
LEGACY_STEP("saturation"),
LEGACY_STEP("hue"),
- {"switch_vsync", "step_property_osd vsync"},
- {"sub_select", "step_property_osd sub"},
+ {"switch_vsync", "switch vsync"},
+ {"sub_select", "switch sub"},
LEGACY_STEP("sub_pos"),
LEGACY_STEP("sub_delay"),
LEGACY_STEP("sub_visibility"),
- {"forced_subs_only", "step_property_osd sub_forced_only"},
+ {"forced_subs_only", "switch sub_forced_only"},
LEGACY_STEP("sub_scale"),
LEGACY_STEP("ass_use_margins"),
{"tv_set_brightness", "tv_brightness"},
{"tv_set_hue", "tv_hue"},
{"tv_set_saturation", "tv_saturation"},
{"tv_set_contrast", "tv_contrast"},
+ {"step_property_osd", "switch"},
+ {"step_property", "no-osd switch"},
+ {"set_property", "no-osd set"},
+ {"set_property_osd", "set"},
{"pt_step 1", "playlist_next"},
{"pt_step -1", "playlist_prev"},
{0}
@@ -686,18 +688,31 @@ int mp_input_add_key_fd(struct input_ctx *ictx, int fd, int select,
return 1;
}
+static char *skip_ws(char *str)
+{
+ while (str[0] == ' ' || str[0] == '\t')
+ ++str;
+ return str;
+}
+
+static char *skip_no_ws(char *str)
+{
+ while (str[0] && !(str[0] == ' ' || str[0] == '\t'))
+ ++str;
+ return str;
+}
+
mp_cmd_t *mp_input_parse_cmd(char *str)
{
int i, l;
int pausing = 0;
+ int on_osd = MP_ON_OSD_AUTO;
char *ptr;
const mp_cmd_t *cmd_def;
mp_cmd_t *cmd = NULL;
void *tmp = NULL;
- // Ignore heading spaces.
- while (str[0] == ' ' || str[0] == '\t')
- ++str;
+ str = skip_ws(str);
if (strncmp(str, "pausing ", 8) == 0) {
pausing = 1;
@@ -713,6 +728,8 @@ mp_cmd_t *mp_input_parse_cmd(char *str)
str = &str[19];
}
+ str = skip_ws(str);
+
for (const struct legacy_cmd *entry = legacy_cmds; entry->old; entry++) {
size_t old_len = strlen(entry->old);
if (strncasecmp(entry->old, str, old_len) == 0) {
@@ -725,7 +742,14 @@ mp_cmd_t *mp_input_parse_cmd(char *str)
}
}
- ptr = str + strcspn(str, "\t ");
+ str = skip_ws(str);
+
+ if (strncmp(str, "no-osd ", 7) == 0) {
+ on_osd = MP_ON_OSD_NO;
+ str = &str[7];
+ }
+
+ ptr = skip_no_ws(str);
if (*ptr != 0)
l = ptr - str;
else
@@ -735,7 +759,8 @@ mp_cmd_t *mp_input_parse_cmd(char *str)
goto error;
for (i = 0; mp_cmds[i].name != NULL; i++) {
- if (strncasecmp(mp_cmds[i].name, str, l) == 0)
+ const char *cmd = mp_cmds[i].name;
+ if (strncasecmp(cmd, str, l) == 0 && strlen(cmd) == l)
break;
}
@@ -749,6 +774,7 @@ mp_cmd_t *mp_input_parse_cmd(char *str)
.id = cmd_def->id,
.name = talloc_strdup(cmd, cmd_def->name),
.pausing = pausing,
+ .on_osd = on_osd,
};
ptr = str;
diff --git a/input/input.h b/input/input.h
index 719fdf840a..af9d1a8db0 100644
--- a/input/input.h
+++ b/input/input.h
@@ -51,8 +51,7 @@ enum mp_command_type {
MP_CMD_RUN,
MP_CMD_SUB_LOAD,
MP_CMD_KEYDOWN_EVENTS,
- MP_CMD_SET_PROPERTY,
- MP_CMD_SET_PROPERTY_OSD,
+ MP_CMD_SET,
MP_CMD_GET_PROPERTY,
MP_CMD_OSD_SHOW_PROPERTY_TEXT,
MP_CMD_OSD_SHOW_PROGRESSION,
@@ -60,8 +59,7 @@ enum mp_command_type {
MP_CMD_RADIO_SET_CHANNEL,
MP_CMD_RADIO_SET_FREQ,
MP_CMD_SET_MOUSE_POS,
- MP_CMD_STEP_PROPERTY,
- MP_CMD_STEP_PROPERTY_OSD,
+ MP_CMD_SWITCH,
MP_CMD_RADIO_STEP_FREQ,
MP_CMD_TV_STEP_FREQ,
MP_CMD_TV_START_SCAN,
@@ -104,6 +102,11 @@ enum mp_command_type {
// Key FIFO was full - release events may be lost, zero button-down status
#define MP_INPUT_RELEASE_ALL -5
+enum mp_on_osd {
+ MP_ON_OSD_NO = 0,
+ MP_ON_OSD_AUTO,
+};
+
enum mp_input_section_flags {
// If a key binding is not defined in the current section, search the
// default section for it ("default" refers to bindings with no section
@@ -129,6 +132,7 @@ typedef struct mp_cmd {
struct mp_cmd_arg args[MP_CMD_MAX_ARGS];
int nargs;
int pausing;
+ enum mp_on_osd on_osd;
struct mp_cmd *queue_next;
} mp_cmd_t;
diff --git a/mp_osd.h b/mp_osd.h
index a6797ed318..86eed3a142 100644
--- a/mp_osd.h
+++ b/mp_osd.h
@@ -33,6 +33,7 @@
#define MAX_OSD_LEVEL 3
#define MAX_TERM_OSD_LEVEL 1
+#define OSD_LEVEL_INVISIBLE 4
struct MPContext;
diff --git a/mplayer.c b/mplayer.c
index d0abca3112..2d1843203f 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -1240,6 +1240,8 @@ static mp_osd_msg_t *add_osd_msg(struct MPContext *mpctx, int id, int level,
static void set_osd_msg_va(struct MPContext *mpctx, int id, int level, int time,
const char *fmt, va_list ap)
{
+ if (level == OSD_LEVEL_INVISIBLE)
+ return;
mp_osd_msg_t *msg = add_osd_msg(mpctx, id, level, time);
msg->msg = talloc_vasprintf(msg, fmt, ap);
}