diff options
Diffstat (limited to 'src/buffer/clock.c')
| -rw-r--r-- | src/buffer/clock.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/buffer/clock.c b/src/buffer/clock.c index 86d6739..fbe7ec5 100644 --- a/src/buffer/clock.c +++ b/src/buffer/clock.c @@ -40,6 +40,7 @@ static inline void offset_tick(struct camu_clock *clock, f64 diff) void camu_clock_set(struct camu_clock *clock, f64 base) { clock->base = base; + clock->offset = 0.0; atomic_store(f64)(&clock->tick, SET, AL_ATOMIC_RELAXED); atomic_store(f64)(&clock->pause, PAUSED, AL_ATOMIC_RELAXED); atomic_store(bool)(&clock->external_pause, false, AL_ATOMIC_RELAXED); @@ -165,7 +166,7 @@ f64 camu_clock_get_pts(struct camu_clock *clock, f64 latency, bool allow_set, bo } } - f64 pts = (clock->base - clock->offset) + (current - tick); + f64 pts = clock->base + (current - tick); bool signal_pause = false; *armed_for_pause = pause != RUNNING || atomic_load(bool)(&clock->external_pause, AL_ATOMIC_RELAXED); @@ -182,7 +183,7 @@ f64 camu_clock_get_pts(struct camu_clock *clock, f64 latency, bool allow_set, bo atomic_store(f64)(&clock->last_pts, pts, AL_ATOMIC_RELAXED); } - return signal_pause ? CAMU_PTS_SIGNAL_PAUSE : pts + latency; + return signal_pause ? CAMU_PTS_SIGNAL_PAUSE : (pts - clock->offset) + latency; } f64 camu_clock_get_last_pts(struct camu_clock *clock) |