(Audio) Add device_list_new/device_list_free to audio drivers

This commit is contained in:
twinaphex 2016-04-26 17:55:20 +02:00
parent e93924b0e2
commit f4b40cd108
23 changed files with 121 additions and 0 deletions

View File

@ -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);

View File

@ -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,
}; };

View File

@ -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,
}; };

View File

@ -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,
}; };

View File

@ -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,
}; };

View File

@ -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
}; };

View File

@ -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
}; };

View File

@ -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,
}; };

View File

@ -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,
}; };

View File

@ -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,
}; };

View File

@ -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
}; };

View File

@ -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,
}; };

View File

@ -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,
}; };

View File

@ -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,
}; };

View File

@ -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
}; };

View File

@ -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,
}; };

View File

@ -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,
}; };

View File

@ -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
}; };

View File

@ -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,
}; };

View File

@ -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,
}; };

View File

@ -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
}; };

View File

@ -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,
}; };

View File

@ -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
}; };