summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrrooij <rderooij685@gmail.com>2015-05-18 22:56:56 +0200
committerwm4 <wm4@nowhere>2015-05-19 21:33:40 +0200
commite17a8550c408e3ecbe8b1d33dbab694eabe2c713 (patch)
tree9f37b7918f8efe3f991255e464926bbb472d775b
parentbe9bf4cc7c1b61a8abcbb3f64386ef10d8aa9f61 (diff)
downloadmpv-e17a8550c408e3ecbe8b1d33dbab694eabe2c713.tar.bz2
mpv-e17a8550c408e3ecbe8b1d33dbab694eabe2c713.tar.xz
input: add relative percentage seek
Only absolute percentage seeking was permitted first. It is now also possible to seek by relative percentage. MPSEEK_FACTOR is used as seek_type. Fixes #1950. Signed-off-by: wm4 <wm4@nowhere>
-rw-r--r--DOCS/man/input.rst4
-rw-r--r--input/cmd_list.c1
-rw-r--r--player/command.c5
3 files changed, 9 insertions, 1 deletions
diff --git a/DOCS/man/input.rst b/DOCS/man/input.rst
index d23727e898..4ae7ae9da6 100644
--- a/DOCS/man/input.rst
+++ b/DOCS/man/input.rst
@@ -86,7 +86,7 @@ List of Input Commands
disabling default bindings, without disabling all bindings with
``--no-input-default-bindings``.
-``seek <seconds> [relative|absolute|absolute-percent|exact|keyframes]``
+``seek <seconds> [relative|absolute|absolute-percent|relative-percent|exact|keyframes]``
Change the playback position. By default, seeks by a relative amount of
seconds.
@@ -98,6 +98,8 @@ List of Input Commands
Seek to a given time.
absolute-percent
Seek to a given percent position.
+ relative-percent
+ Seek relative to current position in percent.
keyframes
Always restart playback at keyframe boundaries (fast).
exact
diff --git a/input/cmd_list.c b/input/cmd_list.c
index e7918f26d6..d7dda48ad4 100644
--- a/input/cmd_list.c
+++ b/input/cmd_list.c
@@ -63,6 +63,7 @@ const struct mp_cmd_def mp_cmds[] = {
OARG_FLAGS(4|0, ({"relative", 4|0}, {"-", 4|0},
{"absolute-percent", 4|1},
{"absolute", 4|2},
+ {"relative-percent", 4|3},
{"keyframes", 32|8},
{"exact", 32|16})),
// backwards compatibility only
diff --git a/player/command.c b/player/command.c
index c03e63d254..54fc79fede 100644
--- a/player/command.c
+++ b/player/command.c
@@ -4118,6 +4118,11 @@ int run_command(struct MPContext *mpctx, struct mp_cmd *cmd, struct mpv_node *re
queue_seek(mpctx, MPSEEK_ABSOLUTE, v, precision, false);
set_osd_function(mpctx,
v > get_current_time(mpctx) ? OSD_FFW : OSD_REW);
+ } else if (abs == 3) { // Relative seeking by percentage
+ queue_seek(mpctx, MPSEEK_FACTOR,
+ get_current_pos_ratio(mpctx, false) + v / 100.0,
+ precision, false);
+ set_osd_function(mpctx, v > 0 ? OSD_FFW : OSD_REW);
} else if (abs) { /* Absolute seek by percentage */
queue_seek(mpctx, MPSEEK_FACTOR, v / 100.0, precision, false);
set_osd_function(mpctx, OSD_FFW); // Direction isn't set correctly