summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--DOCS/man/input.rst2
-rw-r--r--player/command.c9
2 files changed, 10 insertions, 1 deletions
diff --git a/DOCS/man/input.rst b/DOCS/man/input.rst
index c7a9d26cac..d15aa41903 100644
--- a/DOCS/man/input.rst
+++ b/DOCS/man/input.rst
@@ -95,7 +95,7 @@ List of Input Commands
relative (default)
Seek relative to current position (a negative value seeks backwards).
absolute
- Seek to a given time.
+ Seek to a given time (a negative value starts from the end of the file).
absolute-percent
Seek to a given percent position.
relative-percent
diff --git a/player/command.c b/player/command.c
index a714123558..24e79c5b98 100644
--- a/player/command.c
+++ b/player/command.c
@@ -930,7 +930,9 @@ static int mp_property_chapter(void *ctx, struct m_property *prop,
if (current_chapter_start != MP_NOPTS_VALUE &&
get_current_time(mpctx) - current_chapter_start >
mpctx->opts->chapter_seek_threshold)
+ {
step_all++;
+ }
}
} else // Absolute set
step_all = *(int *)arg - chapter;
@@ -4815,6 +4817,13 @@ int run_command(struct MPContext *mpctx, struct mp_cmd *cmd, struct mpv_node *re
break;
}
case 2: { // Absolute seek to a timestamp in seconds
+ if (v < 0) {
+ // Seek from end
+ double len = get_time_length(mpctx);
+ if (len < 0)
+ return -1;
+ v = MPMAX(0, len + v);
+ }
queue_seek(mpctx, MPSEEK_ABSOLUTE, v, precision, MPSEEK_FLAG_DELAY);
set_osd_function(mpctx,
v > get_current_time(mpctx) ? OSD_FFW : OSD_REW);