From f4b40cd108c20608e365df444cf4f48831c8f3d0 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 26 Apr 2016 17:55:20 +0200 Subject: [PATCH] (Audio) Add device_list_new/device_list_free to audio drivers --- audio/audio_driver.h | 6 ++++ audio/drivers/alsa.c | 62 ++++++++++++++++++++++++++++++++++ audio/drivers/alsa_qsa.c | 2 ++ audio/drivers/alsathread.c | 2 ++ audio/drivers/coreaudio.c | 13 +++++++ audio/drivers/ctr_csnd_audio.c | 2 ++ audio/drivers/ctr_dsp_audio.c | 2 ++ audio/drivers/dsound.c | 2 ++ audio/drivers/gx_audio.c | 2 ++ audio/drivers/jack.c | 2 ++ audio/drivers/nullaudio.c | 2 ++ audio/drivers/openal.c | 2 ++ audio/drivers/opensl.c | 2 ++ audio/drivers/oss.c | 2 ++ audio/drivers/ps3_audio.c | 2 ++ audio/drivers/psp_audio.c | 2 ++ audio/drivers/pulse.c | 2 ++ audio/drivers/roar.c | 2 ++ audio/drivers/rsound.c | 2 ++ audio/drivers/rwebaudio.c | 2 ++ audio/drivers/sdl_audio.c | 2 ++ audio/drivers/xaudio.cpp | 2 ++ audio/drivers/xenon360_audio.c | 2 ++ 23 files changed, 121 insertions(+) diff --git a/audio/audio_driver.h b/audio/audio_driver.h index 5e2f56668b..281a7f44d8 100644 --- a/audio/audio_driver.h +++ b/audio/audio_driver.h @@ -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); diff --git a/audio/drivers/alsa.c b/audio/drivers/alsa.c index 6fb951054d..0b4a359d66 100644 --- a/audio/drivers/alsa.c +++ b/audio/drivers/alsa.c @@ -15,6 +15,8 @@ #include +#include + #include #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, }; diff --git a/audio/drivers/alsa_qsa.c b/audio/drivers/alsa_qsa.c index 19bf000b41..4724cce92a 100644 --- a/audio/drivers/alsa_qsa.c +++ b/audio/drivers/alsa_qsa.c @@ -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, }; diff --git a/audio/drivers/alsathread.c b/audio/drivers/alsathread.c index 11029dae19..b9428754b2 100644 --- a/audio/drivers/alsathread.c +++ b/audio/drivers/alsathread.c @@ -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, }; diff --git a/audio/drivers/coreaudio.c b/audio/drivers/coreaudio.c index 272c380874..2a49e9885d 100644 --- a/audio/drivers/coreaudio.c +++ b/audio/drivers/coreaudio.c @@ -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, }; diff --git a/audio/drivers/ctr_csnd_audio.c b/audio/drivers/ctr_csnd_audio.c index 94af5bec1e..32741dd2ed 100644 --- a/audio/drivers/ctr_csnd_audio.c +++ b/audio/drivers/ctr_csnd_audio.c @@ -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 }; diff --git a/audio/drivers/ctr_dsp_audio.c b/audio/drivers/ctr_dsp_audio.c index c92343fe81..ff1ccc75b5 100644 --- a/audio/drivers/ctr_dsp_audio.c +++ b/audio/drivers/ctr_dsp_audio.c @@ -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 }; diff --git a/audio/drivers/dsound.c b/audio/drivers/dsound.c index fee33c7d0b..76001148ee 100644 --- a/audio/drivers/dsound.c +++ b/audio/drivers/dsound.c @@ -489,6 +489,8 @@ audio_driver_t audio_dsound = { dsound_free, dsound_use_float, "dsound", + NULL, + NULL, dsound_write_avail, dsound_buffer_size, }; diff --git a/audio/drivers/gx_audio.c b/audio/drivers/gx_audio.c index 2b19f076a4..ac53fb3929 100644 --- a/audio/drivers/gx_audio.c +++ b/audio/drivers/gx_audio.c @@ -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, }; diff --git a/audio/drivers/jack.c b/audio/drivers/jack.c index 82724c41fc..f9f3abfaf6 100644 --- a/audio/drivers/jack.c +++ b/audio/drivers/jack.c @@ -362,6 +362,8 @@ audio_driver_t audio_jack = { ja_free, ja_use_float, "jack", + NULL, + NULL, ja_write_avail, ja_buffer_size, }; diff --git a/audio/drivers/nullaudio.c b/audio/drivers/nullaudio.c index 2952728f66..bf0d9f76b3 100644 --- a/audio/drivers/nullaudio.c +++ b/audio/drivers/nullaudio.c @@ -85,6 +85,8 @@ audio_driver_t audio_null = { null_audio_free, null_audio_use_float, "null", + NULL, + NULL, null_audio_write_avail, NULL }; diff --git a/audio/drivers/openal.c b/audio/drivers/openal.c index b410176057..f812c9e91d 100644 --- a/audio/drivers/openal.c +++ b/audio/drivers/openal.c @@ -267,6 +267,8 @@ audio_driver_t audio_openal = { al_free, al_use_float, "openal", + NULL, + NULL, al_write_avail, al_buffer_size, }; diff --git a/audio/drivers/opensl.c b/audio/drivers/opensl.c index e7ba3fc989..2ae03a0532 100644 --- a/audio/drivers/opensl.c +++ b/audio/drivers/opensl.c @@ -313,6 +313,8 @@ audio_driver_t audio_opensl = { sl_free, sl_use_float, "opensl", + NULL, + NULL, sl_write_avail, sl_buffer_size, }; diff --git a/audio/drivers/oss.c b/audio/drivers/oss.c index c5a54393bc..72a73abf76 100644 --- a/audio/drivers/oss.c +++ b/audio/drivers/oss.c @@ -212,6 +212,8 @@ audio_driver_t audio_oss = { oss_free, oss_use_float, "oss", + NULL, + NULL, oss_write_avail, oss_buffer_size, }; diff --git a/audio/drivers/ps3_audio.c b/audio/drivers/ps3_audio.c index 6a5eee40b4..46fdefcc7d 100644 --- a/audio/drivers/ps3_audio.c +++ b/audio/drivers/ps3_audio.c @@ -247,6 +247,8 @@ audio_driver_t audio_ps3 = { ps3_audio_free, ps3_audio_use_float, "ps3", + NULL, + NULL, ps3_audio_write_avail, NULL }; diff --git a/audio/drivers/psp_audio.c b/audio/drivers/psp_audio.c index eaba9cc165..723827cd03 100644 --- a/audio/drivers/psp_audio.c +++ b/audio/drivers/psp_audio.c @@ -286,6 +286,8 @@ audio_driver_t audio_psp = { #else "psp", #endif + NULL, + NULL, psp_write_avail, psp_buffer_size, }; diff --git a/audio/drivers/pulse.c b/audio/drivers/pulse.c index 5ae527bcbd..df59b6bdc7 100644 --- a/audio/drivers/pulse.c +++ b/audio/drivers/pulse.c @@ -343,6 +343,8 @@ audio_driver_t audio_pulse = { pulse_free, pulse_use_float, "pulse", + NULL, + NULL, pulse_write_avail, pulse_buffer_size, }; diff --git a/audio/drivers/roar.c b/audio/drivers/roar.c index beff03f4cf..e124035e33 100644 --- a/audio/drivers/roar.c +++ b/audio/drivers/roar.c @@ -142,6 +142,8 @@ audio_driver_t audio_roar = { ra_free, ra_use_float, "roar", + NULL, + NULL, ra_write_avail, NULL }; diff --git a/audio/drivers/rsound.c b/audio/drivers/rsound.c index 9480495430..7c7584c4e8 100644 --- a/audio/drivers/rsound.c +++ b/audio/drivers/rsound.c @@ -233,6 +233,8 @@ audio_driver_t audio_rsound = { rs_free, rs_use_float, "rsound", + NULL, + NULL, rs_write_avail, rs_buffer_size, }; diff --git a/audio/drivers/rwebaudio.c b/audio/drivers/rwebaudio.c index 516c60162f..c2dcedd05d 100644 --- a/audio/drivers/rwebaudio.c +++ b/audio/drivers/rwebaudio.c @@ -110,6 +110,8 @@ audio_driver_t audio_rwebaudio = { rwebaudio_free, rwebaudio_use_float, "rwebaudio", + NULL, + NULL, rwebaudio_write_avail, rwebaudio_buffer_size, }; diff --git a/audio/drivers/sdl_audio.c b/audio/drivers/sdl_audio.c index 2ec7f67e2c..dc6f16eb34 100644 --- a/audio/drivers/sdl_audio.c +++ b/audio/drivers/sdl_audio.c @@ -253,6 +253,8 @@ audio_driver_t audio_sdl = { #else "sdl", #endif + NULL, + NULL, sdl_audio_write_avail, NULL }; diff --git a/audio/drivers/xaudio.cpp b/audio/drivers/xaudio.cpp index fde377a103..61ab224535 100644 --- a/audio/drivers/xaudio.cpp +++ b/audio/drivers/xaudio.cpp @@ -347,6 +347,8 @@ audio_driver_t audio_xa = { xa_free, xa_use_float, "xaudio", + NULL, + NULL, xa_write_avail, xa_buffer_size, }; diff --git a/audio/drivers/xenon360_audio.c b/audio/drivers/xenon360_audio.c index 55c90499a8..5b67b318f4 100644 --- a/audio/drivers/xenon360_audio.c +++ b/audio/drivers/xenon360_audio.c @@ -146,6 +146,8 @@ audio_driver_t audio_xenon360 = { xenon360_audio_free, xenon360_use_float, "xenon360", + NULL, + NULL, xenon360_write_avail, NULL };