1
0
mirror of https://github.com/libretro/RetroArch synced 2025-03-30 07:20:36 +00:00

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

@ -283,7 +283,7 @@ static bool uninit_audio(void)
if (!settings->audio.enable)
{
audio_driver_ctl(RARCH_AUDIO_CTL_UNSET_ACTIVE, NULL);
audio_driver_unset_active();
return false;
}
@ -338,7 +338,7 @@ static bool audio_driver_init_internal(bool audio_cb_inited)
if (!settings->audio.enable)
{
audio_driver_ctl(RARCH_AUDIO_CTL_UNSET_ACTIVE, NULL);
audio_driver_unset_active();
return false;
}
@ -370,15 +370,15 @@ static bool audio_driver_init_internal(bool audio_cb_inited)
if (!audio_driver_context_audio_data)
{
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;
if ( audio_driver_ctl(RARCH_AUDIO_CTL_IS_ACTIVE, NULL)
if ( audio_driver_is_active()
&& current_audio->use_float(audio_driver_context_audio_data))
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);
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",
settings->audio.resampler);
audio_driver_ctl(RARCH_AUDIO_CTL_UNSET_ACTIVE, NULL);
audio_driver_unset_active();
}
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;
if (
!audio_cb_inited
&& audio_driver_ctl(RARCH_AUDIO_CTL_IS_ACTIVE, NULL)
&& audio_driver_is_active()
&& settings->audio.rate_control
)
{
@ -444,7 +444,7 @@ static bool audio_driver_init_internal(bool audio_cb_inited)
/* Threaded driver is initially stopped. */
if (
audio_driver_ctl(RARCH_AUDIO_CTL_IS_ACTIVE, NULL)
audio_driver_is_active()
&& !settings->audio.mute_enable
&& audio_cb_inited
)
@ -493,7 +493,7 @@ void audio_driver_set_nonblocking_state(bool enable)
{
settings_t *settings = config_get_ptr();
if (
audio_driver_ctl(RARCH_AUDIO_CTL_IS_ACTIVE, NULL)
audio_driver_is_active()
&& 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)
return true;
if (!audio_driver_ctl(RARCH_AUDIO_CTL_IS_ACTIVE, NULL))
if (!audio_driver_is_active())
return false;
if (!audio_driver_data.data)
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,
output_data, output_frames * output_size * 2) < 0)
{
audio_driver_ctl(RARCH_AUDIO_CTL_UNSET_ACTIVE, NULL);
audio_driver_unset_active();
return false;
}
@ -922,7 +922,7 @@ bool audio_driver_toggle_mute(void)
settings_t *settings = config_get_ptr();
if (!audio_driver_context_audio_data)
return false;
if (!audio_driver_ctl(RARCH_AUDIO_CTL_IS_ACTIVE, NULL))
if (!audio_driver_is_active())
return false;
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);
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 true;
@ -967,44 +967,52 @@ bool audio_driver_alive(void)
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)
{
case RARCH_AUDIO_CTL_DESTROY:
audio_driver_active = false;
audio_driver_data_own = false;
current_audio = NULL;
break;
case RARCH_AUDIO_CTL_DESTROY_DATA:
audio_driver_context_audio_data = NULL;
break;
case RARCH_AUDIO_CTL_SET_OWN_DRIVER:
audio_driver_data_own = true;
break;
case RARCH_AUDIO_CTL_UNSET_OWN_DRIVER:
audio_driver_data_own = false;
break;
case RARCH_AUDIO_CTL_OWNS_DRIVER:
return audio_driver_data_own;
case RARCH_AUDIO_CTL_SET_ACTIVE:
audio_driver_active = true;
break;
case RARCH_AUDIO_CTL_UNSET_ACTIVE:
audio_driver_active = false;
break;
case RARCH_AUDIO_CTL_IS_ACTIVE:
return audio_driver_active;
case RARCH_AUDIO_CTL_FRAME_IS_REVERSE:
/* We just rewound. Flush rewind audio buffer. */
audio_driver_flush(
audio_driver_data.rewind.buf + audio_driver_data.rewind.ptr,
audio_driver_data.rewind.size - audio_driver_data.rewind.ptr);
break;
case RARCH_AUDIO_CTL_NONE:
default:
break;
}
return true;
/* We just rewound. Flush rewind audio buffer. */
audio_driver_flush(
audio_driver_data.rewind.buf + audio_driver_data.rewind.ptr,
audio_driver_data.rewind.size - audio_driver_data.rewind.ptr);
}
void audio_driver_destroy_data(void)
{
audio_driver_context_audio_data = NULL;
}
void audio_driver_set_own_driver(void)
{
audio_driver_data_own = true;
}
void audio_driver_unset_own_driver(void)
{
audio_driver_data_own = false;
}
bool audio_driver_owns_driver(void)
{
return audio_driver_data_own;
}
void audio_driver_set_active(void)
{
audio_driver_active = true;
}
void audio_driver_unset_active(void)
{
audio_driver_active = false;
}
bool audio_driver_is_active(void)
{
return audio_driver_active;
}
void audio_driver_destroy(void)
{
audio_driver_active = false;
audio_driver_data_own = false;
current_audio = NULL;
}

@ -37,20 +37,6 @@ extern "C" {
#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
{
/* Creates and initializes handle to audio driver.
@ -102,8 +88,19 @@ typedef struct audio_driver
size_t (*buffer_size)(void *data);
} 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);
@ -187,8 +184,12 @@ bool audio_driver_start(void);
bool audio_driver_stop(void);
bool audio_driver_owns_driver(void);
void audio_driver_unset_callback(void);
void audio_driver_frame_is_reverse(void);
bool audio_driver_alive(void);
bool audio_driver_deinit(void);

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

@ -304,7 +304,7 @@ static void init_drivers(int flags)
if (flags & DRIVER_VIDEO)
video_driver_unset_own_driver();
if (flags & DRIVER_AUDIO)
audio_driver_ctl(RARCH_AUDIO_CTL_UNSET_OWN_DRIVER, NULL);
audio_driver_unset_own_driver();
if (flags & DRIVER_INPUT)
input_driver_ctl(RARCH_INPUT_CTL_UNSET_OWN_DRIVER, NULL);
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))
input_driver_ctl(RARCH_INPUT_CTL_DESTROY_DATA, NULL);
if ((flags & DRIVER_AUDIO) && !audio_driver_ctl(RARCH_AUDIO_CTL_OWNS_DRIVER, NULL))
audio_driver_ctl(RARCH_AUDIO_CTL_DESTROY_DATA, NULL);
if ((flags & DRIVER_AUDIO) && !audio_driver_owns_driver())
audio_driver_destroy_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:
video_driver_destroy();
audio_driver_ctl(RARCH_AUDIO_CTL_DESTROY, NULL);
audio_driver_destroy();
input_driver_ctl(RARCH_INPUT_CTL_DESTROY, NULL);
#ifdef HAVE_MENU
menu_driver_ctl(RARCH_MENU_CTL_DESTROY, NULL);

@ -1158,7 +1158,7 @@ static void rarch_init_savefile_paths(void)
static bool init_state(void)
{
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);

@ -700,7 +700,7 @@ void state_manager_check_rewind(bool pressed)
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);
}