diff --git a/audio/audio_driver.c b/audio/audio_driver.c index 3384e9ac05..81fc90a977 100644 --- a/audio/audio_driver.c +++ b/audio/audio_driver.c @@ -409,3 +409,37 @@ bool audio_driver_mute_toggle(void) return true; } + +/* + * audio_driver_readjust_input_rate: + * + * Readjust the audio input rate. + */ +void audio_driver_readjust_input_rate(void) +{ + double direction, adjust; + int half_size, delta_mid, avail; + unsigned write_idx; + + avail = driver.audio->write_avail(driver.audio_data); + +#if 0 + RARCH_LOG_OUTPUT("Audio buffer is %u%% full\n", + (unsigned)(100 - (avail * 100) / g_extern.audio_data.driver_buffer_size)); +#endif + + write_idx = g_extern.measure_data.buffer_free_samples_count++ & + (AUDIO_BUFFER_FREE_SAMPLES_COUNT - 1); + half_size = g_extern.audio_data.driver_buffer_size / 2; + delta_mid = avail - half_size; + direction = (double)delta_mid / half_size; + adjust = 1.0 + g_settings.audio.rate_control_delta * direction; + + g_extern.measure_data.buffer_free_samples[write_idx] = avail; + g_extern.audio_data.src_ratio = g_extern.audio_data.orig_src_ratio * adjust; + +#if 0 + RARCH_LOG_OUTPUT("New rate: %lf, Orig rate: %lf\n", + g_extern.audio_data.src_ratio, g_extern.audio_data.orig_src_ratio); +#endif +} diff --git a/audio/audio_driver.h b/audio/audio_driver.h index ad789483bb..206b552d20 100644 --- a/audio/audio_driver.h +++ b/audio/audio_driver.h @@ -112,6 +112,13 @@ const char *audio_driver_find_ident(int index); bool audio_driver_mute_toggle(void); +/* + * audio_driver_readjust_input_rate: + * + * Readjust the audio input rate. + */ +void audio_driver_readjust_input_rate(void); + /** * config_get_audio_driver_options: * diff --git a/libretro_version_1.c b/libretro_version_1.c index 4f139c3d1f..555734abcb 100644 --- a/libretro_version_1.c +++ b/libretro_version_1.c @@ -141,33 +141,6 @@ static void video_frame(const void *data, unsigned width, driver.video_active = false; } -/* - * readjust_audio_input_rate: - * - * Readjust the audio input rate. - */ -static void readjust_audio_input_rate(void) -{ - int avail = driver.audio->write_avail(driver.audio_data); - - //RARCH_LOG_OUTPUT("Audio buffer is %u%% full\n", - // (unsigned)(100 - (avail * 100) / g_extern.audio_data.driver_buffer_size)); - - unsigned write_idx = g_extern.measure_data.buffer_free_samples_count++ & - (AUDIO_BUFFER_FREE_SAMPLES_COUNT - 1); - int half_size = g_extern.audio_data.driver_buffer_size / 2; - int delta_mid = avail - half_size; - double direction = (double)delta_mid / half_size; - double adjust = 1.0 + g_settings.audio.rate_control_delta * - direction; - - g_extern.measure_data.buffer_free_samples[write_idx] = avail; - g_extern.audio_data.src_ratio = g_extern.audio_data.orig_src_ratio * adjust; - - //RARCH_LOG_OUTPUT("New rate: %lf, Orig rate: %lf\n", - // g_extern.audio_data.src_ratio, g_extern.audio_data.orig_src_ratio); -} - /** * retro_flush_audio: * @data : pointer to audio buffer. @@ -231,7 +204,7 @@ bool retro_flush_audio(const int16_t *data, size_t samples) src_data.data_out = g_extern.audio_data.outsamples; if (g_extern.audio_data.rate_control) - readjust_audio_input_rate(); + audio_driver_readjust_input_rate(); src_data.ratio = g_extern.audio_data.src_ratio; if (g_extern.is_slowmotion)