mirror of
https://github.com/libretro/RetroArch
synced 2025-03-21 13:20:52 +00:00
Create more RARCH_AUDIO_CTL_ commands
This commit is contained in:
parent
b603b735d5
commit
9e83fedcd9
@ -740,44 +740,7 @@ void audio_driver_frame_is_reverse(void)
|
||||
audio_data.rewind_size - audio_data.rewind_ptr);
|
||||
}
|
||||
|
||||
void audio_monitor_adjust_system_rates(void)
|
||||
{
|
||||
float timing_skew;
|
||||
settings_t *settings = config_get_ptr();
|
||||
const struct retro_system_timing *info = NULL;
|
||||
struct retro_system_av_info *av_info = video_viewport_get_system_av_info();
|
||||
|
||||
if (av_info)
|
||||
info = (const struct retro_system_timing*)&av_info->timing;
|
||||
|
||||
if (!info || info->sample_rate <= 0.0)
|
||||
return;
|
||||
|
||||
timing_skew = fabs(1.0f - info->fps / settings->video.refresh_rate);
|
||||
audio_data.in_rate = info->sample_rate;
|
||||
|
||||
if (timing_skew <= settings->audio.max_timing_skew)
|
||||
audio_data.in_rate *= (settings->video.refresh_rate / info->fps);
|
||||
|
||||
RARCH_LOG("Set audio input rate to: %.2f Hz.\n",
|
||||
audio_data.in_rate);
|
||||
}
|
||||
|
||||
/**
|
||||
* audio_monitor_set_refresh_rate:
|
||||
*
|
||||
* Sets audio monitor refresh rate to new value.
|
||||
**/
|
||||
void audio_monitor_set_refresh_rate(void)
|
||||
{
|
||||
settings_t *settings = config_get_ptr();
|
||||
|
||||
double new_src_ratio = (double)settings->audio.out_rate /
|
||||
audio_data.in_rate;
|
||||
|
||||
audio_data.orig_src_ratio = new_src_ratio;
|
||||
audio_data.src_ratio = new_src_ratio;
|
||||
}
|
||||
|
||||
void audio_driver_set_buffer_size(size_t bufsize)
|
||||
{
|
||||
@ -816,6 +779,29 @@ void audio_driver_callback_set_state(bool state)
|
||||
}
|
||||
}
|
||||
|
||||
static void audio_monitor_adjust_system_rates(void)
|
||||
{
|
||||
float timing_skew;
|
||||
settings_t *settings = config_get_ptr();
|
||||
const struct retro_system_timing *info = NULL;
|
||||
struct retro_system_av_info *av_info = video_viewport_get_system_av_info();
|
||||
|
||||
if (av_info)
|
||||
info = (const struct retro_system_timing*)&av_info->timing;
|
||||
|
||||
if (!info || info->sample_rate <= 0.0)
|
||||
return;
|
||||
|
||||
timing_skew = fabs(1.0f - info->fps / settings->video.refresh_rate);
|
||||
audio_data.in_rate = info->sample_rate;
|
||||
|
||||
if (timing_skew <= settings->audio.max_timing_skew)
|
||||
audio_data.in_rate *= (settings->video.refresh_rate / info->fps);
|
||||
|
||||
RARCH_LOG("Set audio input rate to: %.2f Hz.\n",
|
||||
audio_data.in_rate);
|
||||
}
|
||||
|
||||
bool audio_driver_ctl(enum rarch_audio_ctl_state state, void *data)
|
||||
{
|
||||
driver_t *driver = driver_get_ptr();
|
||||
@ -831,6 +817,18 @@ 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_MONITOR_ADJUST_SYSTEM_RATES:
|
||||
audio_monitor_adjust_system_rates();
|
||||
return true;
|
||||
case RARCH_AUDIO_CTL_MONITOR_SET_REFRESH_RATE:
|
||||
{
|
||||
double new_src_ratio = (double)settings->audio.out_rate /
|
||||
audio_data.in_rate;
|
||||
|
||||
audio_data.orig_src_ratio = new_src_ratio;
|
||||
audio_data.src_ratio = new_src_ratio;
|
||||
}
|
||||
return true;
|
||||
case RARCH_AUDIO_CTL_MUTE_TOGGLE:
|
||||
if (!driver->audio_data || !driver->audio_active)
|
||||
return false;
|
||||
|
@ -79,6 +79,9 @@ enum rarch_audio_ctl_state
|
||||
RARCH_AUDIO_CTL_DEINIT,
|
||||
RARCH_AUDIO_CTL_START,
|
||||
RARCH_AUDIO_CTL_STOP,
|
||||
/* Sets audio monitor refresh rate to new value. */
|
||||
RARCH_AUDIO_CTL_MONITOR_SET_REFRESH_RATE,
|
||||
RARCH_AUDIO_CTL_MONITOR_ADJUST_SYSTEM_RATES,
|
||||
RARCH_AUDIO_CTL_MUTE_TOGGLE,
|
||||
RARCH_AUDIO_CTL_ALIVE
|
||||
};
|
||||
@ -155,14 +158,6 @@ void audio_driver_callback(void);
|
||||
|
||||
void audio_driver_callback_set_state(bool state);
|
||||
|
||||
void audio_monitor_adjust_system_rates(void);
|
||||
|
||||
/**
|
||||
* audio_monitor_set_refresh_rate:
|
||||
*
|
||||
* Sets audio monitor refresh rate to new value.
|
||||
**/
|
||||
void audio_monitor_set_refresh_rate(void);
|
||||
|
||||
extern audio_driver_t audio_rsound;
|
||||
extern audio_driver_t audio_oss;
|
||||
|
4
driver.c
4
driver.c
@ -232,7 +232,7 @@ static void driver_adjust_system_rates(void)
|
||||
rarch_system_info_t *system = rarch_system_info_get_ptr();
|
||||
driver_t *driver = driver_get_ptr();
|
||||
|
||||
audio_monitor_adjust_system_rates();
|
||||
audio_driver_ctl(RARCH_AUDIO_CTL_MONITOR_ADJUST_SYSTEM_RATES, NULL);
|
||||
video_driver_ctl(RARCH_DISPLAY_CTL_MONITOR_ADJUST_SYSTEM_RATES, NULL);
|
||||
|
||||
if (!driver->video_data)
|
||||
@ -255,7 +255,7 @@ static void driver_adjust_system_rates(void)
|
||||
void driver_set_refresh_rate(float hz)
|
||||
{
|
||||
video_monitor_set_refresh_rate(hz);
|
||||
audio_monitor_set_refresh_rate();
|
||||
audio_driver_ctl(RARCH_AUDIO_CTL_MONITOR_SET_REFRESH_RATE, NULL);
|
||||
driver_adjust_system_rates();
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user