summaryrefslogtreecommitdiffstats
path: root/player/osd.c
diff options
context:
space:
mode:
Diffstat (limited to 'player/osd.c')
-rw-r--r--player/osd.c43
1 files changed, 26 insertions, 17 deletions
diff --git a/player/osd.c b/player/osd.c
index 04b21a22f2..810e3f5514 100644
--- a/player/osd.c
+++ b/player/osd.c
@@ -458,23 +458,34 @@ void get_current_osd_sym(struct MPContext *mpctx, char *buf, size_t buf_size)
osd_get_function_sym(buf, buf_size, sym);
}
-static void sadd_osd_status(char **buffer, struct MPContext *mpctx, bool full)
+static void sadd_osd_status(char **buffer, struct MPContext *mpctx, int level)
{
- bool fractions = mpctx->opts->osd_fractions;
- char sym[10];
- get_current_osd_sym(mpctx, sym, sizeof(sym));
- saddf(buffer, "%s ", sym);
- char *custom_msg = mpctx->opts->osd_status_msg;
- if (custom_msg && full) {
- char *text = mp_property_expand_escaped_string(mpctx, custom_msg);
+ assert(level >= 0 && level <= 3);
+ if (level == 0)
+ return;
+ char *msg = mpctx->opts->osd_msg[level - 1];
+
+ if (msg && msg[0]) {
+ char *text = mp_property_expand_escaped_string(mpctx, msg);
*buffer = talloc_strdup_append(*buffer, text);
talloc_free(text);
- } else {
- sadd_hhmmssff(buffer, get_playback_time(mpctx), fractions);
- if (full) {
- saddf(buffer, " / ");
- sadd_hhmmssff(buffer, get_time_length(mpctx), fractions);
- sadd_percentage(buffer, get_percent_pos(mpctx));
+ } else if (level >= 2) {
+ bool fractions = mpctx->opts->osd_fractions;
+ char sym[10];
+ get_current_osd_sym(mpctx, sym, sizeof(sym));
+ saddf(buffer, "%s ", sym);
+ char *custom_msg = mpctx->opts->osd_status_msg;
+ if (custom_msg && level == 3) {
+ char *text = mp_property_expand_escaped_string(mpctx, custom_msg);
+ *buffer = talloc_strdup_append(*buffer, text);
+ talloc_free(text);
+ } else {
+ sadd_hhmmssff(buffer, get_playback_time(mpctx), fractions);
+ if (level == 3) {
+ saddf(buffer, " / ");
+ sadd_hhmmssff(buffer, get_time_length(mpctx), fractions);
+ sadd_percentage(buffer, get_percent_pos(mpctx));
+ }
}
}
}
@@ -547,9 +558,7 @@ void update_osd_msg(struct MPContext *mpctx)
// clear, or if OSD level demands it, show the status
char *text = NULL;
-
- if (osd_level >= 2)
- sadd_osd_status(&text, mpctx, osd_level == 3);
+ sadd_osd_status(&text, mpctx, osd_level);
osd_set_text(osd, OSDTYPE_OSD, text);
talloc_free(text);