From 557e07876de0086b70e301b104547bf35ec57959 Mon Sep 17 00:00:00 2001 From: quou Date: Tue, 4 Jun 2024 21:42:04 +1000 Subject: Loading album art, seeking, pause/play. --- plat.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) (limited to 'plat.c') diff --git a/plat.c b/plat.c index 66dc50b..a70fe52 100644 --- a/plat.c +++ b/plat.c @@ -117,9 +117,11 @@ void* audio_worker(void* arg) { lock_audio(); if (!audio.r) c = 0; as = sound_mix(arg, buf, s); - if (!as) audio.r = c = 0; unlock_audio(); - pa_simple_write(dev, buf, as, 0); + if (as) + pa_simple_write(dev, buf, as, 0); + else + usleep(25000); /* avoid hammering the thread */ } return 0; } @@ -136,9 +138,9 @@ void wait_audio(void) { } void init_audio(void* uptr, int sample, int channels) { - int r; if (audio.dev) { wait_audio(); + pa_simple_free(audio.dev); gfree(audio.buf); } audio.buf = galloc(audio_buffer_size * channels); @@ -164,7 +166,7 @@ void init_audio(void* uptr, int sample, int channels) { } audio.r = 1; audio.chan = channels; - r = pthread_create( + pthread_create( &audio_thread, 0, audio_worker, @@ -173,14 +175,22 @@ void init_audio(void* uptr, int sample, int channels) { pthread_mutex_init(&audio_mutex, 0); } -void lock_audio() { +void lock_audio(void) { pthread_mutex_lock(&audio_mutex); } -void unlock_audio() { +void unlock_audio(void) { pthread_mutex_unlock(&audio_mutex); } +int audio_done(void) { + int r; + lock_audio(); + r = !audio.r; + unlock_audio(); + return r; +} + extern int prog_main(void*); int main() { @@ -189,6 +199,12 @@ int main() { audio.dev = 0; mem = malloc(memory_size); r = prog_main(mem); + if (audio.dev) { + stop_audio(); + wait_audio(); + pa_simple_free(audio.dev); + gfree(audio.buf); + } free(mem); return r; } -- cgit v1.2.3-54-g00ecf