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 | |
parent | 94c146c7801dcab403eee721805a5825f40c61bd (diff) |
allow to scan for half-duplex ALSA devices
-rw-r--r-- | libs/ardouralsautil/ardouralsautil/devicelist.h | 7 | ||||
-rw-r--r-- | libs/ardouralsautil/devicelist.cc | 8 |
2 files changed, 11 insertions, 4 deletions
diff --git a/libs/ardouralsautil/ardouralsautil/devicelist.h b/libs/ardouralsautil/ardouralsautil/devicelist.h index 2f8c2c4e90..b68a44c3ae 100644 --- a/libs/ardouralsautil/ardouralsautil/devicelist.h +++ b/libs/ardouralsautil/ardouralsautil/devicelist.h @@ -23,8 +23,13 @@ #include <string> #include <map> namespace ARDOUR { + enum AlsaDuplex { + HalfDuplexIn = 1, + HalfDuplexOut = 2, + FullDuplex = 3, + }; - void get_alsa_audio_device_names (std::map<std::string, std::string>& devices); + void get_alsa_audio_device_names (std::map<std::string, std::string>& devices, AlsaDuplex duplex = FullDuplex); void get_alsa_rawmidi_device_names (std::map<std::string, std::string>& devices); void get_alsa_sequencer_names (std::map<std::string, std::string>& devices); int card_to_num(const char* device_name); 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 += ','; |