From 9391da0c24000ac479adc00a04a7ad7e197f2049 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Wed, 15 Apr 2015 03:04:19 +0200 Subject: portaudio backend: allow Pa_GetDeviceInfo to fail. --- libs/backends/portaudio/portaudio_io.cc | 46 ++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/libs/backends/portaudio/portaudio_io.cc b/libs/backends/portaudio/portaudio_io.cc index 1a254f27b7..18a676f7a9 100644 --- a/libs/backends/portaudio/portaudio_io.cc +++ b/libs/backends/portaudio/portaudio_io.cc @@ -78,31 +78,35 @@ PortAudioIO::available_sample_rates(int device_id, std::vector& sampleRat sampleRates.clear(); const PaDeviceInfo* nfo = Pa_GetDeviceInfo(device_id); - PaStreamParameters inputParam; - PaStreamParameters outputParam; - - inputParam.device = device_id; - inputParam.channelCount = nfo->maxInputChannels; - inputParam.sampleFormat = paFloat32; - inputParam.suggestedLatency = 0; - inputParam.hostApiSpecificStreamInfo = 0; - - outputParam.device = device_id; - outputParam.channelCount = nfo->maxOutputChannels; - outputParam.sampleFormat = paFloat32; - outputParam.suggestedLatency = 0; - outputParam.hostApiSpecificStreamInfo = 0; - - for (uint32_t i = 0; i < sizeof(ardourRates)/sizeof(float); ++i) { - if (paFormatIsSupported == Pa_IsFormatSupported( - nfo->maxInputChannels > 0 ? &inputParam : NULL, - nfo->maxOutputChannels > 0 ? &outputParam : NULL, - ardourRates[i])) { - sampleRates.push_back (ardourRates[i]); + if (nfo) { + PaStreamParameters inputParam; + PaStreamParameters outputParam; + + inputParam.device = device_id; + inputParam.channelCount = nfo->maxInputChannels; + inputParam.sampleFormat = paFloat32; + inputParam.suggestedLatency = 0; + inputParam.hostApiSpecificStreamInfo = 0; + + outputParam.device = device_id; + outputParam.channelCount = nfo->maxOutputChannels; + outputParam.sampleFormat = paFloat32; + outputParam.suggestedLatency = 0; + outputParam.hostApiSpecificStreamInfo = 0; + + for (uint32_t i = 0; i < sizeof(ardourRates)/sizeof(float); ++i) { + if (paFormatIsSupported == Pa_IsFormatSupported( + nfo->maxInputChannels > 0 ? &inputParam : NULL, + nfo->maxOutputChannels > 0 ? &outputParam : NULL, + ardourRates[i])) { + sampleRates.push_back (ardourRates[i]); + } } } if (sampleRates.empty()) { + // fill in something.. + sampleRates.push_back (44100.0); sampleRates.push_back (48000.0); } -- cgit v1.2.3