Refactor methods in PortaudioBackend to get ASIO buffer sizes
authorTim Mayberry <mojofunk@gmail.com>
Tue, 4 Aug 2015 02:25:46 +0000 (12:25 +1000)
committerTim Mayberry <mojofunk@gmail.com>
Wed, 5 Aug 2015 03:21:26 +0000 (13:21 +1000)
libs/backends/portaudio/portaudio_io.cc
libs/backends/portaudio/portaudio_io.h

index 665df9782364968d0330fee15d7e4b8dfbe28222..c007e29436037a02632236e8726e2b38355d5f9a 100644 (file)
@@ -160,7 +160,11 @@ PortAudioIO::available_sample_rates(int device_id, std::vector<float>& sampleRat
 
 #ifdef WITH_ASIO
 bool
-PortAudioIO::get_asio_buffer_sizes (int device_id, std::vector<uint32_t>& buffer_sizes)
+PortAudioIO::get_asio_buffer_properties (int device_id,
+                                         long& min_size_frames,
+                                         long& max_size_frames,
+                                         long& preferred_size_frames,
+                                         long& granularity)
 {
        // we shouldn't really need all these checks but it shouldn't hurt
        const PaDeviceInfo* device_info = Pa_GetDeviceInfo(device_id);
@@ -185,20 +189,37 @@ PortAudioIO::get_asio_buffer_sizes (int device_id, std::vector<uint32_t>& buffer
                return false;
        }
 
-       long min_size, max_size, preferred_size, granularity;
-
-       PaError err = PaAsio_GetAvailableBufferSizes (
-           device_id, &min_size, &max_size, &preferred_size, &granularity);
+       PaError err = PaAsio_GetAvailableBufferSizes (device_id,
+                                                     &min_size_frames,
+                                                     &max_size_frames,
+                                                     &preferred_size_frames,
+                                                     &granularity);
 
        if (err != paNoError) {
                DEBUG_AUDIO (string_compose (
                    "Unable to determine available buffer sizes for device %1\n", device_id));
                return false;
        }
-
-       buffer_sizes.push_back(preferred_size);
        return true;
 }
+
+bool
+PortAudioIO::get_asio_buffer_sizes (int device_id, std::vector<uint32_t>& buffer_sizes)
+{
+       long min_size_frames, max_size_frames, preferred_size_frames, granularity;
+
+       if (!get_asio_buffer_properties (device_id,
+                                        min_size_frames,
+                                        max_size_frames,
+                                        preferred_size_frames,
+                                        granularity)) {
+               DEBUG_AUDIO (string_compose (
+                   "Unable to get device buffer properties from device index %1\n", device_id));
+               return false;
+       }
+
+       buffer_sizes.push_back(preferred_size_frames);
+}
 #endif
 
 bool
index 1a122e7074b1a0e71f1716e822cd8a63c41a304e..3d52ae6509fda2a3d9a48f38a6558945f385d47e 100644 (file)
@@ -56,6 +56,12 @@ public:
 
        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,
+                                        long& max_size_frames,
+                                        long& preferred_size_frames,
+                                        long& granularity);
+
        bool get_asio_buffer_sizes (int device_id, std::vector<uint32_t>& buffer_size);
 #endif