summaryrefslogtreecommitdiffstats
path: root/core/mplayer.c
diff options
context:
space:
mode:
Diffstat (limited to 'core/mplayer.c')
-rw-r--r--core/mplayer.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/core/mplayer.c b/core/mplayer.c
index fa12403a82..97ab1e8ab4 100644
--- a/core/mplayer.c
+++ b/core/mplayer.c
@@ -2970,18 +2970,28 @@ double get_current_time(struct MPContext *mpctx)
return 0;
}
+static double get_start_time(struct MPContext *mpctx)
+{
+ struct demuxer *demuxer = mpctx->demuxer;
+ if (!demuxer)
+ return 0;
+ double time = 0;
+ demux_control(demuxer, DEMUXER_CTRL_GET_START_TIME, &time);
+ return time;
+}
+
int get_percent_pos(struct MPContext *mpctx)
{
struct demuxer *demuxer = mpctx->demuxer;
if (!demuxer)
return 0;
int ans = 0;
- if (mpctx->timeline)
- ans = get_current_time(mpctx) * 100 /
- mpctx->timeline[mpctx->num_timeline_parts].start;
- else if (demux_control(demuxer, DEMUXER_CTRL_GET_PERCENT_POS, &ans) > 0)
- ;
- else {
+ double start = get_start_time(mpctx);
+ double len = get_time_length(mpctx);
+ double pos = get_current_time(mpctx);
+ if (len > 0) {
+ ans = (pos - start) / len * 100;
+ } else {
int len = (demuxer->movi_end - demuxer->movi_start) / 100;
int64_t pos = demuxer->filepos > 0 ?
demuxer->filepos : stream_tell(demuxer->stream);