diff options
Diffstat (limited to 'src/mixer')
| -rw-r--r-- | src/mixer/audio_miniaudio.c | 2 | ||||
| -rw-r--r-- | src/mixer/audio_miniaudio.h | 4 | ||||
| -rw-r--r-- | src/mixer/mixer.c | 58 | ||||
| -rw-r--r-- | src/mixer/mixer.h | 4 |
4 files changed, 36 insertions, 32 deletions
diff --git a/src/mixer/audio_miniaudio.c b/src/mixer/audio_miniaudio.c index 526e464..f0afeee 100644 --- a/src/mixer/audio_miniaudio.c +++ b/src/mixer/audio_miniaudio.c @@ -130,7 +130,7 @@ static s32 camu_sample_format_from_miniaudio(s32 fmt) return CAMU_SAMPLE_FORMAT_FLT; case ma_format_unknown: default: - al_assert_and_return(false); + al_assert_and_return(CAMU_SAMPLE_FORMAT_NONE); } } diff --git a/src/mixer/audio_miniaudio.h b/src/mixer/audio_miniaudio.h index 5bae185..c067024 100644 --- a/src/mixer/audio_miniaudio.h +++ b/src/mixer/audio_miniaudio.h @@ -1,9 +1,9 @@ #pragma once -// Include <aki/thread.h> here to ensure OS related headers +// Include <nnwt/thread.h> here to ensure OS related headers // get included the way we want. // Specifically, on Windows we want to include <winsock2.h> before <windows.h>. -#include <aki/thread.h> +#include <nnwt/thread.h> #include <al/macros.h> #include <miniaudio.h> diff --git a/src/mixer/mixer.c b/src/mixer/mixer.c index 086498e..18d6b8a 100644 --- a/src/mixer/mixer.c +++ b/src/mixer/mixer.c @@ -76,7 +76,7 @@ bool camu_mixer_init(struct camu_mixer *mixer, struct camu_audio *audio) al_array_init(mixer->add_queue); al_array_init(mixer->rem_queue); al_atomic_store(u8)(&mixer->queued, 0, AL_ATOMIC_RELAXED); - aki_mutex_init(&mixer->mutex); + nn_mutex_init(&mixer->mutex); #endif return true; } @@ -89,7 +89,7 @@ void camu_mixer_pick_format(struct camu_mixer *mixer, struct camu_resampler_form void camu_mixer_set_volume(struct camu_mixer *mixer, f32 volume) { #ifdef CAMU_MIXER_THREADED - aki_mutex_lock(&mixer->mutex); + nn_mutex_lock(&mixer->mutex); #endif mixer->volume = volume; struct camu_audio_buffer *buf; @@ -97,14 +97,14 @@ void camu_mixer_set_volume(struct camu_mixer *mixer, f32 volume) camu_audio_buffer_set_volume(buf, mixer->volume); } #ifdef CAMU_MIXER_THREADED - aki_mutex_unlock(&mixer->mutex); + nn_mutex_unlock(&mixer->mutex); #endif } void camu_mixer_offset_volume(struct camu_mixer *mixer, f32 amount) { #ifdef CAMU_MIXER_THREADED - aki_mutex_lock(&mixer->mutex); + nn_mutex_lock(&mixer->mutex); #endif if (FLT_MAX - mixer->volume < amount) { mixer->volume = FLT_MAX; @@ -116,7 +116,7 @@ void camu_mixer_offset_volume(struct camu_mixer *mixer, f32 amount) camu_audio_buffer_set_volume(buf, mixer->volume); } #ifdef CAMU_MIXER_THREADED - aki_mutex_unlock(&mixer->mutex); + nn_mutex_unlock(&mixer->mutex); #endif } @@ -152,15 +152,19 @@ static void remove_buffer_internal(struct camu_mixer *mixer, struct camu_audio_b static void run_queue_internal(struct camu_mixer *mixer) { struct camu_audio_buffer *buf; - al_array_foreach(mixer->rem_queue, i, buf) { - remove_buffer_internal(mixer, buf); + if (mixer->rem_queue.size > 0) { + al_array_foreach(mixer->rem_queue, i, buf) { + remove_buffer_internal(mixer, buf); + } + mixer->rem_queue.size = 0; } - mixer->rem_queue.size = 0; - al_array_reserve(mixer->buffers, mixer->buffers.size + mixer->add_queue.size); - al_array_foreach(mixer->add_queue, i, buf) { - add_buffer_internal(mixer, buf); + if (mixer->add_queue.size > 0) { + al_array_reserve(mixer->buffers, mixer->buffers.size + mixer->add_queue.size); + al_array_foreach(mixer->add_queue, i, buf) { + add_buffer_internal(mixer, buf); + } + mixer->add_queue.size = 0; } - mixer->add_queue.size = 0; al_atomic_store(u8)(&mixer->queued, 0, AL_ATOMIC_RELAXED); if (al_array_is_empty(mixer->buffers)) { mixer->empty_after = MIXER_TRAILING_SILENCE; @@ -173,11 +177,11 @@ static void run_queue_internal(struct camu_mixer *mixer) void camu_mixer_add_buffer(struct camu_mixer *mixer, struct camu_audio_buffer *buf) { #ifdef CAMU_MIXER_THREADED - aki_mutex_lock(&mixer->mutex); + nn_mutex_lock(&mixer->mutex); struct camu_audio_buffer *rbuf; al_array_foreach(mixer->add_queue, i, rbuf) { if (rbuf == buf) { - aki_mutex_unlock(&mixer->mutex); + nn_mutex_unlock(&mixer->mutex); return; } } @@ -188,13 +192,13 @@ void camu_mixer_add_buffer(struct camu_mixer *mixer, struct camu_audio_buffer *b if (queue_empty) { al_atomic_store(u8)(&mixer->queued, 0, AL_ATOMIC_RELAXED); } - aki_mutex_unlock(&mixer->mutex); + nn_mutex_unlock(&mixer->mutex); return; } } al_array_push(mixer->add_queue, buf); al_atomic_store(u8)(&mixer->queued, 1, AL_ATOMIC_RELAXED); - aki_mutex_unlock(&mixer->mutex); + nn_mutex_unlock(&mixer->mutex); #else add_buffer_internal(mixer, buf); mixer->empty_after = 0; @@ -204,11 +208,11 @@ void camu_mixer_add_buffer(struct camu_mixer *mixer, struct camu_audio_buffer *b void camu_mixer_remove_buffer(struct camu_mixer *mixer, struct camu_audio_buffer *buf) { #ifdef CAMU_MIXER_THREADED - aki_mutex_lock(&mixer->mutex); + nn_mutex_lock(&mixer->mutex); struct camu_audio_buffer *rbuf; al_array_foreach(mixer->rem_queue, i, rbuf) { if (rbuf == buf) { - aki_mutex_unlock(&mixer->mutex); + nn_mutex_unlock(&mixer->mutex); return; } } @@ -219,7 +223,7 @@ void camu_mixer_remove_buffer(struct camu_mixer *mixer, struct camu_audio_buffer if (queue_empty) { al_atomic_store(u8)(&mixer->queued, 0, AL_ATOMIC_RELAXED); } - aki_mutex_unlock(&mixer->mutex); + nn_mutex_unlock(&mixer->mutex); return; } } @@ -228,7 +232,7 @@ void camu_mixer_remove_buffer(struct camu_mixer *mixer, struct camu_audio_buffer if (mixer->paused) { run_queue_internal(mixer); } - aki_mutex_unlock(&mixer->mutex); + nn_mutex_unlock(&mixer->mutex); #else remove_buffer_internal(mixer, buf); if (al_array_is_empty(mixer->buffers)) { @@ -240,9 +244,9 @@ void camu_mixer_remove_buffer(struct camu_mixer *mixer, struct camu_audio_buffer #ifdef CAMU_MIXER_THREADED void camu_mixer_run_queue(struct camu_mixer *mixer) { - aki_mutex_lock(&mixer->mutex); + nn_mutex_lock(&mixer->mutex); run_queue_internal(mixer); - aki_mutex_unlock(&mixer->mutex); + nn_mutex_unlock(&mixer->mutex); } void camu_mixer_clear(struct camu_mixer *mixer) @@ -257,7 +261,7 @@ void camu_mixer_clear(struct camu_mixer *mixer) void camu_mixer_pause(struct camu_mixer *mixer) { #ifdef CAMU_MIXER_THREADED - aki_mutex_lock(&mixer->mutex); + nn_mutex_lock(&mixer->mutex); #endif if (!mixer->paused) { mixer->audio->stop(mixer->audio); @@ -265,14 +269,14 @@ void camu_mixer_pause(struct camu_mixer *mixer) } #ifdef CAMU_MIXER_THREADED run_queue_internal(mixer); - aki_mutex_unlock(&mixer->mutex); + nn_mutex_unlock(&mixer->mutex); #endif } void camu_mixer_resume(struct camu_mixer *mixer) { #ifdef CAMU_MIXER_THREADED - aki_mutex_lock(&mixer->mutex); + nn_mutex_lock(&mixer->mutex); #endif if (mixer->paused) { // start() can internally call data_callback once before returning. @@ -283,7 +287,7 @@ void camu_mixer_resume(struct camu_mixer *mixer) mixer->paused = false; } #ifdef CAMU_MIXER_THREADED - aki_mutex_unlock(&mixer->mutex); + nn_mutex_unlock(&mixer->mutex); #endif } @@ -293,7 +297,7 @@ void camu_mixer_close(struct camu_mixer *mixer) #ifdef CAMU_MIXER_THREADED al_array_free(mixer->add_queue); al_array_free(mixer->rem_queue); - aki_mutex_destroy(&mixer->mutex); + nn_mutex_destroy(&mixer->mutex); #endif mixer->audio->free(&mixer->audio); } diff --git a/src/mixer/mixer.h b/src/mixer/mixer.h index a925e0c..16ec924 100644 --- a/src/mixer/mixer.h +++ b/src/mixer/mixer.h @@ -4,7 +4,7 @@ #include <al/array.h> #ifdef CAMU_MIXER_THREADED #include <al/atomic.h> -#include <aki/thread.h> +#include <nnwt/thread.h> #endif #include "../codec/codec.h" @@ -24,7 +24,7 @@ struct camu_mixer { array(struct camu_audio_buffer *) add_queue; array(struct camu_audio_buffer *) rem_queue; atomic(u8) queued; - struct aki_mutex mutex; + struct nn_mutex mutex; #endif void (*callback)(void *, u8); void *userdata; |