summaryrefslogtreecommitdiff
path: root/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.cpp')
-rw-r--r--libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.cpp692
1 files changed, 0 insertions, 692 deletions
diff --git a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.cpp b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.cpp
deleted file mode 100644
index 7c4a3e9962..0000000000
--- a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.cpp
+++ /dev/null
@@ -1,692 +0,0 @@
-//----------------------------------------------------------------------------------
-//
-// Copyright (c) 2008 Waves Audio Ltd. All rights reserved.
-//
-//! \file WCMRAudioDeviceManager.cpp
-//!
-//! WCMRAudioDeviceManager and related class declarations
-//!
-//---------------------------------------------------------------------------------*/
-#include <iostream>
-#include "WCMRAudioDeviceManager.h"
-
-
-//**********************************************************************************************
-// WCMRAudioDevice::WCMRAudioDevice
-//
-//! Constructor for the audio device. The derived classes will need to do more actual work, such
-//! as determining supported sampling rates, buffer sizes, and channel counts. Connection
-//! 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) :
- 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_DeviceName = "Unknown";
-}
-
-
-
-//**********************************************************************************************
-// WCMRAudioDevice::~WCMRAudioDevice
-//
-//! Destructor for the audio device. It release all the connections that were created.
-//!
-//! \param none
-//!
-//! \return Nothing.
-//!
-//**********************************************************************************************
-WCMRAudioDevice::~WCMRAudioDevice ()
-{
- AUTO_FUNC_DEBUG;
- try
- {
- }
- catch (...)
- {
- //destructors should absorb exceptions, no harm in logging though!!
- DEBUG_MSG ("Exception during destructor");
- }
-}
-
-
-
-
-//**********************************************************************************************
-// WCMRAudioDevice::DeviceName
-//
-//! Retrieves Device's name.
-//!
-//! \param none
-//!
-//! \return The device name.
-//!
-//**********************************************************************************************
-const std::string& WCMRAudioDevice::DeviceName () const
-{
- return (m_DeviceName);
-
-}
-
-
-
-//**********************************************************************************************
-// WCMRAudioDevice::InputChannels
-//
-//! Retrieves Input Channel information. Note that the list may be changed at run-time.
-//!
-//! \param none
-//!
-//! \return A vector with Input Channel Names.
-//!
-//**********************************************************************************************
-const std::vector<std::string>& WCMRAudioDevice::InputChannels ()
-{
- return (m_InputChannels);
-
-}
-
-
-
-//**********************************************************************************************
-// WCMRAudioDevice::OutputChannels
-//
-//! Retrieves Output Channel Information. Note that the list may be changed at run-time.
-//!
-//! \param none
-//!
-//! \return A vector with Output Channel Names.
-//!
-//**********************************************************************************************
-const std::vector<std::string>& WCMRAudioDevice::OutputChannels ()
-{
- return (m_OutputChannels);
-}
-
-
-
-
-//**********************************************************************************************
-// WCMRAudioDevice::SamplingRates
-//
-//! Retrieves supported sampling rate information.
-//!
-//! \param none
-//!
-//! \return A vector with supported sampling rates.
-//!
-//**********************************************************************************************
-const std::vector<int>& WCMRAudioDevice::SamplingRates ()
-{
- return (m_SamplingRates);
-}
-
-
-
-//**********************************************************************************************
-// WCMRAudioDevice::CurrentSamplingRate
-//
-//! The device's current sampling rate. This may be overridden, if the device needs to
-//! query the driver for the current rate.
-//!
-//! \param none
-//!
-//! \return The device's current sampling rate. -1 on error.
-//!
-//**********************************************************************************************
-int WCMRAudioDevice::CurrentSamplingRate ()
-{
- return (m_CurrentSamplingRate);
-}
-
-
-
-
-//**********************************************************************************************
-// WCMRAudioDevice::SetCurrentSamplingRate
-//
-//! Change the sampling rate to be used by the device. This will most likely be overridden,
-//! the base class simply updates the member variable.
-//!
-//! \param newRate : The rate to use (samples per sec).
-//!
-//! \return eNoErr always. The derived classes may return error codes.
-//!
-//**********************************************************************************************
-WTErr WCMRAudioDevice::SetCurrentSamplingRate (int newRate)
-{
- //changes the status.
- m_CurrentSamplingRate = newRate;
- return (eNoErr);
-}
-
-
-
-
-//**********************************************************************************************
-// WCMRAudioDevice::BufferSizes
-//
-//! Retrieves supported buffer size information.
-//!
-//! \param none
-//!
-//! \return A vector with supported buffer sizes.
-//!
-//**********************************************************************************************
-const std::vector<int>& WCMRAudioDevice::BufferSizes ()
-{
- return (m_BufferSizes);
-}
-
-
-
-//**********************************************************************************************
-// WCMRAudioDevice::CurrentBufferSize
-//
-//! The device's current buffer size in use. This may be overridden, if the device needs to
-//! query the driver for the current size.
-//!
-//! \param none
-//!
-//! \return The device's current buffer size. 0 on error.
-//!
-//**********************************************************************************************
-int WCMRAudioDevice::CurrentBufferSize ()
-{
- return (m_CurrentBufferSize);
-}
-
-//**********************************************************************************************
-// WCMRAudioDevice::CurrentBlockSize
-//
-//! Device's block size we use for holding the audio samples.
-//! Usually this is equal to the buffer size, but in some cases the buffer size holds additional
-//! data other then the audio buffers, like frames info in SG, so it can be overridden
-//!
-//! \param none
-//!
-//! \return The device's current block size. 0 on error.
-//!
-//**********************************************************************************************
-int WCMRAudioDevice::CurrentBlockSize()
-{
- // By default - return the buffer size
- return CurrentBufferSize();
-}
-
-
-//**********************************************************************************************
-// WCMRAudioDevice::SetCurrentBufferSize
-//
-//! Change the buffer size to be used by the device. This will most likely be overridden,
-//! the base class simply updates the member variable.
-//!
-//! \param newSize : The buffer size to use (in sample-frames)
-//!
-//! \return eNoErr always. The derived classes may return error codes.
-//!
-//**********************************************************************************************
-WTErr WCMRAudioDevice::SetCurrentBufferSize (int newSize)
-{
- //This will most likely be overridden, the base class simply
- //changes the member.
- m_CurrentBufferSize = newSize;
- return (eNoErr);
-}
-
-
-
-
-//**********************************************************************************************
-// WCMRAudioDevice::ConnectionStatus
-//
-//! Retrieves the device's current connection status. This will most likely be overridden,
-//! in case some driver communication is required to query the status.
-//!
-//! \param none
-//!
-//! \return A ConnectionStates value.
-//!
-//**********************************************************************************************
-WCMRAudioDevice::ConnectionStates WCMRAudioDevice::ConnectionStatus ()
-{
- return (m_ConnectionStatus);
-
-}
-
-
-
-
-//**********************************************************************************************
-// WCMRAudioDevice::Active
-//
-//! Retrieves Device activation status.
-//!
-//! \param none
-//!
-//! \return true if device is active, false otherwise.
-//!
-//**********************************************************************************************
-bool WCMRAudioDevice::Active ()
-{
- return (m_IsActive);
-
-}
-
-
-
-//**********************************************************************************************
-// WCMRAudioDevice::SetActive
-//
-//! Sets the device's activation status.
-//!
-//! \param newState : Should be true to activate, false to deactivate. This roughly corresponds
-//! to opening and closing the device handle/stream/audio unit.
-//!
-//! \return eNoErr always, the derived classes may return appropriate error code.
-//!
-//**********************************************************************************************
-WTErr WCMRAudioDevice::SetActive (bool newState)
-{
- //This will most likely be overridden, the base class simply
- //changes the member.
- m_IsActive = newState;
- return (eNoErr);
-}
-
-
-
-
-//**********************************************************************************************
-// WCMRAudioDevice::Streaming
-//
-//! Retrieves Device streaming status.
-//!
-//! \param none
-//!
-//! \return true if device is streaming, false otherwise.
-//!
-//**********************************************************************************************
-bool WCMRAudioDevice::Streaming ()
-{
- return (m_IsStreaming);
-}
-
-
-
-//**********************************************************************************************
-// WCMRAudioDevice::SetStreaming
-//
-//! Sets the device's streaming status.
-//!
-//! \param newState : Should be true to start streaming, false to stop streaming. This roughly
-//! corresponds to calling Start/Stop on the lower level interface.
-//!
-//! \return eNoErr always, the derived classes may return appropriate error code.
-//!
-//**********************************************************************************************
-WTErr WCMRAudioDevice::SetStreaming (bool newState)
-{
- // We must notify angine about our intention to start streming
- // so Engine will provide all the initializations in the first audio callback
- if (newState) {
- m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::DeviceStartsStreaming);
- }
-
- //This will most likely be overridden, the base class simply
- //changes the member.
- m_IsStreaming = newState;
- return (eNoErr);
-}
-
-
-WTErr WCMRAudioDevice::ResetDevice ()
-{
- // Keep device sates
- bool wasStreaming = Streaming();
- bool wasActive = Active();
-
- WTErr err = SetStreaming(false);
-
- if (err == eNoErr)
- err = SetActive(false);
-
- if (err == eNoErr && wasActive)
- err = SetActive(true);
-
- if (err == eNoErr && wasStreaming)
- SetStreaming(true);
-
- return err;
-}
-
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////
-// IsProcessActive - returns true if process code is running.
-// A normal audio device should return the Streaming() value
-///////////////////////////////////////////////////////////////////////////////////////////////////////
-bool WCMRAudioDevice::IsProcessActive()
-{
- return Streaming();
-}
-
-
-
-
-
-//**********************************************************************************************
-// WCMRAudioDevice::DoIdle
-//
-//! A place for doing idle time processing. The derived classes will probably do something
-//! meaningful.
-//!
-//! \param none
-//!
-//! \return eNoErr always.
-//!
-//**********************************************************************************************
-WTErr WCMRAudioDevice::DoIdle ()
-{
- //We don't need to do anything here...
- //the derived classes may want to use this however.
- return (eNoErr);
-}
-
-
-
-
-//**********************************************************************************************
-// WCMRAudioDevice::InputLevels
-//
-//! Retrieve current input levels.
-//!
-//! \param none
-//!
-//! \return A vector (the same size as input channels list) that contains current input levels.
-//!
-//**********************************************************************************************
-const std::vector<float>& WCMRAudioDevice::InputLevels ()
-{
- //The derived classes may override if they need to query
- //the driver for the levels.
- return (m_InputLevels);
-}
-
-
-
-//**********************************************************************************************
-// WCMRAudioDevice::OutputLevels
-//
-//! Retrieve current output levels.
-//!
-//! \param none
-//!
-//! \return A vector (the same size as output channels list) that contains current output levels.
-//!
-//**********************************************************************************************
-const std::vector<float>& WCMRAudioDevice::OutputLevels ()
-{
- //The derived classes may override if they need to query
- //the driver for the levels.
- return (m_OutputLevels);
-}
-
-
-
-//**********************************************************************************************
-// WCMRAudioDevice::GetMonitorInfo
-//
-//! Retrieves current monitoring information.
-//!
-//! \param *pLeftChannel : Pointer to receive left monitor channel index.
-//! \param *pRightChannel : Pointer to receive right monitor channel index.
-//! \param *pGain : Pointer to receive the gain (linear) to be applied.
-//!
-//! \return Nothing.
-//!
-//**********************************************************************************************
-void WCMRAudioDevice::GetMonitorInfo (int *pLeftChannel, int *pRightChannel, float *pGain)
-{
- if (pLeftChannel)
- *pLeftChannel = m_LeftMonitorChannel;
- if (pRightChannel)
- *pRightChannel = m_RightMonitorChannel;
- if (pGain)
- *pGain = m_MonitorGain;
- return;
-}
-
-
-
-//**********************************************************************************************
-// WCMRAudioDevice::SetMonitorChannels
-//
-//! Used to set the channels to be used for monitoring.
-//!
-//! \param leftChannel : Left monitor channel index.
-//! \param rightChannel : Right monitor channel index.
-//!
-//! \return eNoErr always, the derived classes may return appropriate errors.
-//!
-//**********************************************************************************************
-WTErr WCMRAudioDevice::SetMonitorChannels (int leftChannel, int rightChannel)
-{
- //This will most likely be overridden, the base class simply
- //changes the member.
- m_LeftMonitorChannel = leftChannel;
- m_RightMonitorChannel = rightChannel;
- return (eNoErr);
-}
-
-
-
-//**********************************************************************************************
-// WCMRAudioDevice::SetMonitorGain
-//
-//! Used to set monitor gain (or atten).
-//!
-//! \param newGain : The new gain or atten. value to use. Specified as a linear multiplier (not dB)
-//!
-//! \return eNoErr always, the derived classes may return appropriate errors.
-//!
-//**********************************************************************************************
-WTErr WCMRAudioDevice::SetMonitorGain (float newGain)
-{
- //This will most likely be overridden, the base class simply
- //changes the member.
- m_MonitorGain = newGain;
- return (eNoErr);
-}
-
-
-
-
-//**********************************************************************************************
-// WCMRAudioDevice::ShowConfigPanel
-//
-//! Used to show device specific config/control panel. Some interfaces may not support it.
-//! Some interfaces may require the device to be active before it can display a panel.
-//!
-//! \param pParam : A device/interface specific parameter - optional.
-//!
-//! \return eNoErr always, the derived classes may return errors.
-//!
-//**********************************************************************************************
-WTErr WCMRAudioDevice::ShowConfigPanel (void *WCUNUSEDPARAM(pParam))
-{
- //This will most likely be overridden...
- return (eNoErr);
-}
-
-
-//**********************************************************************************************
-// WCMRAudioDevice::SendCustomCommand
-//
-//! Used to Send a custom command to the audiodevice. Some interfaces may require the device
-//! to be active before it can do anything in this.
-//!
-//! \param customCommand : A device/interface specific command.
-//! \param pCommandParam : A device/interface/command specific parameter - optional.
-//!
-//! \return eNoErr always, the derived classes may return errors.
-//!
-//**********************************************************************************************
-WTErr WCMRAudioDevice::SendCustomCommand (int WCUNUSEDPARAM(customCommand), void *WCUNUSEDPARAM(pCommandParam))
-{
- //This will most likely be overridden...
- return (eNoErr);
-}
-
-//**********************************************************************************************
-// WCMRAudioDevice::GetLatency
-//
-//! Get Latency for device.
-//!
-//! Use 'kAudioDevicePropertyLatency' and 'kAudioDevicePropertySafetyOffset' + GetStreamLatencies
-//!
-//! \param isInput : Return latency for the input if isInput is true, otherwise the output latency
-//! wiil be returned.
-//! \return Latency in samples.
-//!
-//**********************************************************************************************
-uint32_t WCMRAudioDevice::GetLatency (bool isInput)
-{
- //This will most likely be overridden...
- return 0;
-}
-
-
-//**********************************************************************************************
-// WCMRAudioDeviceManager::WCMRAudioDeviceManager
-//
-//! The constructuor, most of the work will be done in the derived class' constructor.
-//!
-//! \param *pTheClient :
-//!
-//! \return Nothing.
-//!
-//**********************************************************************************************
-WCMRAudioDeviceManager::WCMRAudioDeviceManager(WCMRAudioDeviceManagerClient *pTheClient, eAudioDeviceFilter eCurAudioDeviceFilter)
- : m_eAudioDeviceFilter(eCurAudioDeviceFilter)
- , m_CurrentDevice(0)
- , m_pTheClient (pTheClient)
-{
-}
-
-
-//**********************************************************************************************
-// WCMRAudioDeviceManager::~WCMRAudioDeviceManager
-//
-//! It clears the device list, releasing each of the device.
-//!
-//! \param none
-//!
-//! \return Nothing.
-//!
-//**********************************************************************************************
-WCMRAudioDeviceManager::~WCMRAudioDeviceManager()
-{
- AUTO_FUNC_DEBUG;
-
- std::cout << "API::Destroying AudioDeviceManager " << std::endl;
- try
- {
- // 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 (...)
- {
- //destructors should absorb exceptions, no harm in logging though!!
- DEBUG_MSG ("Exception during destructor");
- }
-}
-
-
-WCMRAudioDevice* WCMRAudioDeviceManager::InitNewCurrentDevice(const std::string & deviceName)
-{
- 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)
- {
- if (nameToMatch == (*iter)->m_DeviceName)
- {
- devInfo = *(*iter);
- return eNoErr;
- }
- }
-
- return eRMResNotFound;
-}
-
-
-WTErr WCMRAudioDeviceManager::GetDeviceSampleRates(const std::string & nameToMatch, std::vector<int>& sampleRates) const
-{
- return getDeviceSampleRatesImpl(nameToMatch, sampleRates);
-}
-
-
-
-WTErr WCMRAudioDeviceManager::GetDeviceBufferSizes(const std::string & nameToMatch, std::vector<int>& bufferSizes) const
-{
- return getDeviceBufferSizesImpl(nameToMatch, bufferSizes);
-}
-
-
-//**********************************************************************************************
-// WCMRAudioDeviceManager::NotifyClient
-//
-//! A helper routine used to call the client for notification.
-//!
-//! \param forReason : The reason for notification.
-//! \param *pParam : A parameter (if required) for notification.
-//!
-//! \return Nothing.
-//!
-//**********************************************************************************************
-void WCMRAudioDeviceManager::NotifyClient (WCMRAudioDeviceManagerClient::NotificationReason forReason, void *pParam)
-{
- if (m_pTheClient)
- m_pTheClient->AudioDeviceManagerNotification (forReason, pParam);
- return;
-}