diff --git a/audio/audio_driver.c b/audio/audio_driver.c index 0b0c68b75e..c2d0750ec8 100644 --- a/audio/audio_driver.c +++ b/audio/audio_driver.c @@ -505,3 +505,26 @@ bool audio_driver_alive(void) return driver->audio->alive(driver->audio_data); return false; } + +bool audio_driver_start(void) +{ + driver_t *driver = driver_get_ptr(); + if (driver && driver->audio && driver->audio->start) + return driver->audio->start(driver->audio_data); + return false; +} + +bool audio_driver_stop(void) +{ + driver_t *driver = driver_get_ptr(); + if (driver && driver->audio && driver->audio->stop) + return driver->audio->stop(driver->audio_data); + return false; +} + +void audio_driver_set_nonblock_state(bool toggle) +{ + driver_t *driver = driver_get_ptr(); + if (driver && driver->audio && driver->audio->set_nonblock_state) + driver->audio->set_nonblock_state(driver->audio_data, toggle); +} diff --git a/audio/audio_driver.h b/audio/audio_driver.h index ebaf7d32d8..1fcdc45a8d 100644 --- a/audio/audio_driver.h +++ b/audio/audio_driver.h @@ -121,6 +121,12 @@ void audio_driver_readjust_input_rate(void); bool audio_driver_alive(void); +bool audio_driver_start(void); + +bool audio_driver_stop(void); + +void audio_driver_set_nonblock_state(bool toggle); + /** * config_get_audio_driver_options: * diff --git a/driver.c b/driver.c index 80409dfdc0..933af651be 100644 --- a/driver.c +++ b/driver.c @@ -292,8 +292,7 @@ void driver_set_nonblock_state(bool enable) } if (driver->audio_active && driver->audio_data) - driver->audio->set_nonblock_state(driver->audio_data, - settings->audio.sync ? enable : true); + audio_driver_set_nonblock_state(settings->audio.sync ? enable : true); global->audio_data.chunk_size = enable ? global->audio_data.nonblock_chunk_size : diff --git a/retroarch.c b/retroarch.c index 4a065b9f09..210101fc15 100644 --- a/retroarch.c +++ b/retroarch.c @@ -2471,14 +2471,14 @@ bool rarch_main_command(unsigned cmd) if (!audio_driver_alive()) return false; - driver->audio->stop(driver->audio_data); + if (!audio_driver_stop()) + return false; break; case RARCH_CMD_AUDIO_START: if (!driver->audio_data || audio_driver_alive()) return false; - if (!settings->audio.mute_enable - && !driver->audio->start(driver->audio_data)) + if (!settings->audio.mute_enable && !audio_driver_start()) { RARCH_ERR("Failed to start audio driver. Will continue without audio.\n"); driver->audio_active = false; @@ -2619,8 +2619,7 @@ bool rarch_main_command(unsigned cmd) case RARCH_CMD_AUDIO_SET_NONBLOCKING_STATE: boolean = true; /* fall-through */ case RARCH_CMD_AUDIO_SET_BLOCKING_STATE: - if (driver->audio && driver->audio->set_nonblock_state) - driver->audio->set_nonblock_state(driver->audio_data, boolean); + audio_driver_set_nonblock_state(boolean); break; case RARCH_CMD_OVERLAY_SET_SCALE_FACTOR: #ifdef HAVE_OVERLAY