mirror of
https://github.com/libretro/RetroArch
synced 2025-04-24 06:02:36 +00:00
Move readjust_input_rate function to audio_driver.c
This commit is contained in:
parent
d99a224688
commit
d0e6685d3d
@ -409,3 +409,37 @@ bool audio_driver_mute_toggle(void)
|
|||||||
|
|
||||||
return true;
|
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
|
||||||
|
}
|
||||||
|
@ -112,6 +112,13 @@ const char *audio_driver_find_ident(int index);
|
|||||||
|
|
||||||
bool audio_driver_mute_toggle(void);
|
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:
|
* config_get_audio_driver_options:
|
||||||
*
|
*
|
||||||
|
@ -141,33 +141,6 @@ static void video_frame(const void *data, unsigned width,
|
|||||||
driver.video_active = false;
|
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:
|
* retro_flush_audio:
|
||||||
* @data : pointer to audio buffer.
|
* @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;
|
src_data.data_out = g_extern.audio_data.outsamples;
|
||||||
|
|
||||||
if (g_extern.audio_data.rate_control)
|
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;
|
src_data.ratio = g_extern.audio_data.src_ratio;
|
||||||
if (g_extern.is_slowmotion)
|
if (g_extern.is_slowmotion)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user