From 692785bc9da6904cf17e986fb034730ed3d78231 Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Sat, 14 Dec 2024 11:13:38 -0500 Subject: Work on pause and seek Signed-off-by: Andrew Opalach --- src/buffer/clock.c | 19 +++++++++++++++++++ src/buffer/clock.h | 5 +++-- 2 files changed, 22 insertions(+), 2 deletions(-) (limited to 'src/buffer') diff --git a/src/buffer/clock.c b/src/buffer/clock.c index 705a525..624c534 100644 --- a/src/buffer/clock.c +++ b/src/buffer/clock.c @@ -27,6 +27,25 @@ void camu_clock_set(struct camu_clock *clock, f64 base) clock->paused_at = 0.0; } +void camu_clock_seek(struct camu_clock *clock, f64 base, u64 target) +{ + clock->base = base; + clock->offset = 0.0; + f64 tick = aki_get_tick(); + if (clock->paused_at == -1.0) { + // We are safe to directly edit the tick here. + if (target == 0) { + al_atomic_store(f64)(&clock->tick, -1.0, AL_ATOMIC_RELAXED); + } else { + tick = calc_tick_offset(tick, aki_get_timestamp(), target); + al_atomic_store(f64)(&clock->tick, tick, AL_ATOMIC_RELAXED); + } + } else { + al_atomic_store(f64)(&clock->pause, PAUSED, AL_ATOMIC_RELAXED); + clock->paused_at = 0.0; + } +} + void camu_clock_offset(struct camu_clock *clock, f64 amount) { clock->offset += amount; diff --git a/src/buffer/clock.h b/src/buffer/clock.h index aae87cc..86eba5e 100644 --- a/src/buffer/clock.h +++ b/src/buffer/clock.h @@ -39,10 +39,11 @@ struct camu_clock { void camu_clock_init(struct camu_clock *clock, void (*callback)(void *, u8), void *userdata); void camu_clock_set(struct camu_clock *clock, f64 base); +void camu_clock_seek(struct camu_clock *clock, f64 base, u64 target); void camu_clock_offset(struct camu_clock *clock, f64 amount); -void camu_clock_pause(struct camu_clock *clock, u64 ts); -void camu_clock_resume(struct camu_clock *clock, u64 ts); +void camu_clock_pause(struct camu_clock *clock, u64 target); +void camu_clock_resume(struct camu_clock *clock, u64 target); bool camu_clock_is_armed(struct camu_clock *clock); bool camu_clock_is_paused(struct camu_clock *clock); -- cgit v1.2.3-101-g0448