summaryrefslogtreecommitdiffstats
path: root/player/playloop.c
diff options
context:
space:
mode:
Diffstat (limited to 'player/playloop.c')
-rw-r--r--player/playloop.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/player/playloop.c b/player/playloop.c
index 4067e13459..30c1bbb5d6 100644
--- a/player/playloop.c
+++ b/player/playloop.c
@@ -488,6 +488,20 @@ double get_time_length(struct MPContext *mpctx)
return demuxer && demuxer->duration >= 0 ? demuxer->duration : MP_NOPTS_VALUE;
}
+// Return approximate PTS of first frame played. This can be completely wrong
+// for a number of reasons in a number of situations.
+double get_start_time(struct MPContext *mpctx, int dir)
+{
+ double res = 0;
+ if (mpctx->demuxer) {
+ if (!mpctx->opts->rebase_start_time)
+ res += mpctx->demuxer->start_time;
+ if (dir < 0)
+ res += MPMAX(mpctx->demuxer->duration, 0);
+ }
+ return res;
+}
+
double get_current_time(struct MPContext *mpctx)
{
struct demuxer *demuxer = mpctx->demuxer;
@@ -827,7 +841,7 @@ static void handle_loop_file(struct MPContext *mpctx)
} else if (opts->loop_file) {
if (opts->loop_file > 0)
opts->loop_file--;
- target = 0;
+ target = get_start_time(mpctx, mpctx->play_dir);
}
if (target != MP_NOPTS_VALUE) {