summaryrefslogtreecommitdiff
path: root/libs/backends/portaudio/portaudio_io.cc
diff options
context:
space:
mode:
authorTim Mayberry <mojofunk@gmail.com>2015-08-28 08:53:10 +1000
committerTim Mayberry <mojofunk@gmail.com>2015-11-19 10:23:26 +1000
commitf1b336b01e28f499dcd73a1fd65236efe118eb7d (patch)
treec2437a4f8966396a768945e5376d6713b5b05845 /libs/backends/portaudio/portaudio_io.cc
parent6c85f976dee68f79e89fc211092fad6fde4b1bba (diff)
Add support for callback API to portaudio backend but keep blocking API as default
Don't use the callback API for now until further and wider testing.
Diffstat (limited to 'libs/backends/portaudio/portaudio_io.cc')
-rw-r--r--libs/backends/portaudio/portaudio_io.cc43
1 files changed, 43 insertions, 0 deletions
diff --git a/libs/backends/portaudio/portaudio_io.cc b/libs/backends/portaudio/portaudio_io.cc
index 678a59f4f3..f3276cc7ea 100644
--- a/libs/backends/portaudio/portaudio_io.cc
+++ b/libs/backends/portaudio/portaudio_io.cc
@@ -745,6 +745,49 @@ PortAudioIO::pre_stream_open(int device_input,
}
PaErrorCode
+PortAudioIO::open_callback_stream(int device_input,
+ int device_output,
+ double sample_rate,
+ uint32_t samples_per_period,
+ PaStreamCallback* callback,
+ void* data)
+{
+ PaStreamParameters inputParam;
+ PaStreamParameters outputParam;
+
+ PaErrorCode error_code =
+ pre_stream_open(device_input, inputParam, device_output, outputParam);
+
+ if (error_code != paNoError) return error_code;
+
+ PaError err = paNoError;
+
+ DEBUG_AUDIO ("Open Callback Stream\n");
+
+ err = Pa_OpenStream(&_stream,
+ _capture_channels > 0 ? &inputParam : NULL,
+ _playback_channels > 0 ? &outputParam : NULL,
+ sample_rate,
+ samples_per_period,
+ paDitherOff,
+ callback,
+ data);
+
+ if (err != paNoError) {
+ DEBUG_AUDIO ("PortAudio failed to start stream.\n");
+ return paInternalError;
+ }
+
+ if (!set_sample_rate_and_latency_from_stream()) {
+ DEBUG_AUDIO ("PortAudio failed to query stream information.\n");
+ close_stream();
+ return paInternalError;
+ }
+
+ return paNoError;
+}
+
+PaErrorCode
PortAudioIO::open_blocking_stream(int device_input,
int device_output,
double sample_rate,