diff options
author | Tim Mayberry <mojofunk@gmail.com> | 2015-08-23 18:38:01 +1000 |
---|---|---|
committer | Tim Mayberry <mojofunk@gmail.com> | 2015-09-02 12:07:14 +1000 |
commit | c857008b93262b1fb017f9d94e16429eae72c80a (patch) | |
tree | 37e6ebe82f3e0a6594e64b4b153ec51ef862b3e1 /libs | |
parent | 41211c984cc96a663f6e788b3ffaa0eceaca8d9b (diff) |
Refactor part of PortAudioIO::pcm_setup into 2 new methods
Diffstat (limited to 'libs')
-rw-r--r-- | libs/backends/portaudio/portaudio_io.cc | 128 | ||||
-rw-r--r-- | libs/backends/portaudio/portaudio_io.h | 7 |
2 files changed, 82 insertions, 53 deletions
diff --git a/libs/backends/portaudio/portaudio_io.cc b/libs/backends/portaudio/portaudio_io.cc index d335c922df..51b03cd691 100644 --- a/libs/backends/portaudio/portaudio_io.cc +++ b/libs/backends/portaudio/portaudio_io.cc @@ -607,6 +607,74 @@ PortAudioIO::allocate_buffers_for_blocking_api (uint32_t samples_per_period) return true; } +bool +PortAudioIO::get_input_stream_params(int device_input, + PaStreamParameters& inputParam) const +{ + const PaDeviceInfo *nfo_in = NULL; + + if (device_input == DeviceDefault) { + device_input = get_default_input_device (); + } + + if (device_input == DeviceNone) { + return false; + } + + nfo_in = Pa_GetDeviceInfo(device_input); + + if (nfo_in == NULL) { + DEBUG_AUDIO ("PortAudio Cannot Query Input Device Info\n"); + return false; + } + + inputParam.device = device_input; + inputParam.channelCount = nfo_in->maxInputChannels; +#ifdef INTERLEAVED_INPUT + inputParam.sampleFormat = paFloat32; +#else + inputParam.sampleFormat = paFloat32 | paNonInterleaved; +#endif + inputParam.suggestedLatency = nfo_in->defaultLowInputLatency; + inputParam.hostApiSpecificStreamInfo = NULL; + + return true; +} + +bool +PortAudioIO::get_output_stream_params(int device_output, + PaStreamParameters& outputParam) const +{ + const PaDeviceInfo *nfo_out = NULL; + + if (device_output == DeviceDefault) { + device_output = get_default_output_device (); + } + + if (device_output == DeviceNone) { + return false; + } + + nfo_out = Pa_GetDeviceInfo(device_output); + + if (nfo_out == NULL) { + DEBUG_AUDIO ("PortAudio Cannot Query Output Device Info\n"); + return false; + } + + outputParam.device = device_output; + outputParam.channelCount = nfo_out->maxOutputChannels; +#ifdef INTERLEAVED_OUTPUT + outputParam.sampleFormat = paFloat32; +#else + outputParam.sampleFormat = paFloat32 | paNonInterleaved; +#endif + outputParam.suggestedLatency = nfo_out->defaultLowOutputLatency; + outputParam.hostApiSpecificStreamInfo = NULL; + + return true; +} + int PortAudioIO::pcm_setup ( int device_input, int device_output, @@ -615,21 +683,12 @@ PortAudioIO::pcm_setup ( _state = -2; PaError err = paNoError; - const PaDeviceInfo *nfo_in = NULL; - const PaDeviceInfo *nfo_out = NULL; if (!initialize_pa()) { DEBUG_AUDIO ("PortAudio Initialization Failed\n"); return -1; } - if (device_input == DeviceDefault) { - device_input = get_default_input_device (); - } - if (device_output == DeviceDefault) { - device_output = get_default_output_device (); - } - _capture_channels = 0; _playback_channels = 0; _cur_sample_rate = 0; @@ -646,28 +705,19 @@ PortAudioIO::pcm_setup ( return -1; } - if (device_input != DeviceNone) { - nfo_in = Pa_GetDeviceInfo(device_input); - } - - if (device_output != DeviceNone) { - nfo_out = Pa_GetDeviceInfo(device_output); - } + PaStreamParameters inputParam; + PaStreamParameters outputParam; - if (!nfo_in && !nfo_out) { - DEBUG_AUDIO ("PortAudio Cannot Query Device Info\n"); - return -1; + if (get_input_stream_params(device_input, inputParam)) { + _capture_channels = inputParam.channelCount; } - if (nfo_in) { - _capture_channels = nfo_in->maxInputChannels; - } - if (nfo_out) { - _playback_channels = nfo_out->maxOutputChannels; + if (get_output_stream_params(device_output, outputParam)) { + _playback_channels = outputParam.channelCount; } - if(_capture_channels == 0 && _playback_channels == 0) { - DEBUG_AUDIO ("PortAudio no input or output channels.\n"); + if (_capture_channels == 0 && _playback_channels == 0) { + DEBUG_AUDIO("PortAudio no input or output channels.\n"); return -1; } @@ -675,32 +725,6 @@ PortAudioIO::pcm_setup ( _capture_channels, _playback_channels)); - PaStreamParameters inputParam; - PaStreamParameters outputParam; - - if (nfo_in) { - inputParam.device = device_input; - inputParam.channelCount = _capture_channels; -#ifdef INTERLEAVED_INPUT - inputParam.sampleFormat = paFloat32; -#else - inputParam.sampleFormat = paFloat32 | paNonInterleaved; -#endif - inputParam.suggestedLatency = nfo_in->defaultLowInputLatency; - inputParam.hostApiSpecificStreamInfo = NULL; - } - - if (nfo_out) { - outputParam.device = device_output; - outputParam.channelCount = _playback_channels; -#ifdef INTERLEAVED_OUTPUT - outputParam.sampleFormat = paFloat32; -#else - outputParam.sampleFormat = paFloat32 | paNonInterleaved; -#endif - outputParam.suggestedLatency = nfo_out->defaultLowOutputLatency; - outputParam.hostApiSpecificStreamInfo = NULL; - } // XXX re-consider using callback API, testing needed. err = Pa_OpenStream ( diff --git a/libs/backends/portaudio/portaudio_io.h b/libs/backends/portaudio/portaudio_io.h index 3b656fd06b..7e903d4472 100644 --- a/libs/backends/portaudio/portaudio_io.h +++ b/libs/backends/portaudio/portaudio_io.h @@ -106,7 +106,12 @@ private: // Methods void add_devices (); std::string get_host_api_name_from_index (PaHostApiIndex index); - bool set_sample_rate_and_latency_from_stream (); + bool get_output_stream_params(int device_output, + PaStreamParameters& outputParam) const; + bool get_input_stream_params(int device_input, + PaStreamParameters& inputParam) const; + + bool set_sample_rate_and_latency_from_stream(); bool allocate_buffers_for_blocking_api (uint32_t samples_per_period); static void get_default_sample_rates(std::vector<float>&); |