summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Mayberry <mojofunk@gmail.com>2015-08-04 13:36:29 +1000
committerTim Mayberry <mojofunk@gmail.com>2015-08-05 13:21:30 +1000
commit61e851da0841190b5f45944a0aa5395cae07a269 (patch)
treed04cdcc841f1a1780cfdd7096f8bdd9bacc6c6c7
parent7295bb645426f471282e415cd8ae3d1c3afe51c4 (diff)
Add code to use ASIO supplied min/max buffer sizes but don't use it
RME HDSP: min == max == preferred size with granularity == 0 Focusrite scarlett 2i2: min = current ASIO setting and max = max buffersize the device supports with a granularity of 1 which means hundreds of entries in the dropdown menu.
-rw-r--r--libs/backends/portaudio/portaudio_io.cc36
1 files changed, 34 insertions, 2 deletions
diff --git a/libs/backends/portaudio/portaudio_io.cc b/libs/backends/portaudio/portaudio_io.cc
index c007e29436..5ba424c26d 100644
--- a/libs/backends/portaudio/portaudio_io.cc
+++ b/libs/backends/portaudio/portaudio_io.cc
@@ -206,7 +206,10 @@ PortAudioIO::get_asio_buffer_properties (int device_id,
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;
+ long min_size_frames = 0;
+ long max_size_frames = 0;
+ long preferred_size_frames = 0;
+ long granularity = 0;
if (!get_asio_buffer_properties (device_id,
min_size_frames,
@@ -218,7 +221,36 @@ PortAudioIO::get_asio_buffer_sizes (int device_id, std::vector<uint32_t>& buffer
return false;
}
- buffer_sizes.push_back(preferred_size_frames);
+ DEBUG_AUDIO (string_compose ("ASIO buffer properties for device %1, "
+ "min_size_frames: %2, max_size_frames: %3, "
+ "preferred_size_frames: %4, granularity: %5\n",
+ device_id,
+ min_size_frames,
+ max_size_frames,
+ preferred_size_frames,
+ granularity));
+
+#ifdef USE_ASIO_MIN_MAX_BUFFER_SIZES
+ if (min_size_frames >= max_size_frames) {
+ buffer_sizes.push_back (preferred_size_frames);
+ return true;
+ }
+
+ long buffer_size = min_size_frames;
+ while (buffer_size <= max_size_frames) {
+ buffer_sizes.push_back (buffer_size);
+
+ if (granularity <= 0) {
+ // buffer sizes are power of 2
+ buffer_size = buffer_size * 2;
+ } else {
+ buffer_size += granularity;
+ }
+ }
+#else
+ buffer_sizes.push_back (preferred_size_frames);
+#endif
+ return true;
}
#endif