diff options
author | Robin Gareus <robin@gareus.org> | 2015-06-14 22:16:31 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2015-06-14 22:26:06 +0200 |
commit | acd95215a485ad17693e8eeb3a5797f1a6dfbecd (patch) | |
tree | 50dba634fe38f168d612f5b8c93fe815eb1f556e /libs/ardouralsautil/devicelist.cc | |
parent | 94c146c7801dcab403eee721805a5825f40c61bd (diff) |
allow to scan for half-duplex ALSA devices
Diffstat (limited to 'libs/ardouralsautil/devicelist.cc')
-rw-r--r-- | libs/ardouralsautil/devicelist.cc | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/libs/ardouralsautil/devicelist.cc b/libs/ardouralsautil/devicelist.cc index b20df100db..3fdb1401af 100644 --- a/libs/ardouralsautil/devicelist.cc +++ b/libs/ardouralsautil/devicelist.cc @@ -24,7 +24,7 @@ using namespace std; void -ARDOUR::get_alsa_audio_device_names (std::map<std::string, std::string>& devices) +ARDOUR::get_alsa_audio_device_names (std::map<std::string, std::string>& devices, AlsaDuplex duplex) { snd_ctl_t *handle; snd_ctl_card_info_t *info; @@ -35,6 +35,8 @@ ARDOUR::get_alsa_audio_device_names (std::map<std::string, std::string>& devices int cardnum = -1; int device = -1; + assert (duplex > 0); + while (snd_card_next (&cardnum) >= 0 && cardnum >= 0) { devname = "hw:"; @@ -63,7 +65,7 @@ ARDOUR::get_alsa_audio_device_names (std::map<std::string, std::string>& devices snd_pcm_info_set_subdevice (pcminfo, 0); snd_pcm_info_set_stream (pcminfo, SND_PCM_STREAM_CAPTURE); - if (snd_ctl_pcm_info (handle, pcminfo) < 0) { + if (snd_ctl_pcm_info (handle, pcminfo) < 0 && (duplex & HalfDuplexIn)) { continue; } @@ -71,7 +73,7 @@ ARDOUR::get_alsa_audio_device_names (std::map<std::string, std::string>& devices snd_pcm_info_set_subdevice (pcminfo, 0); snd_pcm_info_set_stream (pcminfo, SND_PCM_STREAM_PLAYBACK); - if (snd_ctl_pcm_info (handle, pcminfo) < 0) { + if (snd_ctl_pcm_info (handle, pcminfo) < 0 && (duplex & HalfDuplexOut)) { continue; } devname += ','; |