summaryrefslogtreecommitdiff
path: root/libs/backends/portaudio
diff options
context:
space:
mode:
authorTim Mayberry <mojofunk@gmail.com>2015-08-22 21:04:53 +1000
committerTim Mayberry <mojofunk@gmail.com>2015-09-02 12:07:14 +1000
commit08d6dd153e78f63ee0e3e7ed8c3de32d0f995be6 (patch)
tree282af228b250246583cf4282b30f7206011e392e /libs/backends/portaudio
parent440e6cd591f07ba7b50164e58be2b199e835a422 (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.cc33
-rw-r--r--libs/backends/portaudio/portaudio_io.h1
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);