(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. */
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. */
size_t (*write_avail)(void *data);

View File

@ -15,6 +15,8 @@
#include <stdlib.h>
#include <lists/string_list.h>
#include <alsa/asoundlib.h>
#include "../audio_driver.h"
@ -324,6 +326,64 @@ static size_t alsa_buffer_size(void *data)
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 = {
alsa_init,
alsa_write,
@ -334,6 +394,8 @@ audio_driver_t audio_alsa = {
alsa_free,
alsa_use_float,
"alsa",
alsa_device_list_new,
alsa_device_list_free,
alsa_write_avail,
alsa_buffer_size,
};

View File

@ -377,6 +377,8 @@ audio_driver_t audio_alsa = {
alsa_qsa_free,
alsa_qsa_use_float,
"alsa",
NULL,
NULL,
alsa_qsa_write_avail,
alsa_qsa_buffer_size,
};

View File

@ -352,6 +352,8 @@ audio_driver_t audio_alsathread = {
alsa_thread_free,
alsa_thread_use_float,
"alsathread",
NULL,
NULL,
alsa_thread_write_avail,
alsa_thread_buffer_size,
};

View File

@ -440,6 +440,17 @@ static size_t coreaudio_buffer_size(void *data)
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 = {
coreaudio_init,
coreaudio_write,
@ -450,6 +461,8 @@ audio_driver_t audio_coreaudio = {
coreaudio_free,
coreaudio_use_float,
"coreaudio",
coreaudio_device_list_new,
coreaudio_device_list_free,
coreaudio_write_avail,
coreaudio_buffer_size,
};

View File

@ -300,6 +300,8 @@ audio_driver_t audio_ctr_csnd = {
ctr_csnd_audio_free,
ctr_csnd_audio_use_float,
"csnd",
NULL,
NULL,
ctr_csnd_audio_write_avail,
ctr_csnd_audio_buffer_size
};

View File

@ -214,6 +214,8 @@ audio_driver_t audio_ctr_dsp = {
ctr_dsp_audio_free,
ctr_dsp_audio_use_float,
"dsp",
NULL,
NULL,
ctr_dsp_audio_write_avail,
ctr_dsp_audio_buffer_size
};

View File

@ -489,6 +489,8 @@ audio_driver_t audio_dsound = {
dsound_free,
dsound_use_float,
"dsound",
NULL,
NULL,
dsound_write_avail,
dsound_buffer_size,
};

View File

@ -241,6 +241,8 @@ audio_driver_t audio_gx = {
gx_audio_free,
gx_audio_use_float,
"gx",
NULL,
NULL,
gx_audio_write_avail,
gx_audio_buffer_size,
};

View File

@ -362,6 +362,8 @@ audio_driver_t audio_jack = {
ja_free,
ja_use_float,
"jack",
NULL,
NULL,
ja_write_avail,
ja_buffer_size,
};

View File

@ -85,6 +85,8 @@ audio_driver_t audio_null = {
null_audio_free,
null_audio_use_float,
"null",
NULL,
NULL,
null_audio_write_avail,
NULL
};

View File

@ -267,6 +267,8 @@ audio_driver_t audio_openal = {
al_free,
al_use_float,
"openal",
NULL,
NULL,
al_write_avail,
al_buffer_size,
};

View File

@ -313,6 +313,8 @@ audio_driver_t audio_opensl = {
sl_free,
sl_use_float,
"opensl",
NULL,
NULL,
sl_write_avail,
sl_buffer_size,
};

View File

@ -212,6 +212,8 @@ audio_driver_t audio_oss = {
oss_free,
oss_use_float,
"oss",
NULL,
NULL,
oss_write_avail,
oss_buffer_size,
};

View File

@ -247,6 +247,8 @@ audio_driver_t audio_ps3 = {
ps3_audio_free,
ps3_audio_use_float,
"ps3",
NULL,
NULL,
ps3_audio_write_avail,
NULL
};

View File

@ -286,6 +286,8 @@ audio_driver_t audio_psp = {
#else
"psp",
#endif
NULL,
NULL,
psp_write_avail,
psp_buffer_size,
};

View File

@ -343,6 +343,8 @@ audio_driver_t audio_pulse = {
pulse_free,
pulse_use_float,
"pulse",
NULL,
NULL,
pulse_write_avail,
pulse_buffer_size,
};

View File

@ -142,6 +142,8 @@ audio_driver_t audio_roar = {
ra_free,
ra_use_float,
"roar",
NULL,
NULL,
ra_write_avail,
NULL
};

View File

@ -233,6 +233,8 @@ audio_driver_t audio_rsound = {
rs_free,
rs_use_float,
"rsound",
NULL,
NULL,
rs_write_avail,
rs_buffer_size,
};

View File

@ -110,6 +110,8 @@ audio_driver_t audio_rwebaudio = {
rwebaudio_free,
rwebaudio_use_float,
"rwebaudio",
NULL,
NULL,
rwebaudio_write_avail,
rwebaudio_buffer_size,
};

View File

@ -253,6 +253,8 @@ audio_driver_t audio_sdl = {
#else
"sdl",
#endif
NULL,
NULL,
sdl_audio_write_avail,
NULL
};

View File

@ -347,6 +347,8 @@ audio_driver_t audio_xa = {
xa_free,
xa_use_float,
"xaudio",
NULL,
NULL,
xa_write_avail,
xa_buffer_size,
};

View File

@ -146,6 +146,8 @@ audio_driver_t audio_xenon360 = {
xenon360_audio_free,
xenon360_use_float,
"xenon360",
NULL,
NULL,
xenon360_write_avail,
NULL
};