Move readjust_input_rate function to audio_driver.c

This commit is contained in:
twinaphex 2015-02-11 17:36:31 +01:00
parent d99a224688
commit d0e6685d3d
3 changed files with 42 additions and 28 deletions

View File

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

View File

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

View File

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