summaryrefslogtreecommitdiff
path: root/src/buffer/clock.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/buffer/clock.h')
-rw-r--r--src/buffer/clock.h23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/buffer/clock.h b/src/buffer/clock.h
index e1a2d9e..3169c61 100644
--- a/src/buffer/clock.h
+++ b/src/buffer/clock.h
@@ -23,21 +23,30 @@
// Next/Prev:
// - User input -> swap
-#define CAMU_PTS_PAUSED ((f64)0xffffffffffffffff)
-#define CAMU_PTS_SIGNAL_PAUSE ((f64)0x7fffffffffffffff)
-#define CAMU_PTS_CONSIDER_PAUSED(pts) (pts == CAMU_PTS_PAUSED || pts == CAMU_PTS_SIGNAL_PAUSE)
+// Values that PTS can never normally be.
+#define CAMU_PTS_PAUSED 0x1.fffffffffffffp+1023
+#define CAMU_PTS_SIGNAL_PAUSE 0x1.fffffffffffffp+1022
+#define CAMU_PTS_UNSET 0x1.fffffffffffffp+1021
+#define CAMU_PTS_CONSIDER_PAUSED(pts) (pts == CAMU_PTS_PAUSED || pts == CAMU_PTS_SIGNAL_PAUSE || pts == CAMU_PTS_UNSET)
enum {
CAMU_CLOCK_PAUSED = 0
};
+enum {
+ CAMU_CLOCK_PAUSE_FOR_SWAP = 1,
+ CAMU_CLOCK_EXTERNAL_PAUSE = 1 << 1,
+ CAMU_CLOCK_NO_SIGNAL_PAUSE = 1 << 7
+};
+
struct camu_clock {
f64 base;
f64 offset;
atomic(f64) tick;
atomic(f64) pause;
- atomic(bool) external_pause;
f64 paused_at;
+ atomic(bool) pause_for_swap;
+ atomic(bool) external_pause;
atomic(f64) last_pts;
void (*callback)(void *, u8);
void *userdata;
@@ -50,10 +59,10 @@ void camu_clock_offset(struct camu_clock *clock, f64 offset);
void camu_clock_seek(struct camu_clock *clock, f64 base, u64 target);
bool camu_clock_pause(struct camu_clock *clock, u64 target);
-void camu_clock_external_pause(struct camu_clock *clock);
+void camu_clock_set_pause_for_swap(struct camu_clock *clock);
+void camu_clock_set_external_pause(struct camu_clock *clock);
void camu_clock_resume(struct camu_clock *clock, u64 target);
-bool camu_clock_is_user_paused(struct camu_clock *clock);
f64 camu_clock_get_base_pts(struct camu_clock *clock);
-f64 camu_clock_get_pts(struct camu_clock *clock, f64 latency, bool allow_set, bool *armed_for_pause);
+f64 camu_clock_get_pts(struct camu_clock *clock, f64 latency, bool allow_set, u8 *status);
f64 camu_clock_get_last_pts(struct camu_clock *clock);