Add config options for card- and device-specific prefixes in ALSA device names

This commit is contained in:
Chris Robinson 2012-02-11 09:36:40 -08:00
parent 3fb6351212
commit b375b130ba
2 changed files with 31 additions and 7 deletions

View File

@ -281,9 +281,12 @@ static ALuint numDevNames;
static DevMap *allCaptureDevNameMap;
static ALuint numCaptureDevNames;
static const char *device_prefix;
static const char *capture_prefix;
static const char *prefix_name(snd_pcm_stream_t stream)
{
assert(stream == SND_PCM_STREAM_PLAYBACK || stream == SND_PCM_STREAM_CAPTURE);
return (stream==SND_PCM_STREAM_PLAYBACK) ? "device-prefix" : "capture-prefix";
}
static DevMap *probe_devices(snd_pcm_stream_t stream, ALuint *count)
{
@ -292,7 +295,6 @@ 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[256];
snd_ctl_card_info_malloc(&info);
snd_pcm_info_malloc(&pcminfo);
@ -307,6 +309,8 @@ static DevMap *probe_devices(snd_pcm_stream_t stream, ALuint *count)
idx = 1;
while(card >= 0)
{
char name[256];
sprintf(name, "hw:%d", card);
if((err = snd_ctl_open(&handle, name, 0)) < 0)
{
@ -343,6 +347,7 @@ static DevMap *probe_devices(snd_pcm_stream_t stream, ALuint *count)
temp = realloc(DevList, sizeof(DevMap) * (idx+1));
if(temp)
{
const char *prefix = "plughw:";
char devname[128];
DevList = temp;
@ -350,11 +355,18 @@ static DevMap *probe_devices(snd_pcm_stream_t stream, ALuint *count)
dname = snd_pcm_info_get_name(pcminfo);
cid = snd_ctl_card_info_get_id(info);
snprintf(devname, sizeof(devname), "%s-%s-%d", prefix_name(stream), cid, dev);
if(!ConfigValueStr("alsa", devname, &prefix))
{
snprintf(devname, sizeof(devname), "%s-%s", prefix_name(stream), cid);
if(!ConfigValueStr("alsa", devname, &prefix))
ConfigValueStr("alsa", prefix_name(stream), &prefix);
}
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);
prefix, cid, dev);
DevList[idx].name = strdup(name);
DevList[idx].device = strdup(devname);
@ -1094,8 +1106,6 @@ ALCboolean alc_alsa_init(BackendFuncs *func_list)
{
if(!alsa_load())
return ALC_FALSE;
device_prefix = GetConfigValue("alsa", "device-prefix", "plughw:");
capture_prefix = GetConfigValue("alsa", "capture-prefix", "plughw:");
*func_list = alsa_funcs;
return ALC_TRUE;
}

View File

@ -210,6 +210,13 @@
# device index for the requested device name.
#device-prefix = plughw:
## device-prefix-*:
# Card- and device-specific prefixes may be used to override the device-prefix
# option. The option may specify the card id (eg, device-prefix-NVidia), or
# the card id and device index (eg, device-prefix-NVidia-0). The card id is
# case-sensitive.
#defice-prefix- =
## capture:
# Sets the device name for the default capture device.
#capture = default
@ -220,6 +227,13 @@
# device number for the requested device name.
#capture-prefix = plughw:
## capture-prefix-*:
# Card- and device-specific prefixes may be used to override the
# capture-prefix option. The option may specify the card id (eg,
# capture-prefix-NVidia), or the card id and device index (eg,
# capture-prefix-NVidia-0). The card id is case-sensitive.
#capture-prefix- =
## mmap:
# Sets whether to try using mmap mode (helps reduce latencies and CPU
# consumption). If mmap isn't available, it will automatically fall back to