mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-12 09:36:33 +01:00
update wavesaudio backend, now supports Windows (ASIO) as well as OS X (CoreAudio)
This commit is contained in:
parent
152935e736
commit
f374ce69a6
82 changed files with 11259 additions and 7632 deletions
|
|
@ -1,23 +1,6 @@
|
|||
/*
|
||||
Copyright (C) 2013 Waves Audio Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
*/
|
||||
//----------------------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (c) 2008 Waves Audio Ltd. All rights reserved.
|
||||
//
|
||||
//! \file WCMRAudioDeviceManager.cpp
|
||||
//!
|
||||
|
|
@ -27,10 +10,6 @@
|
|||
#include "WCMRAudioDeviceManager.h"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//**********************************************************************************************
|
||||
// WCMRAudioDevice::WCMRAudioDevice
|
||||
//
|
||||
|
|
@ -39,27 +18,21 @@
|
|||
//! and streaming will also be provided by the derived implementations.
|
||||
//!
|
||||
//! \param *pManager : The audio device manager that's managing this device.
|
||||
//!
|
||||
//! \return Nothing.
|
||||
//!
|
||||
//**********************************************************************************************
|
||||
WCMRAudioDevice::WCMRAudioDevice (WCMRAudioDeviceManager *pManager)
|
||||
WCMRAudioDevice::WCMRAudioDevice (WCMRAudioDeviceManager *pManager) :
|
||||
m_pMyManager (pManager)
|
||||
, m_ConnectionStatus (DeviceDisconnected)
|
||||
, m_IsActive (false)
|
||||
, m_IsStreaming (false)
|
||||
, m_CurrentSamplingRate (-1)
|
||||
, m_CurrentBufferSize (0)
|
||||
, m_LeftMonitorChannel (-1)
|
||||
, m_RightMonitorChannel (-1)
|
||||
, m_MonitorGain (1.0f)
|
||||
{
|
||||
m_pMyManager = pManager;
|
||||
m_DeviceName = "Unknown";
|
||||
|
||||
m_ConnectionStatus = DeviceDisconnected;
|
||||
m_IsActive = false;
|
||||
m_IsStreaming = false;
|
||||
|
||||
m_CurrentSamplingRate = -1;
|
||||
m_CurrentBufferSize = 0;
|
||||
|
||||
m_LeftMonitorChannel = -1;
|
||||
m_RightMonitorChannel = -1;
|
||||
m_MonitorGain = 1.0f;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -565,6 +538,7 @@ uint32_t WCMRAudioDevice::GetLatency (bool isInput)
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//**********************************************************************************************
|
||||
// WCMRAudioDeviceManager::WCMRAudioDeviceManager
|
||||
//
|
||||
|
|
@ -576,15 +550,13 @@ uint32_t WCMRAudioDevice::GetLatency (bool isInput)
|
|||
//!
|
||||
//**********************************************************************************************
|
||||
WCMRAudioDeviceManager::WCMRAudioDeviceManager(WCMRAudioDeviceManagerClient *pTheClient, eAudioDeviceFilter eCurAudioDeviceFilter)
|
||||
: m_pTheClient (pTheClient)
|
||||
, m_eAudioDeviceFilter(eCurAudioDeviceFilter)
|
||||
: m_eAudioDeviceFilter(eCurAudioDeviceFilter)
|
||||
, m_CurrentDevice(0)
|
||||
, m_pTheClient (pTheClient)
|
||||
{
|
||||
//The derived classes will do lot more init!
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//**********************************************************************************************
|
||||
// WCMRAudioDeviceManager::~WCMRAudioDeviceManager
|
||||
//
|
||||
|
|
@ -599,19 +571,21 @@ WCMRAudioDeviceManager::~WCMRAudioDeviceManager()
|
|||
{
|
||||
AUTO_FUNC_DEBUG;
|
||||
|
||||
std::cout << "API::Destroying AudioDeviceManager " << std::endl;
|
||||
try
|
||||
{
|
||||
//Need to call release on our devices, and erase them from list
|
||||
std::vector<WCMRAudioDevice*>::iterator deviceIter;
|
||||
while (m_Devices.size())
|
||||
{
|
||||
WCMRAudioDevice *pDeviceToRelease = m_Devices.back();
|
||||
m_Devices.pop_back();
|
||||
if (pDeviceToRelease)
|
||||
SAFE_RELEASE (pDeviceToRelease);
|
||||
}
|
||||
|
||||
//The derived classes may want to do additional de-int!
|
||||
// clean up device info list
|
||||
{
|
||||
wvNS::wvThread::ThreadMutex::lock theLock(m_AudioDeviceInfoVecMutex);
|
||||
while( m_DeviceInfoVec.size() )
|
||||
{
|
||||
DeviceInfo* devInfo = m_DeviceInfoVec.back();
|
||||
m_DeviceInfoVec.pop_back();
|
||||
delete devInfo;
|
||||
}
|
||||
}
|
||||
delete m_CurrentDevice;
|
||||
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
|
|
@ -621,109 +595,48 @@ WCMRAudioDeviceManager::~WCMRAudioDeviceManager()
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//**********************************************************************************************
|
||||
// WCMRAudioDeviceManager::DoIdle_Private
|
||||
//
|
||||
//! Used for idle time processing. This calls each device's DoIdle so that it can perform it's own idle processing.
|
||||
//!
|
||||
//! \param none
|
||||
//!
|
||||
//! \return noErr if no devices have returned an error. An error code if any of the devices returned error.
|
||||
//!
|
||||
//**********************************************************************************************
|
||||
WTErr WCMRAudioDeviceManager::DoIdle_Private()
|
||||
WCMRAudioDevice* WCMRAudioDeviceManager::InitNewCurrentDevice(const std::string & deviceName)
|
||||
{
|
||||
WTErr retVal = eNoErr;
|
||||
|
||||
//Need to call DoIdle of all our devices...
|
||||
std::vector<WCMRAudioDevice*>::iterator deviceIter;
|
||||
for (deviceIter = m_Devices.begin(); deviceIter != m_Devices.end(); deviceIter++)
|
||||
return initNewCurrentDeviceImpl(deviceName);
|
||||
}
|
||||
|
||||
|
||||
void WCMRAudioDeviceManager::DestroyCurrentDevice()
|
||||
{
|
||||
return destroyCurrentDeviceImpl();
|
||||
}
|
||||
|
||||
|
||||
const DeviceInfoVec WCMRAudioDeviceManager::DeviceInfoList() const
|
||||
{
|
||||
wvNS::wvThread::ThreadMutex::lock theLock(m_AudioDeviceInfoVecMutex);
|
||||
return m_DeviceInfoVec;
|
||||
}
|
||||
|
||||
|
||||
WTErr WCMRAudioDeviceManager::GetDeviceInfoByName(const std::string & nameToMatch, DeviceInfo & devInfo) const
|
||||
{
|
||||
wvNS::wvThread::ThreadMutex::lock theLock(m_AudioDeviceInfoVecMutex);
|
||||
DeviceInfoVecConstIter iter = m_DeviceInfoVec.begin();
|
||||
for (; iter != m_DeviceInfoVec.end(); ++iter)
|
||||
{
|
||||
WTErr thisDeviceErr = (*deviceIter)->DoIdle();
|
||||
|
||||
if (thisDeviceErr != eNoErr)
|
||||
retVal = thisDeviceErr;
|
||||
if (nameToMatch == (*iter)->m_DeviceName)
|
||||
{
|
||||
devInfo = *(*iter);
|
||||
return eNoErr;
|
||||
}
|
||||
}
|
||||
|
||||
return (retVal);
|
||||
|
||||
return eRMResNotFound;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//**********************************************************************************************
|
||||
// WCMRAudioDeviceManager::Devices_Private
|
||||
//
|
||||
//! Retrieve list of devices managed by this manager.
|
||||
//!
|
||||
//! \param none
|
||||
//!
|
||||
//! \return A vector containing the list of devices.
|
||||
//!
|
||||
//**********************************************************************************************
|
||||
const WCMRAudioDeviceList& WCMRAudioDeviceManager::Devices_Private() const
|
||||
WTErr WCMRAudioDeviceManager::GetDeviceBufferSizes(const std::string & nameToMatch, std::vector<int>& bufferSizes) const
|
||||
{
|
||||
return (m_Devices);
|
||||
return getDeviceBufferSizesImpl(nameToMatch, bufferSizes);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//**********************************************************************************************
|
||||
// *WCMRAudioDeviceManager::GetDeviceByName_Private
|
||||
//
|
||||
//! Locates a device based on device name.
|
||||
//!
|
||||
//! \param nameToMatch : Device to look for.
|
||||
//!
|
||||
//! \return Pointer to the device object if found, NULL otherwise.
|
||||
//!
|
||||
//**********************************************************************************************
|
||||
WCMRAudioDevice *WCMRAudioDeviceManager::GetDeviceByName_Private(const std::string& nameToMatch) const
|
||||
{
|
||||
//Need to check all our devices...
|
||||
WCMRAudioDevice *pRetVal = NULL;
|
||||
|
||||
WCMRAudioDeviceListConstIter deviceIter;
|
||||
for (deviceIter = m_Devices.begin(); deviceIter != m_Devices.end(); deviceIter++)
|
||||
{
|
||||
if ((*deviceIter)->DeviceName() == nameToMatch)
|
||||
{
|
||||
pRetVal = *deviceIter;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return (pRetVal);
|
||||
}
|
||||
|
||||
//**********************************************************************************************
|
||||
// *WCMRAudioDeviceManager::GetDefaultDevice
|
||||
//
|
||||
//! Locates a device based on device name.
|
||||
//!
|
||||
//! \param nameToMatch : Device to look for.
|
||||
//!
|
||||
//! \return Pointer to the device object if found, NULL otherwise.
|
||||
//!
|
||||
//**********************************************************************************************
|
||||
WCMRAudioDevice *WCMRAudioDeviceManager::GetDefaultDevice_Private()
|
||||
{
|
||||
//Need to check all our devices...
|
||||
WCMRAudioDevice *pRetVal = NULL;
|
||||
|
||||
WCMRAudioDeviceListIter deviceIter = m_Devices.begin();
|
||||
if(deviceIter != m_Devices.end())
|
||||
{
|
||||
pRetVal = *deviceIter;
|
||||
}
|
||||
return (pRetVal);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//**********************************************************************************************
|
||||
// WCMRAudioDeviceManager::NotifyClient
|
||||
//
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue