diff --git a/audio/audio_driver.c b/audio/audio_driver.c index b6223ac6c3..9c14efa410 100644 --- a/audio/audio_driver.c +++ b/audio/audio_driver.c @@ -703,24 +703,6 @@ void audio_driver_dsp_filter_init(const char *device) RARCH_ERR("[DSP]: Failed to initialize DSP filter \"%s\".\n", device); } -void audio_driver_setup_rewind(void) -{ - unsigned i; - - /* Push audio ready to be played. */ - audio_data.rewind_ptr = audio_data.rewind_size; - - for (i = 0; i < audio_data.data_ptr; i += 2) - { - audio_data.rewind_buf[--audio_data.rewind_ptr] = - audio_data.conv_outsamples[i + 1]; - - audio_data.rewind_buf[--audio_data.rewind_ptr] = - audio_data.conv_outsamples[i + 0]; - } - - audio_data.data_ptr = 0; -} void audio_driver_frame_is_reverse(void) { @@ -775,6 +757,25 @@ static void audio_monitor_adjust_system_rates(void) audio_data.in_rate); } +static void audio_driver_setup_rewind(void) +{ + unsigned i; + + /* Push audio ready to be played. */ + audio_data.rewind_ptr = audio_data.rewind_size; + + for (i = 0; i < audio_data.data_ptr; i += 2) + { + audio_data.rewind_buf[--audio_data.rewind_ptr] = + audio_data.conv_outsamples[i + 1]; + + audio_data.rewind_buf[--audio_data.rewind_ptr] = + audio_data.conv_outsamples[i + 0]; + } + + audio_data.data_ptr = 0; +} + bool audio_driver_ctl(enum rarch_audio_ctl_state state, void *data) { driver_t *driver = driver_get_ptr(); @@ -790,6 +791,9 @@ bool audio_driver_ctl(enum rarch_audio_ctl_state state, void *data) return init_audio(); case RARCH_AUDIO_CTL_DEINIT: return uninit_audio(); + case RARCH_AUDIO_CTL_SETUP_REWIND: + audio_driver_setup_rewind(); + return true; case RARCH_AUDIO_CTL_HAS_CALLBACK: return audio_data.audio_callback.callback; case RARCH_AUDIO_CTL_CALLBACK: diff --git a/audio/audio_driver.h b/audio/audio_driver.h index 9d0560ca36..dffbc6f1ed 100644 --- a/audio/audio_driver.h +++ b/audio/audio_driver.h @@ -79,6 +79,7 @@ enum rarch_audio_ctl_state RARCH_AUDIO_CTL_DEINIT, RARCH_AUDIO_CTL_START, RARCH_AUDIO_CTL_STOP, + RARCH_AUDIO_CTL_SETUP_REWIND, /* Sets audio monitor refresh rate to new value. */ RARCH_AUDIO_CTL_MONITOR_SET_REFRESH_RATE, RARCH_AUDIO_CTL_MONITOR_ADJUST_SYSTEM_RATES, @@ -137,8 +138,6 @@ void audio_driver_dsp_filter_free(void); void audio_driver_dsp_filter_init(const char *device); -void audio_driver_setup_rewind(void); - void audio_driver_frame_is_reverse(void); void audio_driver_set_buffer_size(size_t bufsize); diff --git a/runloop.c b/runloop.c index 5744e93a34..d28071aa2f 100644 --- a/runloop.c +++ b/runloop.c @@ -192,7 +192,7 @@ static void check_rewind(settings_t *settings, if (state_manager_pop(global->rewind.state, &buf)) { state_manager_set_frame_is_reversed(true); - audio_driver_setup_rewind(); + audio_driver_ctl(RARCH_AUDIO_CTL_SETUP_REWIND, NULL); rarch_main_msg_queue_push_new(MSG_REWINDING, 0, main_is_paused ? 1 : 30, true);