diff --git a/audio/audio_driver.c b/audio/audio_driver.c index b9e589ce44..71c93330a6 100644 --- a/audio/audio_driver.c +++ b/audio/audio_driver.c @@ -681,21 +681,6 @@ void audio_driver_set_buffer_size(size_t bufsize) audio_driver_data.driver_buffer_size = bufsize; } -void audio_driver_unset_callback(void) -{ - audio_driver_data.audio_callback.callback = NULL; - audio_driver_data.audio_callback.set_state = NULL; -} - -void audio_driver_set_callback(const void *data) -{ - const struct retro_audio_callback *cb = - (const struct retro_audio_callback*)data; - - if (cb) - audio_driver_data.audio_callback = *cb; -} - void audio_driver_callback_set_state(bool state) { if (!audio_driver_ctl(RARCH_AUDIO_CTL_HAS_CALLBACK, NULL)) @@ -836,6 +821,29 @@ bool audio_driver_ctl(enum rarch_audio_ctl_state state, void *data) if (audio_driver_data.audio_callback.callback) audio_driver_data.audio_callback.callback(); return true; + case RARCH_AUDIO_CTL_UNSET_CALLBACK: + audio_driver_data.audio_callback.callback = NULL; + audio_driver_data.audio_callback.set_state = NULL; + return true; + case RARCH_AUDIO_CTL_SET_CALLBACK: + { + const struct retro_audio_callback *cb = + (const struct retro_audio_callback*)data; +#ifdef HAVE_NETPLAY + global_t *global = global_get_ptr(); +#endif + + if (recording_driver_get_data_ptr()) /* A/V sync is a must. */ + return false; + +#ifdef HAVE_NETPLAY + if (global->netplay.enable) + return false; +#endif + if (cb) + audio_driver_data.audio_callback = *cb; + } + return true; case RARCH_AUDIO_CTL_MONITOR_ADJUST_SYSTEM_RATES: audio_monitor_adjust_system_rates(); return true; diff --git a/audio/audio_driver.h b/audio/audio_driver.h index f90b83e14f..9e7d1587a4 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, + RARCH_AUDIO_CTL_UNSET_CALLBACK, RARCH_AUDIO_CTL_CALLBACK, RARCH_AUDIO_CTL_HAS_CALLBACK, RARCH_AUDIO_CTL_ALIVE, @@ -150,9 +152,6 @@ void audio_driver_dsp_filter_init(const char *device); void audio_driver_set_buffer_size(size_t bufsize); -void audio_driver_set_callback(const void *info); -void audio_driver_unset_callback(void); - void audio_driver_callback_set_state(bool state); diff --git a/dynamic.c b/dynamic.c index 8dac5975a8..4b26e83af1 100644 --- a/dynamic.c +++ b/dynamic.c @@ -980,19 +980,8 @@ bool rarch_environment_cb(unsigned cmd, void *data) #if defined(HAVE_THREADS) && !defined(__CELLOS_LV2__) case RETRO_ENVIRONMENT_SET_AUDIO_CALLBACK: { - const struct retro_audio_callback *info = - (const struct retro_audio_callback*)data; RARCH_LOG("Environ SET_AUDIO_CALLBACK.\n"); - - if (recording_driver_get_data_ptr()) /* A/V sync is a must. */ - return false; - -#ifdef HAVE_NETPLAY - if (global->netplay.enable) - return false; -#endif - - audio_driver_set_callback(info); + audio_driver_ctl(RARCH_AUDIO_CTL_SET_CALLBACK, data); break; } #endif diff --git a/runloop.c b/runloop.c index 32083e7b8d..63d9117fc9 100644 --- a/runloop.c +++ b/runloop.c @@ -498,7 +498,7 @@ bool runloop_ctl(enum runloop_ctl_state state, void *data) runloop_key_event = NULL; runloop_frontend_key_event = NULL; - audio_driver_unset_callback(); + audio_driver_ctl(RARCH_AUDIO_CTL_UNSET_CALLBACK, NULL); memset(&runloop_system, 0, sizeof(rarch_system_info_t)); break; case RUNLOOP_CTL_IS_FRAME_COUNT_END: