diff options
author | Tim Mayberry <mojofunk@gmail.com> | 2015-08-22 21:04:53 +1000 |
---|---|---|
committer | Tim Mayberry <mojofunk@gmail.com> | 2015-09-02 12:07:14 +1000 |
commit | 08d6dd153e78f63ee0e3e7ed8c3de32d0f995be6 (patch) | |
tree | 282af228b250246583cf4282b30f7206011e392e /libs/backends/portaudio | |
parent | 440e6cd591f07ba7b50164e58be2b199e835a422 (diff) |
Add "None" devices to PortaudioBackend
This allows for disabling either input or output, but not both
Diffstat (limited to 'libs/backends/portaudio')
-rw-r--r-- | libs/backends/portaudio/portaudio_io.cc | 33 | ||||
-rw-r--r-- | libs/backends/portaudio/portaudio_io.h | 1 |
2 files changed, 29 insertions, 5 deletions
diff --git a/libs/backends/portaudio/portaudio_io.cc b/libs/backends/portaudio/portaudio_io.cc index 85cd889fdc..8bf3c3e43b 100644 --- a/libs/backends/portaudio/portaudio_io.cc +++ b/libs/backends/portaudio/portaudio_io.cc @@ -22,6 +22,7 @@ #include <string.h> #include <assert.h> #include <glibmm.h> + #include "portaudio_io.h" #ifdef WITH_ASIO @@ -425,6 +426,15 @@ PortAudioIO::clear_device_lists () } void +PortAudioIO::add_none_devices () +{ + _input_devices.insert(std::pair<int, paDevice*>( + DeviceNone, new paDevice(AudioBackend::get_standard_device_name(AudioBackend::DeviceNone), 0, 0))); + _output_devices.insert(std::pair<int, paDevice*>( + DeviceNone, new paDevice(AudioBackend::get_standard_device_name(AudioBackend::DeviceNone), 0, 0))); +} + +void PortAudioIO::add_default_devices () { const PaHostApiInfo* info = Pa_GetHostApiInfo (_host_api_index); @@ -503,6 +513,7 @@ PortAudioIO::discover() if (!initialize_pa()) return; clear_device_lists (); + add_none_devices (); add_devices (); } @@ -558,9 +569,9 @@ PortAudioIO::pcm_setup ( _state = -2; PaError err = paNoError; - const PaDeviceInfo *nfo_in; - const PaDeviceInfo *nfo_out; - const PaStreamInfo *nfo_s; + const PaDeviceInfo *nfo_in = NULL; + const PaDeviceInfo *nfo_out = NULL; + const PaStreamInfo *nfo_s = NULL; if (!initialize_pa()) { DEBUG_AUDIO ("PortAudio Initialization Failed\n"); @@ -583,8 +594,20 @@ PortAudioIO::pcm_setup ( DEBUG_AUDIO (string_compose ( "PortAudio Device IDs: i:%1 o:%2\n", device_input, device_output)); - nfo_in = Pa_GetDeviceInfo(device_input); - nfo_out = Pa_GetDeviceInfo(device_output); + if (device_input == DeviceNone && device_output == DeviceNone) { + // just send the error msg for now rather than return it + error << AudioBackend::get_error_string(AudioBackend::DeviceConfigurationNotSupportedError) + << endmsg; + return -1; + } + + if (device_input != DeviceNone) { + nfo_in = Pa_GetDeviceInfo(device_input); + } + + if (device_output != DeviceNone) { + nfo_out = Pa_GetDeviceInfo(device_output); + } if (!nfo_in && ! nfo_out) { DEBUG_AUDIO ("PortAudio Cannot Query Device Info\n"); diff --git a/libs/backends/portaudio/portaudio_io.h b/libs/backends/portaudio/portaudio_io.h index 9483510461..fb1524ab83 100644 --- a/libs/backends/portaudio/portaudio_io.h +++ b/libs/backends/portaudio/portaudio_io.h @@ -101,6 +101,7 @@ public: private: // Methods void clear_device_lists (); + void add_none_devices (); void add_default_devices (); void add_devices (); std::string get_host_api_name_from_index (PaHostApiIndex index); |