Get rid of audio_driver_ctl

This commit is contained in:
twinaphex 2016-05-08 18:24:25 +02:00
parent 4791c37039
commit 807b5c6325
6 changed files with 83 additions and 74 deletions

View File

@ -283,7 +283,7 @@ static bool uninit_audio(void)
if (!settings->audio.enable) if (!settings->audio.enable)
{ {
audio_driver_ctl(RARCH_AUDIO_CTL_UNSET_ACTIVE, NULL); audio_driver_unset_active();
return false; return false;
} }
@ -338,7 +338,7 @@ static bool audio_driver_init_internal(bool audio_cb_inited)
if (!settings->audio.enable) if (!settings->audio.enable)
{ {
audio_driver_ctl(RARCH_AUDIO_CTL_UNSET_ACTIVE, NULL); audio_driver_unset_active();
return false; return false;
} }
@ -370,15 +370,15 @@ static bool audio_driver_init_internal(bool audio_cb_inited)
if (!audio_driver_context_audio_data) if (!audio_driver_context_audio_data)
{ {
RARCH_ERR("Failed to initialize audio driver. Will continue without audio.\n"); RARCH_ERR("Failed to initialize audio driver. Will continue without audio.\n");
audio_driver_ctl(RARCH_AUDIO_CTL_UNSET_ACTIVE, NULL); audio_driver_unset_active();
} }
audio_driver_data.use_float = false; audio_driver_data.use_float = false;
if ( audio_driver_ctl(RARCH_AUDIO_CTL_IS_ACTIVE, NULL) if ( audio_driver_is_active()
&& current_audio->use_float(audio_driver_context_audio_data)) && current_audio->use_float(audio_driver_context_audio_data))
audio_driver_data.use_float = true; audio_driver_data.use_float = true;
if (!settings->audio.sync && audio_driver_ctl(RARCH_AUDIO_CTL_IS_ACTIVE, NULL)) if (!settings->audio.sync && audio_driver_is_active())
{ {
event_cmd_ctl(EVENT_CMD_AUDIO_SET_NONBLOCKING_STATE, NULL); event_cmd_ctl(EVENT_CMD_AUDIO_SET_NONBLOCKING_STATE, NULL);
audio_driver_data.chunk.size = audio_driver_data.chunk.nonblock_size; audio_driver_data.chunk.size = audio_driver_data.chunk.nonblock_size;
@ -400,7 +400,7 @@ static bool audio_driver_init_internal(bool audio_cb_inited)
{ {
RARCH_ERR("Failed to initialize resampler \"%s\".\n", RARCH_ERR("Failed to initialize resampler \"%s\".\n",
settings->audio.resampler); settings->audio.resampler);
audio_driver_ctl(RARCH_AUDIO_CTL_UNSET_ACTIVE, NULL); audio_driver_unset_active();
} }
retro_assert(audio_driver_data.data = (float*) retro_assert(audio_driver_data.data = (float*)
@ -422,7 +422,7 @@ static bool audio_driver_init_internal(bool audio_cb_inited)
audio_driver_data.audio_rate.control = false; audio_driver_data.audio_rate.control = false;
if ( if (
!audio_cb_inited !audio_cb_inited
&& audio_driver_ctl(RARCH_AUDIO_CTL_IS_ACTIVE, NULL) && audio_driver_is_active()
&& settings->audio.rate_control && settings->audio.rate_control
) )
{ {
@ -444,7 +444,7 @@ static bool audio_driver_init_internal(bool audio_cb_inited)
/* Threaded driver is initially stopped. */ /* Threaded driver is initially stopped. */
if ( if (
audio_driver_ctl(RARCH_AUDIO_CTL_IS_ACTIVE, NULL) audio_driver_is_active()
&& !settings->audio.mute_enable && !settings->audio.mute_enable
&& audio_cb_inited && audio_cb_inited
) )
@ -493,7 +493,7 @@ void audio_driver_set_nonblocking_state(bool enable)
{ {
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
if ( if (
audio_driver_ctl(RARCH_AUDIO_CTL_IS_ACTIVE, NULL) audio_driver_is_active()
&& audio_driver_context_audio_data && audio_driver_context_audio_data
) )
current_audio->set_nonblock_state(audio_driver_context_audio_data, current_audio->set_nonblock_state(audio_driver_context_audio_data,
@ -531,7 +531,7 @@ static bool audio_driver_flush(const int16_t *data, size_t samples)
if (runloop_ctl(RUNLOOP_CTL_IS_PAUSED, NULL) || settings->audio.mute_enable) if (runloop_ctl(RUNLOOP_CTL_IS_PAUSED, NULL) || settings->audio.mute_enable)
return true; return true;
if (!audio_driver_ctl(RARCH_AUDIO_CTL_IS_ACTIVE, NULL)) if (!audio_driver_is_active())
return false; return false;
if (!audio_driver_data.data) if (!audio_driver_data.data)
return false; return false;
@ -592,7 +592,7 @@ static bool audio_driver_flush(const int16_t *data, size_t samples)
if (current_audio->write(audio_driver_context_audio_data, if (current_audio->write(audio_driver_context_audio_data,
output_data, output_frames * output_size * 2) < 0) output_data, output_frames * output_size * 2) < 0)
{ {
audio_driver_ctl(RARCH_AUDIO_CTL_UNSET_ACTIVE, NULL); audio_driver_unset_active();
return false; return false;
} }
@ -922,7 +922,7 @@ bool audio_driver_toggle_mute(void)
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
if (!audio_driver_context_audio_data) if (!audio_driver_context_audio_data)
return false; return false;
if (!audio_driver_ctl(RARCH_AUDIO_CTL_IS_ACTIVE, NULL)) if (!audio_driver_is_active())
return false; return false;
settings->audio.mute_enable = !settings->audio.mute_enable; settings->audio.mute_enable = !settings->audio.mute_enable;
@ -931,7 +931,7 @@ bool audio_driver_toggle_mute(void)
event_cmd_ctl(EVENT_CMD_AUDIO_STOP, NULL); event_cmd_ctl(EVENT_CMD_AUDIO_STOP, NULL);
else if (!event_cmd_ctl(EVENT_CMD_AUDIO_START, NULL)) else if (!event_cmd_ctl(EVENT_CMD_AUDIO_START, NULL))
{ {
audio_driver_ctl(RARCH_AUDIO_CTL_UNSET_ACTIVE, NULL); audio_driver_unset_active();
return false; return false;
} }
return true; return true;
@ -967,44 +967,52 @@ bool audio_driver_alive(void)
return current_audio->alive(audio_driver_context_audio_data); return current_audio->alive(audio_driver_context_audio_data);
} }
bool audio_driver_ctl(enum rarch_audio_ctl_state state, void *data) void audio_driver_frame_is_reverse(void)
{ {
switch (state) /* We just rewound. Flush rewind audio buffer. */
{ audio_driver_flush(
case RARCH_AUDIO_CTL_DESTROY: audio_driver_data.rewind.buf + audio_driver_data.rewind.ptr,
audio_driver_active = false; audio_driver_data.rewind.size - audio_driver_data.rewind.ptr);
audio_driver_data_own = false; }
current_audio = NULL;
break; void audio_driver_destroy_data(void)
case RARCH_AUDIO_CTL_DESTROY_DATA: {
audio_driver_context_audio_data = NULL; audio_driver_context_audio_data = NULL;
break; }
case RARCH_AUDIO_CTL_SET_OWN_DRIVER:
audio_driver_data_own = true; void audio_driver_set_own_driver(void)
break; {
case RARCH_AUDIO_CTL_UNSET_OWN_DRIVER: audio_driver_data_own = true;
audio_driver_data_own = false; }
break;
case RARCH_AUDIO_CTL_OWNS_DRIVER: void audio_driver_unset_own_driver(void)
return audio_driver_data_own; {
case RARCH_AUDIO_CTL_SET_ACTIVE: audio_driver_data_own = false;
audio_driver_active = true; }
break;
case RARCH_AUDIO_CTL_UNSET_ACTIVE: bool audio_driver_owns_driver(void)
audio_driver_active = false; {
break; return audio_driver_data_own;
case RARCH_AUDIO_CTL_IS_ACTIVE: }
return audio_driver_active;
case RARCH_AUDIO_CTL_FRAME_IS_REVERSE: void audio_driver_set_active(void)
/* We just rewound. Flush rewind audio buffer. */ {
audio_driver_flush( audio_driver_active = true;
audio_driver_data.rewind.buf + audio_driver_data.rewind.ptr, }
audio_driver_data.rewind.size - audio_driver_data.rewind.ptr);
break; void audio_driver_unset_active(void)
case RARCH_AUDIO_CTL_NONE: {
default: audio_driver_active = false;
break; }
}
bool audio_driver_is_active(void)
return true; {
return audio_driver_active;
}
void audio_driver_destroy(void)
{
audio_driver_active = false;
audio_driver_data_own = false;
current_audio = NULL;
} }

View File

@ -37,20 +37,6 @@ extern "C" {
#define AUDIO_MAX_RATIO 16 #define AUDIO_MAX_RATIO 16
enum rarch_audio_ctl_state
{
RARCH_AUDIO_CTL_NONE = 0,
RARCH_AUDIO_CTL_DESTROY,
RARCH_AUDIO_CTL_DESTROY_DATA,
RARCH_AUDIO_CTL_FRAME_IS_REVERSE,
RARCH_AUDIO_CTL_SET_OWN_DRIVER,
RARCH_AUDIO_CTL_UNSET_OWN_DRIVER,
RARCH_AUDIO_CTL_OWNS_DRIVER,
RARCH_AUDIO_CTL_SET_ACTIVE,
RARCH_AUDIO_CTL_UNSET_ACTIVE,
RARCH_AUDIO_CTL_IS_ACTIVE
};
typedef struct audio_driver typedef struct audio_driver
{ {
/* Creates and initializes handle to audio driver. /* Creates and initializes handle to audio driver.
@ -102,8 +88,19 @@ typedef struct audio_driver
size_t (*buffer_size)(void *data); size_t (*buffer_size)(void *data);
} audio_driver_t; } audio_driver_t;
void audio_driver_destroy_data(void);
bool audio_driver_ctl(enum rarch_audio_ctl_state state, void *data); void audio_driver_set_own_driver(void);
void audio_driver_unset_own_driver(void);
void audio_driver_set_active(void);
void audio_driver_unset_active(void);
bool audio_driver_is_active(void);
void audio_driver_destroy(void);
void audio_driver_deinit_resampler(void); void audio_driver_deinit_resampler(void);
@ -187,8 +184,12 @@ bool audio_driver_start(void);
bool audio_driver_stop(void); bool audio_driver_stop(void);
bool audio_driver_owns_driver(void);
void audio_driver_unset_callback(void); void audio_driver_unset_callback(void);
void audio_driver_frame_is_reverse(void);
bool audio_driver_alive(void); bool audio_driver_alive(void);
bool audio_driver_deinit(void); bool audio_driver_deinit(void);

View File

@ -1225,7 +1225,7 @@ bool event_cmd_ctl(enum event_command cmd, void *data)
{ {
RARCH_ERR("Failed to start audio driver. " RARCH_ERR("Failed to start audio driver. "
"Will continue without audio.\n"); "Will continue without audio.\n");
audio_driver_ctl(RARCH_AUDIO_CTL_UNSET_ACTIVE, NULL); audio_driver_unset_active();
} }
break; break;
case EVENT_CMD_AUDIO_MUTE_TOGGLE: case EVENT_CMD_AUDIO_MUTE_TOGGLE:

View File

@ -304,7 +304,7 @@ static void init_drivers(int flags)
if (flags & DRIVER_VIDEO) if (flags & DRIVER_VIDEO)
video_driver_unset_own_driver(); video_driver_unset_own_driver();
if (flags & DRIVER_AUDIO) if (flags & DRIVER_AUDIO)
audio_driver_ctl(RARCH_AUDIO_CTL_UNSET_OWN_DRIVER, NULL); audio_driver_unset_own_driver();
if (flags & DRIVER_INPUT) if (flags & DRIVER_INPUT)
input_driver_ctl(RARCH_INPUT_CTL_UNSET_OWN_DRIVER, NULL); input_driver_ctl(RARCH_INPUT_CTL_UNSET_OWN_DRIVER, NULL);
if (flags & DRIVER_CAMERA) if (flags & DRIVER_CAMERA)
@ -418,8 +418,8 @@ static void uninit_drivers(int flags)
if ((flags & DRIVER_INPUT) && !input_driver_ctl(RARCH_INPUT_CTL_OWNS_DRIVER, NULL)) if ((flags & DRIVER_INPUT) && !input_driver_ctl(RARCH_INPUT_CTL_OWNS_DRIVER, NULL))
input_driver_ctl(RARCH_INPUT_CTL_DESTROY_DATA, NULL); input_driver_ctl(RARCH_INPUT_CTL_DESTROY_DATA, NULL);
if ((flags & DRIVER_AUDIO) && !audio_driver_ctl(RARCH_AUDIO_CTL_OWNS_DRIVER, NULL)) if ((flags & DRIVER_AUDIO) && !audio_driver_owns_driver())
audio_driver_ctl(RARCH_AUDIO_CTL_DESTROY_DATA, NULL); audio_driver_destroy_data();
} }
bool driver_ctl(enum driver_ctl_state state, void *data) bool driver_ctl(enum driver_ctl_state state, void *data)
@ -428,7 +428,7 @@ bool driver_ctl(enum driver_ctl_state state, void *data)
{ {
case RARCH_DRIVER_CTL_DEINIT: case RARCH_DRIVER_CTL_DEINIT:
video_driver_destroy(); video_driver_destroy();
audio_driver_ctl(RARCH_AUDIO_CTL_DESTROY, NULL); audio_driver_destroy();
input_driver_ctl(RARCH_INPUT_CTL_DESTROY, NULL); input_driver_ctl(RARCH_INPUT_CTL_DESTROY, NULL);
#ifdef HAVE_MENU #ifdef HAVE_MENU
menu_driver_ctl(RARCH_MENU_CTL_DESTROY, NULL); menu_driver_ctl(RARCH_MENU_CTL_DESTROY, NULL);

View File

@ -1158,7 +1158,7 @@ static void rarch_init_savefile_paths(void)
static bool init_state(void) static bool init_state(void)
{ {
video_driver_set_active(); video_driver_set_active();
audio_driver_ctl(RARCH_AUDIO_CTL_SET_ACTIVE, NULL); audio_driver_set_active();
rarch_ctl(RARCH_CTL_UNSET_FORCE_FULLSCREEN, NULL); rarch_ctl(RARCH_CTL_UNSET_FORCE_FULLSCREEN, NULL);

View File

@ -700,7 +700,7 @@ void state_manager_check_rewind(bool pressed)
if (state_manager_frame_is_reversed()) if (state_manager_frame_is_reversed())
{ {
audio_driver_ctl(RARCH_AUDIO_CTL_FRAME_IS_REVERSE, NULL); audio_driver_frame_is_reverse();
state_manager_set_frame_is_reversed(false); state_manager_set_frame_is_reversed(false);
} }