From ef69296be322b20b8b169f273df547691fba9bcb Mon Sep 17 00:00:00 2001 From: libretroadmin Date: Fri, 1 Aug 2025 04:59:58 +0200 Subject: [PATCH] Rewrite al_fill_internal_buf - only call memcpy if 3rd argument is non-0 --- audio/audio_driver.c | 16 ++++++++-------- audio/drivers/openal.c | 17 ++++++++++------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/audio/audio_driver.c b/audio/audio_driver.c index 7c3599bf8c..a550a3679d 100644 --- a/audio/audio_driver.c +++ b/audio/audio_driver.c @@ -483,9 +483,9 @@ static void audio_driver_flush(audio_driver_state_t *audio_st, dsp_data.output_frames = 0; /* Initialize the DSP input/output. - * Our DSP implementations generally operate directly on the + * Our DSP implementations generally operate directly on the * input buffer, so the output/output_frames attributes here are zero; - * the DSP filter will set them to useful values, most likely to be + * the DSP filter will set them to useful values, most likely to be * the same as the inputs. */ retro_dsp_filter_process(audio_st->dsp, &dsp_data); @@ -565,7 +565,7 @@ static void audio_driver_flush(audio_driver_state_t *audio_st, audio_st->avg_flush_delta = audio_st->avg_flush_delta * (n - 1) / n + (flush_time - audio_st->last_flush_time) / n; - /* How much does the avg_flush_delta deviate + /* How much does the avg_flush_delta deviate * from the delta at 1.0x speed? */ src_data.ratio *= MAX(AUDIO_MIN_RATIO, @@ -598,7 +598,7 @@ static void audio_driver_flush(audio_driver_state_t *audio_st, #endif /* Now we write our processed audio output to the driver. - * It may not be played immediately, depending on + * It may not be played immediately, depending on * the driver implementation. */ { const void *output_data = audio_st->output_samples_buf; @@ -693,7 +693,7 @@ bool audio_driver_init_internal(void *settings_data, bool audio_cb_inited) audio_driver_st.flags &= ~AUDIO_FLAG_ACTIVE; return false; } - + audio_driver_st.flags |= AUDIO_FLAG_ACTIVE; if (!(audio_driver_find_driver(settings->arrays.audio_driver, @@ -929,7 +929,7 @@ size_t audio_driver_sample_batch(const int16_t *data, size_t frames) { size_t frames_to_write = (frames_remaining > (AUDIO_CHUNK_SIZE_NONBLOCKING >> 1)) - ? (AUDIO_CHUNK_SIZE_NONBLOCKING >> 1) + ? (AUDIO_CHUNK_SIZE_NONBLOCKING >> 1) : frames_remaining; if (recording_push_audio) @@ -1996,7 +1996,7 @@ bool microphone_driver_start(void) /* If there's an opened microphone that the core turned on... */ if (microphone->flags & MICROPHONE_FLAG_ACTIVE) - { + { /* If this microphone was requested before the driver was ready...*/ if (microphone->flags & MICROPHONE_FLAG_PENDING) { @@ -2035,7 +2035,7 @@ bool microphone_driver_stop(void) microphone_driver_state_t *mic_st = &mic_driver_st; retro_microphone_t *microphone = &mic_st->microphone; - /* If there's an opened microphone that the core + /* If there's an opened microphone that the core * turned on and received... */ if ( (microphone->flags & MICROPHONE_FLAG_ACTIVE) && (microphone->flags & MICROPHONE_FLAG_ENABLED) diff --git a/audio/drivers/openal.c b/audio/drivers/openal.c index 7a2c753f69..25381a255e 100644 --- a/audio/drivers/openal.c +++ b/audio/drivers/openal.c @@ -180,10 +180,15 @@ static bool al_get_buffer(al_t *al, ALuint *buffer) static size_t al_fill_internal_buf(al_t *al, const void *s, size_t len) { - size_t written = MIN(OPENAL_BUFSIZE - al->tmpbuf_ptr, len); - memcpy(al->tmpbuf + al->tmpbuf_ptr, s, written); - al->tmpbuf_ptr += written; - return written; + size_t avail = OPENAL_BUFSIZE - al->tmpbuf_ptr; + size_t written = MIN(avail, len); + if (written > 0) + { + memcpy(al->tmpbuf + al->tmpbuf_ptr, s, written); + al->tmpbuf_ptr += written; + return written; + } + return 0; } static ssize_t al_write(void *data, const void *s, size_t len) @@ -230,9 +235,7 @@ static bool al_stop(void *data) static bool al_alive(void *data) { al_t *al = (al_t*)data; - if (!al) - return false; - return !al->is_paused; + return al && !al->is_paused; } static void al_set_nonblock_state(void *data, bool state)