Updates pt. 2

This commit is contained in:
twinaphex 2015-03-20 21:31:16 +01:00
parent e996d5d51f
commit 950f15ac2c
9 changed files with 38 additions and 27 deletions

View File

@ -52,16 +52,15 @@ static void *alsa_qsa_init(const char *device,
snd_pcm_channel_params_t params = {0};
snd_pcm_channel_info_t pi;
snd_pcm_channel_setup_t setup = {0};
alsa_t *alsa;
settings_t *settings = config_get_ptr();
alsa_t *alsa = (alsa_t*)calloc(1, sizeof(alsa_t));
if (!alsa)
return NULL;
(void)device;
(void)rate;
(void)latency;
alsa = (alsa_t*)calloc(1, sizeof(alsa_t));
if (!alsa)
return NULL;
if ((err = snd_pcm_open_preferred(&alsa->pcm, &card, &dev,
SND_PCM_OPEN_PLAYBACK)) < 0)
{
@ -123,8 +122,8 @@ static void *alsa_qsa_init(const char *device,
goto error;
}
if (g_settings.audio.block_frames)
alsa->buf_size = g_settings.audio.block_frames * 4;
if (settings->audio.block_frames)
alsa->buf_size = settings->audio.block_frames * 4;
else
alsa->buf_size = next_pow2(32 * latency);

View File

@ -196,6 +196,7 @@ static void *coreaudio_init(const char *device,
AudioStreamBasicDescription stream_desc = {0};
static bool session_initialized = false;
coreaudio_t *dev = NULL;
settings_t *settings = config_get_ptr();
#ifdef OSX_PPC
ComponentDescription desc = {0};
#else
@ -300,7 +301,7 @@ static void *coreaudio_init(const char *device,
RARCH_LOG("[CoreAudio]: Using output sample rate of %.1f Hz\n",
(float)real_desc.mSampleRate);
g_settings.audio.out_rate = real_desc.mSampleRate;
settings->audio.out_rate = real_desc.mSampleRate;
/* Set channel layout (fails on iOS). */
#ifndef IOS
@ -321,7 +322,7 @@ static void *coreaudio_init(const char *device,
if (AudioUnitInitialize(dev->dev) != noErr)
goto error;
fifo_size = (latency * g_settings.audio.out_rate) / 1000;
fifo_size = (latency * settings->audio.out_rate) / 1000;
fifo_size *= 2 * sizeof(float);
dev->buffer_size = fifo_size;

View File

@ -83,7 +83,8 @@ static void dma_callback(void)
static void *gx_audio_init(const char *device,
unsigned rate, unsigned latency)
{
gx_audio_t *wa = (gx_audio_t*)memalign(32, sizeof(*wa));
settings_t *settings = config_get_ptr();
gx_audio_t *wa = (gx_audio_t*)memalign(32, sizeof(*wa));
if (!wa)
return NULL;
@ -97,12 +98,12 @@ static void *gx_audio_init(const char *device,
if (rate < 33000)
{
AISetDSPSampleRate(AI_SAMPLERATE_32KHZ);
g_settings.audio.out_rate = 32000;
settings->audio.out_rate = 32000;
}
else
{
AISetDSPSampleRate(AI_SAMPLERATE_48KHZ);
g_settings.audio.out_rate = 48000;
settings->audio.out_rate = 48000;
}
OSInitThreadQueue(&wa->cond);

View File

@ -89,9 +89,10 @@ static void shutdown_cb(void *data)
static int parse_ports(char **dest_ports, const char **jports)
{
int i;
char *save;
char *save = NULL;
int parsed = 0;
const char *con = strtok_r(g_settings.audio.device, ",", &save);
settings_t *settings = config_get_ptr();
const char *con = strtok_r(settings->audio.device, ",", &save);
if (con)
dest_ports[parsed++] = strdup(con);
@ -107,9 +108,10 @@ static int parse_ports(char **dest_ports, const char **jports)
static size_t find_buffersize(jack_t *jd, int latency)
{
int i, buffer_frames, min_buffer_frames, jack_latency = 0;
jack_latency_range_t range;
int frames = latency * g_settings.audio.out_rate / 1000;
int i, buffer_frames, min_buffer_frames, jack_latency = 0;
settings_t *settings = config_get_ptr();
int frames = latency * settings->audio.out_rate / 1000;
for (i = 0; i < 2; i++)
{
@ -138,6 +140,7 @@ static void *ja_init(const char *device, unsigned rate, unsigned latency)
char *dest_ports[2];
size_t bufsize = 0;
int parsed = 0;
settings_t *settings = config_get_ptr();
jack_t *jd = (jack_t*)calloc(1, sizeof(jack_t));
if (!jd)
@ -150,7 +153,7 @@ static void *ja_init(const char *device, unsigned rate, unsigned latency)
if (jd->client == NULL)
goto error;
g_settings.audio.out_rate = jack_get_sample_rate(jd->client);
settings->audio.out_rate = jack_get_sample_rate(jd->client);
jack_set_process_callback(jd->client, process_cb, jd);
jack_on_shutdown(jd->client, shutdown_cb, jd);

View File

@ -109,6 +109,7 @@ static void *sl_init(const char *device, unsigned rate, unsigned latency)
SLDataSink audio_sink = {0};
SLDataLocator_AndroidSimpleBufferQueue loc_bufq = {0};
SLDataLocator_OutputMix loc_outmix = {0};
settings_t *settings = config_get_ptr();
(void)device;
@ -129,8 +130,8 @@ static void *sl_init(const char *device, unsigned rate, unsigned latency)
GOTO_IF_FAIL(SLEngineItf_CreateOutputMix(sl->engine, &sl->output_mix, 0, NULL, NULL));
GOTO_IF_FAIL(SLObjectItf_Realize(sl->output_mix, SL_BOOLEAN_FALSE));
if (g_settings.audio.block_frames)
sl->buf_size = g_settings.audio.block_frames * 4;
if (settings->audio.block_frames)
sl->buf_size = settings->audio.block_frames * 4;
else
sl->buf_size = next_pow2(32 * latency);

View File

@ -45,6 +45,7 @@ static void *oss_init(const char *device, unsigned rate, unsigned latency)
{
int frags, frag, channels, format, new_rate;
int *fd = (int*)calloc(1, sizeof(int));
settings_t *settings = config_get_ptr();
if (fd == NULL)
return NULL;
@ -99,7 +100,7 @@ static void *oss_init(const char *device, unsigned rate, unsigned latency)
if (new_rate != (int)rate)
{
RARCH_WARN("Requested sample rate not supported. Adjusting output rate to %d Hz.\n", new_rate);
g_settings.audio.out_rate = new_rate;
settings->audio.out_rate = new_rate;
}
return fd;

View File

@ -27,13 +27,14 @@ static void rwebaudio_free(void *data)
static void *rwebaudio_init(const char *device, unsigned rate, unsigned latency)
{
void *data;
settings_t *settings = config_get_ptr();
void *data = RWebAudioInit(latency);
(void)device;
(void)rate;
data = RWebAudioInit(latency);
if (data)
g_settings.audio.out_rate = RWebAudioSampleRate();
settings->audio.out_rate = RWebAudioSampleRate();
return data;
}

View File

@ -69,7 +69,9 @@ static void *sdl_audio_init(const char *device,
void *tmp;
SDL_AudioSpec out;
SDL_AudioSpec spec = {0};
sdl_audio_t *sdl = NULL;
settings_t *settings = config_get_ptr();
sdl_audio_t *sdl = NULL;
(void)device;
if (SDL_WasInit(0) == 0)
@ -103,13 +105,14 @@ static void *sdl_audio_init(const char *device,
free(sdl);
return 0;
}
g_settings.audio.out_rate = out.freq;
settings->audio.out_rate = out.freq;
sdl->lock = slock_new();
sdl->cond = scond_new();
RARCH_LOG("SDL audio: Requested %u ms latency, got %d ms\n",
latency, (int)(out.samples * 4 * 1000 / g_settings.audio.out_rate));
latency, (int)(out.samples * 4 * 1000 / settings->audio.out_rate));
/* Create a buffer twice as big as needed and prefill the buffer. */
bufsize = out.samples * 4 * sizeof(int16_t);

View File

@ -36,6 +36,7 @@ static void *xenon360_audio_init(const char *device,
unsigned rate, unsigned latency)
{
static bool inited = false;
settings_t *settings = config_get_ptr();
if (!inited)
{
@ -43,7 +44,7 @@ static void *xenon360_audio_init(const char *device,
inited = true;
}
g_settings.audio.out_rate = SOUND_FREQUENCY;
settings->audio.out_rate = SOUND_FREQUENCY;
return calloc(1, sizeof(xenon_audio_t));
}