diff options
author | Ben Loftis <ben@harrisonconsoles.com> | 2015-01-16 17:14:06 -0600 |
---|---|---|
committer | Ben Loftis <ben@harrisonconsoles.com> | 2015-01-16 17:15:26 -0600 |
commit | 05a612b5632f1c98e0a151c42e1c9316edc615b2 (patch) | |
tree | 9c4c2da1e6d47be7b43af016beb904417a85895c /libs/backends | |
parent | 9b3f3a9fea462f34268a2b395064cc220212fd9c (diff) |
ASIO devices have a preferred buffersize.
pass this value up so it can be used by the engine dialog.
if for some reason the engine dialog still doesn't have a buffersize selected, print an error and try 512 instead of crashing.
Diffstat (limited to 'libs/backends')
4 files changed, 19 insertions, 0 deletions
diff --git a/libs/backends/wavesaudio/waves_audiobackend.cc b/libs/backends/wavesaudio/waves_audiobackend.cc index 65834db495..51ae026c69 100644 --- a/libs/backends/wavesaudio/waves_audiobackend.cc +++ b/libs/backends/wavesaudio/waves_audiobackend.cc @@ -221,6 +221,19 @@ float WavesAudioBackend::default_sample_rate () const return AudioBackend::default_sample_rate (); } +uint32_t +WavesAudioBackend::default_buffer_size (const std::string& device_name) const +{ + DeviceInfo devInfo; + WTErr err = _audio_device_manager.GetDeviceInfoByName(device_name, devInfo); + + if (err != eNoErr) { + std::cerr << "WavesAudioBackend::default_buffer_size (): Failed to get buffer size for device [" << device_name << "]" << std::endl; + return AudioBackend::default_buffer_size (device_name); + } + + return devInfo.m_DefaultBufferSize; +} std::vector<uint32_t> WavesAudioBackend::available_buffer_sizes (const std::string& device_name) const diff --git a/libs/backends/wavesaudio/waves_audiobackend.h b/libs/backends/wavesaudio/waves_audiobackend.h index 3872b23336..20773441a7 100644 --- a/libs/backends/wavesaudio/waves_audiobackend.h +++ b/libs/backends/wavesaudio/waves_audiobackend.h @@ -93,6 +93,8 @@ class WavesMidiPort; virtual std::vector<uint32_t> available_buffer_sizes (const std::string& device) const; + virtual uint32_t default_buffer_size (const std::string& device) const; + virtual uint32_t available_input_channel_count (const std::string& device) const; virtual uint32_t available_output_channel_count (const std::string& device) const; diff --git a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.h b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.h index da5be82b4f..3ec108b380 100644 --- a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.h +++ b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.h @@ -59,6 +59,7 @@ struct DeviceInfo std::vector<int> m_AvailableSampleRates; unsigned int m_MaxInputChannels; unsigned int m_MaxOutputChannels; + unsigned int m_DefaultBufferSize; DeviceInfo(): m_DeviceId(-1), m_DeviceName("Unknown"), m_MaxInputChannels(0), m_MaxOutputChannels(0) @@ -198,6 +199,7 @@ protected: std::vector<std::string> m_OutputChannels; ///< List of output channel names. std::vector<int> m_SamplingRates; ///< List of available sampling rates. std::vector<int> m_BufferSizes; ///< List of available buffer sizes. + int m_DefaultBufferSize; ///soundcard preferred buffer size int m_CurrentSamplingRate; ///< Currently selected sampling rate. int m_CurrentBufferSize; ///< Currently selected buffer size. diff --git a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp index 69b677b025..aaf64d6d02 100644 --- a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp +++ b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp @@ -118,6 +118,7 @@ WCMRPortAudioDevice::WCMRPortAudioDevice (WCMRPortAudioDeviceManager *pManager, m_PortAudioStream = NULL; m_CurrentSamplingRate = DEFAULT_SR; m_CurrentBufferSize = DEFAULT_BUFFERSIZE; + m_DefaultBufferSize = DEFAULT_BUFFERSIZE; m_StopRequested = true; m_pInputData = NULL; @@ -361,6 +362,7 @@ void WCMRPortAudioDevice::updateDeviceInfo (bool callerIsWaiting/*=false*/) { std::cout << "API::Device " << m_DeviceName << " Buffers: " << minSize << " " << maxSize << " " << preferredSize << std::endl; + m_DefaultBufferSize = preferredSize; m_BufferSizes.push_back (preferredSize); useDefaultBuffers = false; } |