summaryrefslogtreecommitdiffstats
path: root/command.c
diff options
context:
space:
mode:
authorwm4 <wm4@mplayer2.org>2011-10-23 05:26:30 +0200
committerwm4 <wm4@mplayer2.org>2012-07-28 20:57:40 +0200
commitaf7a29424c889ea6993561262539586d7ac1dc40 (patch)
tree447b540fd533af8844b8577661d38a22d9b8a104 /command.c
parentac771d288d5a34a10d193bd9352c8f5c744df20f (diff)
downloadmpv-af7a29424c889ea6993561262539586d7ac1dc40.tar.bz2
mpv-af7a29424c889ea6993561262539586d7ac1dc40.tar.xz
commands: add show_chapters_osd command to display chapters on OSD
The command lists the chapters in the current file on the OSD. It also marks the current chapter. This is actually a cheap replacement for the chapter select libmenu functionality.
Diffstat (limited to 'command.c')
-rw-r--r--command.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/command.c b/command.c
index a7446cb855..f7a0529eeb 100644
--- a/command.c
+++ b/command.c
@@ -2806,6 +2806,44 @@ static void clear_play_tree(MPContext *mpctx)
do_clear_pt(mpctx->playtree, exclude);
}
+static char *format_time(double time)
+{
+ int h, m, s = time;
+ h = s / 3600;
+ s -= h * 3600;
+ m = s / 60;
+ s -= m * 60;
+ return talloc_asprintf(NULL, "%02d:%02d:%02d", h, m, s);
+}
+
+static void show_chapters_on_osd(MPContext *mpctx)
+{
+ int count = get_chapter_count(mpctx);
+ int cur = mpctx->demuxer ? get_current_chapter(mpctx) : -1;
+ char *res = NULL;
+ int n;
+
+ if (count < 1) {
+ res = talloc_asprintf_append(res, "No chapters.");
+ }
+
+ for (n = 0; n < count; n++) {
+ char *name = chapter_display_name(mpctx, n);
+ double t = chapter_start_time(mpctx, n);
+ char* time = format_time(t);
+ res = talloc_asprintf_append(res, "%s", time);
+ talloc_free(time);
+ char *m1 = "> ", *m2 = " <";
+ if (n != cur)
+ m1 = m2 = "";
+ res = talloc_asprintf_append(res, " %s%s%s\n", m1, name, m2);
+ talloc_free(name);
+ }
+
+ set_osd_msg(OSD_MSG_TEXT, 1, mpctx->opts.osd_duration, "%s", res);
+ talloc_free(res);
+}
+
void run_command(MPContext *mpctx, mp_cmd_t *cmd)
{
struct MPOpts *opts = &mpctx->opts;
@@ -3622,6 +3660,9 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
af_reinit(sh_audio->afilter, af);
}
break;
+ case MP_CMD_SHOW_CHAPTERS:
+ show_chapters_on_osd(mpctx);
+ break;
default:
mp_msg(MSGT_CPLAYER, MSGL_V,