summaryrefslogtreecommitdiff
path: root/audio.c
diff options
context:
space:
mode:
Diffstat (limited to 'audio.c')
-rw-r--r--audio.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/audio.c b/audio.c
index bb5ef23..e93dd4a 100644
--- a/audio.c
+++ b/audio.c
@@ -32,6 +32,7 @@ struct AudioContext {
const char* device;
atomic_bool running;
struct AtomicQueue queue;
+ atomic_uint_fast64_t latency;
thrd_t thread;
};
@@ -64,6 +65,9 @@ static int AudioContextThreadProc(void* arg) {
if (size < sizeof(buffer)) {
// LOG("Audio queue underflow!");
memset(buffer + size, 0, sizeof(buffer) - size);
+ uint64_t micros = (sizeof(buffer) - size) * 1000 / frame_size / 48;
+ atomic_fetch_add_explicit(&context->latency, micros,
+ memory_order_relaxed);
}
for (snd_pcm_uframes_t offset = 0; offset < sizeof(buffer) / frame_size;) {
@@ -123,6 +127,10 @@ bool AudioContextDecode(struct AudioContext* audio_context, const void* buffer,
return true;
}
+uint64_t AudioContextGetLatency(const struct AudioContext* audio_context) {
+ return atomic_load_explicit(&audio_context->latency, memory_order_relaxed);
+}
+
void AudioContextDestroy(struct AudioContext* audio_context) {
atomic_store_explicit(&audio_context->running, 0, memory_order_relaxed);
thrd_join(audio_context->thread, NULL);