portaudio backend: allow Pa_GetDeviceInfo to fail.
authorRobin Gareus <robin@gareus.org>
Wed, 15 Apr 2015 01:04:19 +0000 (03:04 +0200)
committerRobin Gareus <robin@gareus.org>
Wed, 15 Apr 2015 01:05:09 +0000 (03:05 +0200)
libs/backends/portaudio/portaudio_io.cc

index 1a254f27b79d8e97e8e1b9d30e83bde879d10184..18a676f7a96d6651b40f8a40308c1effe989ffeb 100644 (file)
@@ -78,31 +78,35 @@ PortAudioIO::available_sample_rates(int device_id, std::vector<float>& 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);
        }