summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTsukasa OMOTO <henry0312@gmail.com>2014-06-30 02:27:46 +0900
committerwm4 <wm4@nowhere>2014-06-29 20:39:49 +0200
commita73415584c9dbf920ec14d26d0b0629cae81b3d5 (patch)
tree52e4bb2911b888f97ba5b3d736235494e89311ce
parent7412257305140e5a21a1acd35f6be546b9295dd5 (diff)
downloadmpv-a73415584c9dbf920ec14d26d0b0629cae81b3d5.tar.bz2
mpv-a73415584c9dbf920ec14d26d0b0629cae81b3d5.tar.xz
player: make the time display relative to start PTS
This commit makes the playback start time always at time 0. Signed-off-by: wm4 <wm4@nowhere>
-rw-r--r--DOCS/man/input.rst3
-rw-r--r--player/command.c16
-rw-r--r--player/core.h1
-rw-r--r--player/lua/osc.lua4
-rw-r--r--player/osd.c5
-rw-r--r--player/playloop.c7
-rw-r--r--player/screenshot.c4
7 files changed, 30 insertions, 10 deletions
diff --git a/DOCS/man/input.rst b/DOCS/man/input.rst
index befa41b709..cfc05e6e68 100644
--- a/DOCS/man/input.rst
+++ b/DOCS/man/input.rst
@@ -658,6 +658,9 @@ Property list
``playtime-remaining``
``time-remaining`` scaled by the the current ``speed``.
+``playback-time``
+ Return the playback time, which is the time difference between start PTS and current PTS.
+
``chapter`` (RW)
Current chapter number. The number of the first chapter is 0.
diff --git a/player/command.c b/player/command.c
index 6538d5e2bb..6edb9115d3 100644
--- a/player/command.c
+++ b/player/command.c
@@ -462,10 +462,9 @@ static int mp_property_time_pos(void *ctx, struct m_property *prop,
static bool time_remaining(MPContext *mpctx, double *remaining)
{
double len = get_time_length(mpctx);
- double pos = get_current_time(mpctx);
- double start = get_start_time(mpctx);
+ double playback = get_playback_time(mpctx);
- *remaining = len - (pos - start);
+ *remaining = len - playback;
return len > 0;
}
@@ -492,6 +491,16 @@ static int mp_property_playtime_remaining(void *ctx, struct m_property *prop,
return property_time(action, arg, remaining / speed);
}
+static int mp_property_playback_time(void *ctx, struct m_property *prop,
+ int action, void *arg)
+{
+ MPContext *mpctx = ctx;
+ if (!mpctx->num_sources)
+ return M_PROPERTY_UNAVAILABLE;
+
+ return property_time(action, arg, get_playback_time(mpctx));
+}
+
/// Current BD/DVD title (RW)
static int mp_property_disc_title(void *ctx, struct m_property *prop,
int action, void *arg)
@@ -2594,6 +2603,7 @@ static const struct m_property mp_properties[] = {
{"time-pos", mp_property_time_pos},
{"time-remaining", mp_property_remaining},
{"playtime-remaining", mp_property_playtime_remaining},
+ {"playback-time", mp_property_playback_time},
{"disc-title", mp_property_disc_title},
{"disc-menu-active", mp_property_disc_menu},
{"chapter", mp_property_chapter},
diff --git a/player/core.h b/player/core.h
index 4a52424ca9..3b87f47423 100644
--- a/player/core.h
+++ b/player/core.h
@@ -439,6 +439,7 @@ void queue_seek(struct MPContext *mpctx, enum seek_type type, double amount,
bool mp_seek_chapter(struct MPContext *mpctx, int chapter);
double get_time_length(struct MPContext *mpctx);
double get_current_time(struct MPContext *mpctx);
+double get_playback_time(struct MPContext *mpctx);
int get_percent_pos(struct MPContext *mpctx);
double get_current_pos_ratio(struct MPContext *mpctx, bool use_range);
int get_current_chapter(struct MPContext *mpctx);
diff --git a/player/lua/osc.lua b/player/lua/osc.lua
index 1fc3522230..32ca26168d 100644
--- a/player/lua/osc.lua
+++ b/player/lua/osc.lua
@@ -906,9 +906,9 @@ function osc_init()
local contentF = function (ass)
if state.tc_ms then
- ass:append(mp.get_property_osd("time-pos/full"))
+ ass:append(mp.get_property_osd("playback-time/full"))
else
- ass:append(mp.get_property_osd("time-pos"))
+ ass:append(mp.get_property_osd("playback-time"))
end
end
diff --git a/player/osd.c b/player/osd.c
index 32533eac1d..5f765618ae 100644
--- a/player/osd.c
+++ b/player/osd.c
@@ -181,8 +181,7 @@ void print_status(struct MPContext *mpctx)
saddf(&line, ": ");
// Playback position
- double cur = get_current_time(mpctx);
- sadd_hhmmssff(&line, cur, mpctx->opts->osd_fractions);
+ sadd_hhmmssff(&line, get_playback_time(mpctx), mpctx->opts->osd_fractions);
double len = get_time_length(mpctx);
if (len >= 0) {
@@ -437,7 +436,7 @@ static void sadd_osd_status(char **buffer, struct MPContext *mpctx, bool full)
*buffer = talloc_strdup_append(*buffer, text);
talloc_free(text);
} else {
- sadd_hhmmssff(buffer, get_current_time(mpctx), fractions);
+ sadd_hhmmssff(buffer, get_playback_time(mpctx), fractions);
if (full) {
saddf(buffer, " / ");
sadd_hhmmssff(buffer, get_time_length(mpctx), fractions);
diff --git a/player/playloop.c b/player/playloop.c
index 96326da57c..17df319879 100644
--- a/player/playloop.c
+++ b/player/playloop.c
@@ -426,6 +426,13 @@ double get_current_time(struct MPContext *mpctx)
return 0;
}
+double get_playback_time(struct MPContext *mpctx)
+{
+ double cur = get_current_time(mpctx);
+ double start = get_start_time(mpctx);
+ return cur >= start ? cur - start : cur;
+}
+
// Return playback position in 0.0-1.0 ratio, or -1 if unknown.
double get_current_pos_ratio(struct MPContext *mpctx, bool use_range)
{
diff --git a/player/screenshot.c b/player/screenshot.c
index 30eceedafc..1ee58c2196 100644
--- a/player/screenshot.c
+++ b/player/screenshot.c
@@ -199,7 +199,7 @@ static char *create_fname(struct MPContext *mpctx, char *template,
}
case 'p':
case 'P': {
- char *t = mp_format_time(get_current_time(mpctx), fmt == 'P');
+ char *t = mp_format_time(get_playback_time(mpctx), fmt == 'P');
append_filename(&res, t);
talloc_free(t);
break;
@@ -210,7 +210,7 @@ static char *create_fname(struct MPContext *mpctx, char *template,
goto error_exit;
template++;
char fmtstr[] = {'%', tfmt, '\0'};
- char *s = mp_format_time_fmt(fmtstr, get_current_time(mpctx));
+ char *s = mp_format_time_fmt(fmtstr, get_playback_time(mpctx));
if (!s)
goto error_exit;
append_filename(&res, s);