summaryrefslogtreecommitdiff
path: root/src/buffer
diff options
context:
space:
mode:
Diffstat (limited to 'src/buffer')
-rw-r--r--src/buffer/clock.c5
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)