This commit is contained in:
twinaphex 2015-11-23 10:13:27 +01:00
parent 82f64cbf43
commit e02fdd5b5b
4 changed files with 41 additions and 41 deletions

View File

@ -228,31 +228,6 @@ const char *config_get_audio_driver_options(void)
return char_list_new_special(STRING_LIST_AUDIO_DRIVERS, NULL); return char_list_new_special(STRING_LIST_AUDIO_DRIVERS, NULL);
} }
void find_audio_driver(void)
{
driver_t *driver = driver_get_ptr();
settings_t *settings = config_get_ptr();
int i = find_driver_index("audio_driver", settings->audio.driver);
if (i >= 0)
driver->audio = (const audio_driver_t*)audio_driver_find_handle(i);
else
{
unsigned d;
RARCH_ERR("Couldn't find any audio driver named \"%s\"\n",
settings->audio.driver);
RARCH_LOG_OUTPUT("Available audio drivers are:\n");
for (d = 0; audio_driver_find_handle(d); d++)
RARCH_LOG_OUTPUT("\t%s\n", audio_driver_find_ident(d));
RARCH_WARN("Going to default to first audio driver...\n");
driver->audio = (const audio_driver_t*)audio_driver_find_handle(0);
if (!driver->audio)
retro_fail(1, "find_audio_driver()");
}
}
static bool uninit_audio(void) static bool uninit_audio(void)
{ {
@ -344,7 +319,7 @@ static bool init_audio(void)
return false; return false;
} }
find_audio_driver(); audio_driver_ctl(RARCH_AUDIO_CTL_FIND_DRIVER, NULL);
#ifdef HAVE_THREADS #ifdef HAVE_THREADS
if (audio_data.audio_callback.callback) if (audio_data.audio_callback.callback)
{ {
@ -703,14 +678,6 @@ void audio_driver_dsp_filter_init(const char *device)
RARCH_ERR("[DSP]: Failed to initialize DSP filter \"%s\".\n", device); RARCH_ERR("[DSP]: Failed to initialize DSP filter \"%s\".\n", device);
} }
void audio_driver_frame_is_reverse(void)
{
/* We just rewound. Flush rewind audio buffer. */
audio_driver_flush(audio_data.rewind_buf + audio_data.rewind_ptr,
audio_data.rewind_size - audio_data.rewind_ptr);
}
void audio_driver_set_buffer_size(size_t bufsize) void audio_driver_set_buffer_size(size_t bufsize)
{ {
audio_data.driver_buffer_size = bufsize; audio_data.driver_buffer_size = bufsize;
@ -776,6 +743,34 @@ static void audio_driver_setup_rewind(void)
audio_data.data_ptr = 0; audio_data.data_ptr = 0;
} }
static bool find_audio_driver(void)
{
driver_t *driver = driver_get_ptr();
settings_t *settings = config_get_ptr();
int i = find_driver_index("audio_driver", settings->audio.driver);
if (i >= 0)
driver->audio = (const audio_driver_t*)audio_driver_find_handle(i);
else
{
unsigned d;
RARCH_ERR("Couldn't find any audio driver named \"%s\"\n",
settings->audio.driver);
RARCH_LOG_OUTPUT("Available audio drivers are:\n");
for (d = 0; audio_driver_find_handle(d); d++)
RARCH_LOG_OUTPUT("\t%s\n", audio_driver_find_ident(d));
RARCH_WARN("Going to default to first audio driver...\n");
driver->audio = (const audio_driver_t*)audio_driver_find_handle(0);
if (!driver->audio)
retro_fail(1, "find_audio_driver()");
}
return true;
}
bool audio_driver_ctl(enum rarch_audio_ctl_state state, void *data) bool audio_driver_ctl(enum rarch_audio_ctl_state state, void *data)
{ {
driver_t *driver = driver_get_ptr(); driver_t *driver = driver_get_ptr();
@ -835,6 +830,13 @@ bool audio_driver_ctl(enum rarch_audio_ctl_state state, void *data)
return audio->start(driver->audio_data); return audio->start(driver->audio_data);
case RARCH_AUDIO_CTL_STOP: case RARCH_AUDIO_CTL_STOP:
return audio->stop(driver->audio_data); return audio->stop(driver->audio_data);
case RARCH_AUDIO_CTL_FIND_DRIVER:
return find_audio_driver();
case RARCH_AUDIO_CTL_FRAME_IS_REVERSE:
/* We just rewound. Flush rewind audio buffer. */
audio_driver_flush(audio_data.rewind_buf + audio_data.rewind_ptr,
audio_data.rewind_size - audio_data.rewind_ptr);
return true;
} }
return false; return false;

View File

@ -79,6 +79,7 @@ enum rarch_audio_ctl_state
RARCH_AUDIO_CTL_DEINIT, RARCH_AUDIO_CTL_DEINIT,
RARCH_AUDIO_CTL_START, RARCH_AUDIO_CTL_START,
RARCH_AUDIO_CTL_STOP, RARCH_AUDIO_CTL_STOP,
RARCH_AUDIO_CTL_FIND_DRIVER,
RARCH_AUDIO_CTL_SETUP_REWIND, RARCH_AUDIO_CTL_SETUP_REWIND,
/* Sets audio monitor refresh rate to new value. */ /* Sets audio monitor refresh rate to new value. */
RARCH_AUDIO_CTL_MONITOR_SET_REFRESH_RATE, RARCH_AUDIO_CTL_MONITOR_SET_REFRESH_RATE,
@ -86,7 +87,8 @@ enum rarch_audio_ctl_state
RARCH_AUDIO_CTL_MUTE_TOGGLE, RARCH_AUDIO_CTL_MUTE_TOGGLE,
RARCH_AUDIO_CTL_CALLBACK, RARCH_AUDIO_CTL_CALLBACK,
RARCH_AUDIO_CTL_HAS_CALLBACK, RARCH_AUDIO_CTL_HAS_CALLBACK,
RARCH_AUDIO_CTL_ALIVE RARCH_AUDIO_CTL_ALIVE,
RARCH_AUDIO_CTL_FRAME_IS_REVERSE
}; };
bool audio_driver_ctl(enum rarch_audio_ctl_state state, void *data); bool audio_driver_ctl(enum rarch_audio_ctl_state state, void *data);
@ -120,8 +122,6 @@ void audio_driver_set_nonblocking_state(bool enable);
**/ **/
const char* config_get_audio_driver_options(void); const char* config_get_audio_driver_options(void);
void find_audio_driver(void);
bool audio_driver_flush(const int16_t *data, size_t samples); bool audio_driver_flush(const int16_t *data, size_t samples);
void audio_driver_sample(int16_t left, int16_t right); void audio_driver_sample(int16_t left, int16_t right);
@ -138,8 +138,6 @@ void audio_driver_dsp_filter_free(void);
void audio_driver_dsp_filter_init(const char *device); void audio_driver_dsp_filter_init(const char *device);
void audio_driver_frame_is_reverse(void);
void audio_driver_set_buffer_size(size_t bufsize); void audio_driver_set_buffer_size(size_t bufsize);
void audio_driver_set_callback(const void *info); void audio_driver_set_callback(const void *info);

View File

@ -217,7 +217,7 @@ bool find_next_driver(const char *label, char *s, size_t len)
**/ **/
void init_drivers_pre(void) void init_drivers_pre(void)
{ {
find_audio_driver(); audio_driver_ctl(RARCH_AUDIO_CTL_FIND_DRIVER, NULL);
video_driver_ctl(RARCH_DISPLAY_CTL_FIND_DRIVER, NULL); video_driver_ctl(RARCH_DISPLAY_CTL_FIND_DRIVER, NULL);
find_input_driver(); find_input_driver();
find_camera_driver(); find_camera_driver();

View File

@ -173,7 +173,7 @@ static void check_rewind(settings_t *settings,
if (state_manager_frame_is_reversed()) if (state_manager_frame_is_reversed())
{ {
audio_driver_frame_is_reverse(); audio_driver_ctl(RARCH_AUDIO_CTL_FRAME_IS_REVERSE, NULL);
state_manager_set_frame_is_reversed(false); state_manager_set_frame_is_reversed(false);
} }