From ee1e04f60ce8c9f9dc5a8dab05c029f2021203d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Magalh=C3=A3es?= <joamag@gmail.com> Date: Thu, 3 Aug 2023 12:19:16 +0100 Subject: [PATCH] feat: new global buffer usage --- frontends/libretro/src/lib.rs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/frontends/libretro/src/lib.rs b/frontends/libretro/src/lib.rs index 6a4229d5..5f7d5828 100644 --- a/frontends/libretro/src/lib.rs +++ b/frontends/libretro/src/lib.rs @@ -153,6 +153,10 @@ pub extern "C" fn retro_init() { unsafe { EMULATOR = Some(GameBoy::new(None)); KEY_STATES = Some(HashMap::new()); + AUDIO_BUFFER = Some(vec![ + 0x00; + EMULATOR.as_ref().unwrap().apu_i().audio_buffer_max() + ]); } } @@ -219,6 +223,7 @@ pub extern "C" fn retro_run() { let input_poll_cb = unsafe { INPUT_POLL_CALLBACK.as_ref().unwrap() }; let input_state_cb = unsafe { INPUT_STATE_CALLBACK.as_ref().unwrap() }; let key_states = unsafe { KEY_STATES.as_mut().unwrap() }; + let audio_buffer_ref = unsafe { AUDIO_BUFFER.as_mut().unwrap() }; let channels = emulator.audio_channels(); let mut last_frame = emulator.ppu_frame(); @@ -272,14 +277,11 @@ pub extern "C" fn retro_run() { .map(|v| *v as i16 * 256) .collect::<Vec<i16>>(); - unsafe { - AUDIO_BUFFER = Some(audio_buffer.to_vec()); - let audio_buffer_ref = AUDIO_BUFFER.as_ref().unwrap(); - sample_batch_cb( - audio_buffer_ref.as_ptr(), - audio_buffer_ref.len() / channels as usize, - ); - } + audio_buffer_ref[0..audio_buffer.len()].copy_from_slice(&audio_buffer); + sample_batch_cb( + audio_buffer_ref.as_ptr(), + audio_buffer.len() / channels as usize, + ); emulator.clear_audio_buffer(); } -- GitLab