Add RARCH_AUDIO_CTL_SETUP_REWIND

This commit is contained in:
twinaphex 2015-11-22 15:25:43 +01:00
parent f60c3395f0
commit b59e2907f3
3 changed files with 24 additions and 21 deletions

View File

@ -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:

View File

@ -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);

View File

@ -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);