mirror of
https://github.com/libretro/RetroArch
synced 2025-04-24 06:02:36 +00:00
(Audio) Add device_list_new/device_list_free to audio drivers
This commit is contained in:
parent
e93924b0e2
commit
f4b40cd108
@ -107,6 +107,12 @@ typedef struct audio_driver
|
|||||||
/* Human-readable identifier. */
|
/* Human-readable identifier. */
|
||||||
const char *ident;
|
const char *ident;
|
||||||
|
|
||||||
|
/* Optional. Get audio device list (allocates, caller has to free this) */
|
||||||
|
void *(*device_list_new)(void *data);
|
||||||
|
|
||||||
|
/* Optional. Frees audio device list */
|
||||||
|
void (*device_list_free)(void *data, void *data2);
|
||||||
|
|
||||||
/* Optional. */
|
/* Optional. */
|
||||||
size_t (*write_avail)(void *data);
|
size_t (*write_avail)(void *data);
|
||||||
|
|
||||||
|
@ -15,6 +15,8 @@
|
|||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include <lists/string_list.h>
|
||||||
|
|
||||||
#include <alsa/asoundlib.h>
|
#include <alsa/asoundlib.h>
|
||||||
|
|
||||||
#include "../audio_driver.h"
|
#include "../audio_driver.h"
|
||||||
@ -324,6 +326,64 @@ static size_t alsa_buffer_size(void *data)
|
|||||||
return alsa->buffer_size;
|
return alsa->buffer_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void *alsa_device_list_new(void *data)
|
||||||
|
{
|
||||||
|
void **hints, **n;
|
||||||
|
union string_list_elem_attr attr;
|
||||||
|
struct string_list *s = string_list_new();
|
||||||
|
|
||||||
|
if (!s)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
attr.i = 0;
|
||||||
|
|
||||||
|
if (snd_device_name_hint(-1, "pcm", &hints) != 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
n = hints;
|
||||||
|
|
||||||
|
while (*n != NULL)
|
||||||
|
{
|
||||||
|
char *name = snd_device_name_get_hint(*n, "NAME");
|
||||||
|
char *io = snd_device_name_get_hint(*n, "IOID");
|
||||||
|
char *desc = snd_device_name_get_hint(*n, "DESC");
|
||||||
|
|
||||||
|
/* description of device IOID - input / output identifcation
|
||||||
|
* ("Input" or "Output"), NULL means both) */
|
||||||
|
|
||||||
|
if (io == NULL)
|
||||||
|
string_list_append(s, name, attr);
|
||||||
|
|
||||||
|
if (name)
|
||||||
|
free(name);
|
||||||
|
if (io)
|
||||||
|
free(io);
|
||||||
|
if (desc)
|
||||||
|
free(desc);
|
||||||
|
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* free hint buffer too */
|
||||||
|
snd_device_name_free_hint(hints);
|
||||||
|
|
||||||
|
return s;
|
||||||
|
|
||||||
|
error:
|
||||||
|
string_list_free(s);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void alsa_device_list_free(void *data, void *array_list_data)
|
||||||
|
{
|
||||||
|
struct string_list *s = (struct string_list*)array_list_data;
|
||||||
|
|
||||||
|
if (!s)
|
||||||
|
return;
|
||||||
|
|
||||||
|
string_list_free(s);
|
||||||
|
}
|
||||||
|
|
||||||
audio_driver_t audio_alsa = {
|
audio_driver_t audio_alsa = {
|
||||||
alsa_init,
|
alsa_init,
|
||||||
alsa_write,
|
alsa_write,
|
||||||
@ -334,6 +394,8 @@ audio_driver_t audio_alsa = {
|
|||||||
alsa_free,
|
alsa_free,
|
||||||
alsa_use_float,
|
alsa_use_float,
|
||||||
"alsa",
|
"alsa",
|
||||||
|
alsa_device_list_new,
|
||||||
|
alsa_device_list_free,
|
||||||
alsa_write_avail,
|
alsa_write_avail,
|
||||||
alsa_buffer_size,
|
alsa_buffer_size,
|
||||||
};
|
};
|
||||||
|
@ -377,6 +377,8 @@ audio_driver_t audio_alsa = {
|
|||||||
alsa_qsa_free,
|
alsa_qsa_free,
|
||||||
alsa_qsa_use_float,
|
alsa_qsa_use_float,
|
||||||
"alsa",
|
"alsa",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
alsa_qsa_write_avail,
|
alsa_qsa_write_avail,
|
||||||
alsa_qsa_buffer_size,
|
alsa_qsa_buffer_size,
|
||||||
};
|
};
|
||||||
|
@ -352,6 +352,8 @@ audio_driver_t audio_alsathread = {
|
|||||||
alsa_thread_free,
|
alsa_thread_free,
|
||||||
alsa_thread_use_float,
|
alsa_thread_use_float,
|
||||||
"alsathread",
|
"alsathread",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
alsa_thread_write_avail,
|
alsa_thread_write_avail,
|
||||||
alsa_thread_buffer_size,
|
alsa_thread_buffer_size,
|
||||||
};
|
};
|
||||||
|
@ -440,6 +440,17 @@ static size_t coreaudio_buffer_size(void *data)
|
|||||||
return dev->buffer_size;
|
return dev->buffer_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void *coreaudio_device_list_new(void *data)
|
||||||
|
{
|
||||||
|
/* TODO/FIXME */
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void coreaudio_device_list_free(void *data, void *array_list_data)
|
||||||
|
{
|
||||||
|
/* TODO/FIXME */
|
||||||
|
}
|
||||||
|
|
||||||
audio_driver_t audio_coreaudio = {
|
audio_driver_t audio_coreaudio = {
|
||||||
coreaudio_init,
|
coreaudio_init,
|
||||||
coreaudio_write,
|
coreaudio_write,
|
||||||
@ -450,6 +461,8 @@ audio_driver_t audio_coreaudio = {
|
|||||||
coreaudio_free,
|
coreaudio_free,
|
||||||
coreaudio_use_float,
|
coreaudio_use_float,
|
||||||
"coreaudio",
|
"coreaudio",
|
||||||
|
coreaudio_device_list_new,
|
||||||
|
coreaudio_device_list_free,
|
||||||
coreaudio_write_avail,
|
coreaudio_write_avail,
|
||||||
coreaudio_buffer_size,
|
coreaudio_buffer_size,
|
||||||
};
|
};
|
||||||
|
@ -300,6 +300,8 @@ audio_driver_t audio_ctr_csnd = {
|
|||||||
ctr_csnd_audio_free,
|
ctr_csnd_audio_free,
|
||||||
ctr_csnd_audio_use_float,
|
ctr_csnd_audio_use_float,
|
||||||
"csnd",
|
"csnd",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
ctr_csnd_audio_write_avail,
|
ctr_csnd_audio_write_avail,
|
||||||
ctr_csnd_audio_buffer_size
|
ctr_csnd_audio_buffer_size
|
||||||
};
|
};
|
||||||
|
@ -214,6 +214,8 @@ audio_driver_t audio_ctr_dsp = {
|
|||||||
ctr_dsp_audio_free,
|
ctr_dsp_audio_free,
|
||||||
ctr_dsp_audio_use_float,
|
ctr_dsp_audio_use_float,
|
||||||
"dsp",
|
"dsp",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
ctr_dsp_audio_write_avail,
|
ctr_dsp_audio_write_avail,
|
||||||
ctr_dsp_audio_buffer_size
|
ctr_dsp_audio_buffer_size
|
||||||
};
|
};
|
||||||
|
@ -489,6 +489,8 @@ audio_driver_t audio_dsound = {
|
|||||||
dsound_free,
|
dsound_free,
|
||||||
dsound_use_float,
|
dsound_use_float,
|
||||||
"dsound",
|
"dsound",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
dsound_write_avail,
|
dsound_write_avail,
|
||||||
dsound_buffer_size,
|
dsound_buffer_size,
|
||||||
};
|
};
|
||||||
|
@ -241,6 +241,8 @@ audio_driver_t audio_gx = {
|
|||||||
gx_audio_free,
|
gx_audio_free,
|
||||||
gx_audio_use_float,
|
gx_audio_use_float,
|
||||||
"gx",
|
"gx",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
gx_audio_write_avail,
|
gx_audio_write_avail,
|
||||||
gx_audio_buffer_size,
|
gx_audio_buffer_size,
|
||||||
};
|
};
|
||||||
|
@ -362,6 +362,8 @@ audio_driver_t audio_jack = {
|
|||||||
ja_free,
|
ja_free,
|
||||||
ja_use_float,
|
ja_use_float,
|
||||||
"jack",
|
"jack",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
ja_write_avail,
|
ja_write_avail,
|
||||||
ja_buffer_size,
|
ja_buffer_size,
|
||||||
};
|
};
|
||||||
|
@ -85,6 +85,8 @@ audio_driver_t audio_null = {
|
|||||||
null_audio_free,
|
null_audio_free,
|
||||||
null_audio_use_float,
|
null_audio_use_float,
|
||||||
"null",
|
"null",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
null_audio_write_avail,
|
null_audio_write_avail,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
@ -267,6 +267,8 @@ audio_driver_t audio_openal = {
|
|||||||
al_free,
|
al_free,
|
||||||
al_use_float,
|
al_use_float,
|
||||||
"openal",
|
"openal",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
al_write_avail,
|
al_write_avail,
|
||||||
al_buffer_size,
|
al_buffer_size,
|
||||||
};
|
};
|
||||||
|
@ -313,6 +313,8 @@ audio_driver_t audio_opensl = {
|
|||||||
sl_free,
|
sl_free,
|
||||||
sl_use_float,
|
sl_use_float,
|
||||||
"opensl",
|
"opensl",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
sl_write_avail,
|
sl_write_avail,
|
||||||
sl_buffer_size,
|
sl_buffer_size,
|
||||||
};
|
};
|
||||||
|
@ -212,6 +212,8 @@ audio_driver_t audio_oss = {
|
|||||||
oss_free,
|
oss_free,
|
||||||
oss_use_float,
|
oss_use_float,
|
||||||
"oss",
|
"oss",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
oss_write_avail,
|
oss_write_avail,
|
||||||
oss_buffer_size,
|
oss_buffer_size,
|
||||||
};
|
};
|
||||||
|
@ -247,6 +247,8 @@ audio_driver_t audio_ps3 = {
|
|||||||
ps3_audio_free,
|
ps3_audio_free,
|
||||||
ps3_audio_use_float,
|
ps3_audio_use_float,
|
||||||
"ps3",
|
"ps3",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
ps3_audio_write_avail,
|
ps3_audio_write_avail,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
@ -286,6 +286,8 @@ audio_driver_t audio_psp = {
|
|||||||
#else
|
#else
|
||||||
"psp",
|
"psp",
|
||||||
#endif
|
#endif
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
psp_write_avail,
|
psp_write_avail,
|
||||||
psp_buffer_size,
|
psp_buffer_size,
|
||||||
};
|
};
|
||||||
|
@ -343,6 +343,8 @@ audio_driver_t audio_pulse = {
|
|||||||
pulse_free,
|
pulse_free,
|
||||||
pulse_use_float,
|
pulse_use_float,
|
||||||
"pulse",
|
"pulse",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
pulse_write_avail,
|
pulse_write_avail,
|
||||||
pulse_buffer_size,
|
pulse_buffer_size,
|
||||||
};
|
};
|
||||||
|
@ -142,6 +142,8 @@ audio_driver_t audio_roar = {
|
|||||||
ra_free,
|
ra_free,
|
||||||
ra_use_float,
|
ra_use_float,
|
||||||
"roar",
|
"roar",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
ra_write_avail,
|
ra_write_avail,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
@ -233,6 +233,8 @@ audio_driver_t audio_rsound = {
|
|||||||
rs_free,
|
rs_free,
|
||||||
rs_use_float,
|
rs_use_float,
|
||||||
"rsound",
|
"rsound",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
rs_write_avail,
|
rs_write_avail,
|
||||||
rs_buffer_size,
|
rs_buffer_size,
|
||||||
};
|
};
|
||||||
|
@ -110,6 +110,8 @@ audio_driver_t audio_rwebaudio = {
|
|||||||
rwebaudio_free,
|
rwebaudio_free,
|
||||||
rwebaudio_use_float,
|
rwebaudio_use_float,
|
||||||
"rwebaudio",
|
"rwebaudio",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
rwebaudio_write_avail,
|
rwebaudio_write_avail,
|
||||||
rwebaudio_buffer_size,
|
rwebaudio_buffer_size,
|
||||||
};
|
};
|
||||||
|
@ -253,6 +253,8 @@ audio_driver_t audio_sdl = {
|
|||||||
#else
|
#else
|
||||||
"sdl",
|
"sdl",
|
||||||
#endif
|
#endif
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
sdl_audio_write_avail,
|
sdl_audio_write_avail,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
@ -347,6 +347,8 @@ audio_driver_t audio_xa = {
|
|||||||
xa_free,
|
xa_free,
|
||||||
xa_use_float,
|
xa_use_float,
|
||||||
"xaudio",
|
"xaudio",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
xa_write_avail,
|
xa_write_avail,
|
||||||
xa_buffer_size,
|
xa_buffer_size,
|
||||||
};
|
};
|
||||||
|
@ -146,6 +146,8 @@ audio_driver_t audio_xenon360 = {
|
|||||||
xenon360_audio_free,
|
xenon360_audio_free,
|
||||||
xenon360_use_float,
|
xenon360_use_float,
|
||||||
"xenon360",
|
"xenon360",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
xenon360_write_avail,
|
xenon360_write_avail,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user