diff options
author | Mikhail Burakov <mburakov@mailbox.org> | 2024-05-05 13:53:01 +0200 |
---|---|---|
committer | Mikhail Burakov <mburakov@mailbox.org> | 2024-05-19 10:15:12 +0200 |
commit | 191dd1097cb9b8827e53ecd450c31d60e63e91f3 (patch) | |
tree | 1c4631680e8975a921221a0371fa664aad931bbd /audio.c | |
parent | f593c2fd65cab3275c98c100c6b7d775e24157f9 (diff) |
Add audio stats to overlay when it is enabled
Diffstat (limited to 'audio.c')
-rw-r--r-- | audio.c | 8 |
1 files changed, 8 insertions, 0 deletions
@@ -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); |