diff --git a/audio/audio_driver.c b/audio/audio_driver.c index 71c93330a6..faddcbe812 100644 --- a/audio/audio_driver.c +++ b/audio/audio_driver.c @@ -681,14 +681,6 @@ void audio_driver_set_buffer_size(size_t bufsize) audio_driver_data.driver_buffer_size = bufsize; } -void audio_driver_callback_set_state(bool state) -{ - if (!audio_driver_ctl(RARCH_AUDIO_CTL_HAS_CALLBACK, NULL)) - return; - - if (audio_driver_data.audio_callback.set_state) - audio_driver_data.audio_callback.set_state(state); -} static void audio_monitor_adjust_system_rates(void) { @@ -812,6 +804,20 @@ bool audio_driver_ctl(enum rarch_audio_ctl_state state, void *data) case RARCH_AUDIO_CTL_SETUP_REWIND: audio_driver_setup_rewind(); return true; + case RARCH_AUDIO_CTL_SET_CALLBACK_ENABLE: + if (!audio_driver_ctl(RARCH_AUDIO_CTL_HAS_CALLBACK, NULL)) + return false; + + if (audio_driver_data.audio_callback.set_state) + audio_driver_data.audio_callback.set_state(true); + return true; + case RARCH_AUDIO_CTL_SET_CALLBACK_DISABLE: + if (!audio_driver_ctl(RARCH_AUDIO_CTL_HAS_CALLBACK, NULL)) + return false; + + if (audio_driver_data.audio_callback.set_state) + audio_driver_data.audio_callback.set_state(false); + return true; case RARCH_AUDIO_CTL_HAS_CALLBACK: return audio_driver_data.audio_callback.callback; case RARCH_AUDIO_CTL_CALLBACK: diff --git a/audio/audio_driver.h b/audio/audio_driver.h index 9e7d1587a4..a68db61620 100644 --- a/audio/audio_driver.h +++ b/audio/audio_driver.h @@ -42,6 +42,8 @@ enum rarch_audio_ctl_state RARCH_AUDIO_CTL_MONITOR_SET_REFRESH_RATE, RARCH_AUDIO_CTL_MONITOR_ADJUST_SYSTEM_RATES, RARCH_AUDIO_CTL_MUTE_TOGGLE, + RARCH_AUDIO_CTL_SET_CALLBACK_ENABLE, + RARCH_AUDIO_CTL_SET_CALLBACK_DISABLE, RARCH_AUDIO_CTL_SET_CALLBACK, RARCH_AUDIO_CTL_UNSET_CALLBACK, RARCH_AUDIO_CTL_CALLBACK, @@ -152,9 +154,6 @@ void audio_driver_dsp_filter_init(const char *device); void audio_driver_set_buffer_size(size_t bufsize); -void audio_driver_callback_set_state(bool state); - - extern audio_driver_t audio_rsound; extern audio_driver_t audio_oss; extern audio_driver_t audio_alsa; diff --git a/audio/audio_thread_wrapper.c b/audio/audio_thread_wrapper.c index c3c6193a3c..f9ebee506e 100644 --- a/audio/audio_thread_wrapper.c +++ b/audio/audio_thread_wrapper.c @@ -189,7 +189,8 @@ static bool audio_thread_stop(void *data) audio_thread_block(thr); thr->is_paused = true; - audio_driver_callback_set_state(false); + + audio_driver_ctl(RARCH_AUDIO_CTL_SET_CALLBACK_DISABLE, NULL); return true; } @@ -201,7 +202,8 @@ static bool audio_thread_start(void *data) if (!thr) return false; - audio_driver_callback_set_state(true); + audio_driver_ctl(RARCH_AUDIO_CTL_SET_CALLBACK_ENABLE, NULL); + thr->is_paused = false; audio_thread_unblock(thr);