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 #include #include + #include "portaudio_io.h" #ifdef WITH_ASIO @@ -424,6 +425,15 @@ PortAudioIO::clear_device_lists () _output_devices.clear(); } +void +PortAudioIO::add_none_devices () +{ + _input_devices.insert(std::pair( + DeviceNone, new paDevice(AudioBackend::get_standard_device_name(AudioBackend::DeviceNone), 0, 0))); + _output_devices.insert(std::pair( + DeviceNone, new paDevice(AudioBackend::get_standard_device_name(AudioBackend::DeviceNone), 0, 0))); +} + void PortAudioIO::add_default_devices () { @@ -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);