aboutsummaryrefslogtreecommitdiffstats
path: root/Alc/backends/alsa.c
diff options
context:
space:
mode:
Diffstat (limited to 'Alc/backends/alsa.c')
-rw-r--r--Alc/backends/alsa.c52
1 files changed, 17 insertions, 35 deletions
diff --git a/Alc/backends/alsa.c b/Alc/backends/alsa.c
index 9d9e97a6..7d1797f4 100644
--- a/Alc/backends/alsa.c
+++ b/Alc/backends/alsa.c
@@ -273,8 +273,7 @@ typedef struct {
typedef struct {
ALCchar *name;
- char *card;
- int dev;
+ char *device;
} DevMap;
static DevMap *allDevNameMap;
@@ -293,7 +292,7 @@ static DevMap *probe_devices(snd_pcm_stream_t stream, ALuint *count)
snd_ctl_card_info_t *info;
snd_pcm_info_t *pcminfo;
DevMap *DevList;
- char name[1024];
+ char name[256];
snd_ctl_card_info_malloc(&info);
snd_pcm_info_malloc(&pcminfo);
@@ -304,8 +303,7 @@ static DevMap *probe_devices(snd_pcm_stream_t stream, ALuint *count)
DevList = malloc(sizeof(DevMap) * 1);
DevList[0].name = strdup("ALSA Default");
- DevList[0].card = NULL;
- DevList[0].dev = 0;
+ DevList[0].device = NULL;
idx = 1;
while(card >= 0)
{
@@ -345,15 +343,21 @@ static DevMap *probe_devices(snd_pcm_stream_t stream, ALuint *count)
temp = realloc(DevList, sizeof(DevMap) * (idx+1));
if(temp)
{
+ char devname[128];
+
DevList = temp;
cname = snd_ctl_card_info_get_name(info);
dname = snd_pcm_info_get_name(pcminfo);
cid = snd_ctl_card_info_get_id(info);
+
snprintf(name, sizeof(name), "%s, %s (CARD=%s,DEV=%d)",
cname, dname, cid, dev);
+ snprintf(devname, sizeof(devname), "%sCARD=%s,DEV=%d",
+ ((stream==SND_PCM_STREAM_PLAYBACK) ? device_prefix : capture_prefix),
+ cid, dev);
+
DevList[idx].name = strdup(name);
- DevList[idx].card = strdup(cid);
- DevList[idx].dev = dev;
+ DevList[idx].device = strdup(devname);
idx++;
}
}
@@ -549,7 +553,6 @@ static ALCenum alsa_open_playback(ALCdevice *device, const ALCchar *deviceName)
{
const char *driver = "default";
alsa_data *data;
- char str[128];
int i;
ConfigValueStr("alsa", "device", &driver);
@@ -569,11 +572,7 @@ static ALCenum alsa_open_playback(ALCdevice *device, const ALCchar *deviceName)
strcmp(deviceName, allDevNameMap[idx].name) == 0)
{
if(idx > 0)
- {
- snprintf(str, sizeof(str), "%sCARD=%s,DEV=%d", device_prefix,
- allDevNameMap[idx].card, allDevNameMap[idx].dev);
- driver = str;
- }
+ driver = allDevNameMap[idx].device;
break;
}
}
@@ -840,7 +839,6 @@ static ALCenum alsa_open_capture(ALCdevice *pDevice, const ALCchar *deviceName)
snd_pcm_format_t format;
ALuint frameSize;
alsa_data *data;
- char str[128];
char *err;
int i;
@@ -861,11 +859,7 @@ static ALCenum alsa_open_capture(ALCdevice *pDevice, const ALCchar *deviceName)
strcmp(deviceName, allCaptureDevNameMap[idx].name) == 0)
{
if(idx > 0)
- {
- snprintf(str, sizeof(str), "%sCARD=%s,DEV=%d", capture_prefix,
- allCaptureDevNameMap[idx].card, allCaptureDevNameMap[idx].dev);
- driver = str;
- }
+ driver = allCaptureDevNameMap[idx].device;
break;
}
}
@@ -1111,19 +1105,13 @@ void alc_alsa_deinit(void)
ALuint i;
for(i = 0;i < numDevNames;++i)
- {
- free(allDevNameMap[i].name);
- free(allDevNameMap[i].card);
- }
+ free(allDevNameMap[i].device);
free(allDevNameMap);
allDevNameMap = NULL;
numDevNames = 0;
for(i = 0;i < numCaptureDevNames;++i)
- {
- free(allCaptureDevNameMap[i].name);
- free(allCaptureDevNameMap[i].card);
- }
+ free(allCaptureDevNameMap[i].device);
free(allCaptureDevNameMap);
allCaptureDevNameMap = NULL;
numCaptureDevNames = 0;
@@ -1147,10 +1135,7 @@ void alc_alsa_probe(enum DevProbe type)
case ALL_DEVICE_PROBE:
for(i = 0;i < numDevNames;++i)
- {
- free(allDevNameMap[i].name);
- free(allDevNameMap[i].card);
- }
+ free(allDevNameMap[i].device);
free(allDevNameMap);
allDevNameMap = probe_devices(SND_PCM_STREAM_PLAYBACK, &numDevNames);
@@ -1161,10 +1146,7 @@ void alc_alsa_probe(enum DevProbe type)
case CAPTURE_DEVICE_PROBE:
for(i = 0;i < numCaptureDevNames;++i)
- {
- free(allCaptureDevNameMap[i].name);
- free(allCaptureDevNameMap[i].card);
- }
+ free(allCaptureDevNameMap[i].device);
free(allCaptureDevNameMap);
allCaptureDevNameMap = probe_devices(SND_PCM_STREAM_CAPTURE, &numCaptureDevNames);