Use two private utility functions in PortaudioIO class for default SR's and buffer...
authorTim Mayberry <mojofunk@gmail.com>
Sun, 23 Aug 2015 03:12:26 +0000 (13:12 +1000)
committerTim Mayberry <mojofunk@gmail.com>
Wed, 2 Sep 2015 02:07:14 +0000 (12:07 +1000)
libs/backends/portaudio/portaudio_io.cc
libs/backends/portaudio/portaudio_io.h

index 2d64e6392206a1ab6a9f1a4a99166dc32022bae6..28127a1298b5957e4d02a843c81ef0b6f2b31ac7 100644 (file)
@@ -98,11 +98,23 @@ PortAudioIO::launch_control_app (int device_id)
 #endif
 }
 
+void
+PortAudioIO::get_default_sample_rates (std::vector<float>& rates)
+{
+       rates.push_back(8000.0);
+       rates.push_back(22050.0);
+       rates.push_back(24000.0);
+       rates.push_back(44100.0);
+       rates.push_back(48000.0);
+       rates.push_back(88200.0);
+       rates.push_back(96000.0);
+       rates.push_back(176400.0);
+       rates.push_back(192000.0);
+}
+
 int
 PortAudioIO::available_sample_rates(int device_id, std::vector<float>& sampleRates)
 {
-       static const float ardourRates[] = { 8000.0, 22050.0, 24000.0, 44100.0, 48000.0, 88200.0, 96000.0, 176400.0, 192000.0};
-
        if (!initialize_pa()) return -1;
 
        // TODO use  separate int device_input, int device_output ?!
@@ -132,20 +144,23 @@ PortAudioIO::available_sample_rates(int device_id, std::vector<float>& sampleRat
                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]);
+               std::vector<float> rates;
+               get_default_sample_rates(rates);
+
+               for (std::vector<float>::const_iterator i = rates.begin(); i != rates.end();
+                    ++i) {
+                       if (paFormatIsSupported ==
+                           Pa_IsFormatSupported(nfo->maxInputChannels > 0 ? &inputParam : NULL,
+                                                nfo->maxOutputChannels > 0 ? &outputParam : NULL,
+                                                *i)) {
+                               sampleRates.push_back(*i);
                        }
                }
        }
 
        if (sampleRates.empty()) {
                // fill in something..
-               sampleRates.push_back (44100.0);
-               sampleRates.push_back (48000.0);
+               get_default_sample_rates(sampleRates);
        }
 
        return 0;
@@ -239,14 +254,16 @@ PortAudioIO::get_asio_buffer_sizes (int device_id, std::vector<uint32_t>& buffer
 }
 #endif
 
-bool
-PortAudioIO::get_default_buffer_sizes (int device_id, std::vector<uint32_t>& buffer_sizes)
+void
+PortAudioIO::get_default_buffer_sizes(std::vector<uint32_t>& buffer_sizes)
 {
-       static const uint32_t ardourSizes[] = { 64, 128, 256, 512, 1024, 2048, 4096 };
-       for(uint32_t i = 0; i < sizeof(ardourSizes)/sizeof(uint32_t); ++i) {
-               buffer_sizes.push_back (ardourSizes[i]);
-       }
-       return true;
+       buffer_sizes.push_back(64);
+       buffer_sizes.push_back(128);
+       buffer_sizes.push_back(256);
+       buffer_sizes.push_back(512);
+       buffer_sizes.push_back(1024);
+       buffer_sizes.push_back(2048);
+       buffer_sizes.push_back(4096);
 }
 
 int
@@ -260,7 +277,7 @@ PortAudioIO::available_buffer_sizes(int device_id, std::vector<uint32_t>& buffer
        }
 #endif
 
-       get_default_buffer_sizes (device_id, buffer_sizes);
+       get_default_buffer_sizes (buffer_sizes);
 
        return 0;
 }
index 19604d9ae4014e10634d10e1b56ccb2a488e9ba8..21102012f6feede4e874013704056b1e2530f148 100644 (file)
@@ -60,7 +60,6 @@ public:
        int available_sample_rates (int device_id, std::vector<float>& sample_rates);
        int available_buffer_sizes (int device_id, std::vector<uint32_t>& buffer_sizes);
 
-       bool get_default_buffer_sizes (int device_id, std::vector<uint32_t>& buffer_sizes);
 #ifdef WITH_ASIO
        bool get_asio_buffer_properties (int device_id,
                                         long& min_size_frames,
@@ -107,6 +106,9 @@ private: // Methods
        void add_devices ();
        std::string get_host_api_name_from_index (PaHostApiIndex index);
 
+       static void get_default_sample_rates(std::vector<float>&);
+       static void get_default_buffer_sizes(std::vector<uint32_t>&);
+
 private: // Data
        int  _state;
        bool _initialized;