diff options
Diffstat (limited to 'libs/backends/wavesaudio/wavesapi/devicemanager/WCMRCoreAudioDeviceManager.h')
-rw-r--r-- | libs/backends/wavesaudio/wavesapi/devicemanager/WCMRCoreAudioDeviceManager.h | 209 |
1 files changed, 0 insertions, 209 deletions
diff --git a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRCoreAudioDeviceManager.h b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRCoreAudioDeviceManager.h deleted file mode 100644 index 0d92493b51..0000000000 --- a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRCoreAudioDeviceManager.h +++ /dev/null @@ -1,209 +0,0 @@ -/* - Copyright (C) 2014 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. - -*/ - -//---------------------------------------------------------------------------------- -// -// -//! \file WCMRCoreAudioDeviceManager.h -//! -//! WCMRCoreAudioDeviceManager and related class declarations -//! -//---------------------------------------------------------------------------------*/ -#ifndef __WCMRCoreAudioDeviceManager_h_ - #define __WCMRCoreAudioDeviceManager_h_ - -#include "WCMRAudioDeviceManager.h" -#include "WCMRNativeAudio.h" -#include "Threads/WCThreadSafe.h" - -#include <AudioUnit/AudioUnit.h> -#include <AudioToolbox/AudioToolbox.h> - -#include <mach/mach.h> - -#include <CoreAudio/CoreAudio.h> - -//forward decl. -class WCMRCoreAudioDeviceManager; - -#define WV_USE_TONE_GEN 0 ///! Set this to 1 to use a tone generator for input. See description at SetupToneGenerator for details. - -// This enum is for choosing filter for audio devices scan -typedef enum eCABS_Method -{ - eCABS_Simple = 0, - eCABS_DestructiveCache, - eCABS_CacheOnDeviceSet, - eCABS_MethodNum // Must be last -} eCABS_Method; - -//! Manages a port audio device, providing information -//! about the device, and managing audio callbacks. -class WCMRCoreAudioDevice : public WCMRNativeAudioDevice -{ -public: - - WCMRCoreAudioDevice (WCMRCoreAudioDeviceManager *pManager, AudioDeviceID deviceID, bool useMultithreading = true, bool bNocopy = false);///<Constructor - virtual ~WCMRCoreAudioDevice ();///<Destructor - - virtual const std::string& DeviceName() const;///<Name? - virtual const std::vector<std::string>& InputChannels();///<Current Input Channel List? - note that this may change with change in sampling rate. - virtual const std::vector<std::string>& OutputChannels();///<Current Output Channel List? - note that this may change with change in sampling rate. - - - virtual const std::vector<int>& SamplingRates();///<Supported Sampling Rate List? - virtual int CurrentSamplingRate(); ///<Current Sampling rate.? - virtual WTErr SetCurrentSamplingRate(int newRate);///<Change Current Sampling Rate : This is a requset, might not be successful at run time! - - virtual const std::vector<int>& BufferSizes();///<Supported Buffer Size List? - note that this may change with change in sampling rate. - virtual int CurrentBufferSize();///<Current Buffer Size.? - note that this may change with change in sampling rate. - virtual WTErr SetCurrentBufferSize (int newSize);///<Change Current Buffer Size : This is a requset, might not be successful at run time! - - virtual ConnectionStates ConnectionStatus();///< Connection Status - device available, gone, disconnected - - virtual WTErr SetActive (bool newState);///<Prepare/Activate device. - virtual WTErr SetStreaming (bool newState);///<Start/Stop Streaming - should reconnect connections when streaming starts! - - virtual WTErr DoIdle();///<Do Idle Processing - - virtual WTErr SetMonitorChannels (int leftChannel, int rightChannel);///<Set monitor channels. - optional, will not be available with AG - virtual WTErr SetMonitorGain (float newGain);///<Set monitor gain. - optional, will not be available with AG - - virtual WTErr ShowConfigPanel (void *pParam);///< Show Control Panel - in case of ASIO this will work only with Active device! - - virtual int AudioCallback (float *pOutputBuffer, unsigned long framesPerBuffer, int64_t inSampleTime, uint64_t inCycleStartTime); - - AudioDeviceID DeviceID () {return m_DeviceID;} - - virtual uint32_t GetLatency (bool isInput); ///< Get latency. - virtual OSStatus GetStreamLatency(AudioDeviceID deviceID, bool isInput, std::vector<int>& latencies); - - -protected: - - AudioDeviceID m_DeviceID; ///< The CoreAudio device id - bool m_StopRequested; ///< should be set to true when want to stop, set to false otherwise. - float *m_pInputData; ///< This is what came in with the most recent callback. - int64_t m_SampleCounter; ///< The current running sample counter, updated by the audio callback. - int64_t m_SampleCountAtLastIdle; ///< What was the sample count last time we checked... - int m_StalledSampleCounter; ///< The number of idle calls with same sample count detected - int m_ChangeCheckCounter; ///< The number of idle calls passed since we checked the buffer size change. - - wvNS::wvThread::timestamp m_LastCPULog; ///< The time when the last CPU details log was sent as a notification. -// unsigned int m_IOCyclesTimesTaken[MAX_IOCYCLE_TIMES]; ///< This stores the times taken by each IOCycle, in host-time units. -// int m_CurrentIOCycle; ///< The location in m_IOCyclesTymesTaken array, where the next cycle's value will go. -// int m_CyclesToAccumulate; ///< The number of cycles to accumulate the values for - maximum for last one second. -// unsigned int m_CyclePeriod; ///< The number of host time units for a cycle period - determined by buffer size and sampling rate - - - AudioUnit m_AUHALAudioUnit;///< The AUHAL AudioUnit - - int m_BufferSizeChangeRequested; - int m_BufferSizeChangeReported; - int m_ResetRequested; - int m_ResetReported; - int m_ResyncRequested; - int m_ResyncReported; - int m_SRChangeRequested; - int m_SRChangeReported; - - int m_DropsDetected; ///< Number of times audio drops have been detected so far. - int m_DropsReported; ///< Number of times audio drops have been reported so far to the client. - bool m_IgnoreThisDrop; ///< Allows disregarding the first drop - - thread_t m_IOProcThreadPort; ///< Thread handle to calculate CPU consumption. - int m_CPUCount; ///< Number of processors/core to normalize cpu consumption calculation. - -#if WV_USE_TONE_GEN - //The Tone Generator... - float_t *m_pToneData; - uint32_t m_ToneDataSamples; - uint32_t m_NextSampleToUse; -#endif //WV_USE_TONE_GEN - - WTErr UpdateDeviceInfo (); - WTErr UpdateDeviceId (); - WTErr UpdateDeviceName(); - WTErr UpdateDeviceInputs(); - WTErr UpdateDeviceOutputs(); - WTErr UpdateDeviceSampleRates(); - WTErr UpdateDeviceBufferSizes(); - WTErr SetWorkingBufferSize(int newSize); - OSStatus SetBufferSizesByIO(int newSize); - WTErr SetAndCheckCurrentSamplingRate (int newRate); - - WTErr EnableAudioUnitIO(); - WTErr virtual EnableListeners(); - WTErr virtual DisableListeners(); - WTErr SetupAUHAL(); - WTErr TearDownAUHAL(); - -#if WV_USE_TONE_GEN - void SetupToneGenerator (); -#endif //WV_USE_TONE_GEN - - static OSStatus StaticAudioIOProc(void *inRefCon, AudioUnitRenderActionFlags * ioActionFlags, - const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, - AudioBufferList *ioData); - OSStatus AudioIOProc(AudioUnitRenderActionFlags * ioActionFlags, - const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, - AudioBufferList *ioData); - - static OSStatus StaticPropertyChangeProc (AudioDeviceID inDevice, UInt32 inChannel, Boolean isInput, - AudioDevicePropertyID inPropertyID, void *inClientData); - void PropertyChangeProc (AudioDevicePropertyID inPropertyID); - -private: - -}; - - -//! WCMRCoreAudioDeviceManager -/*! The CoreAudio Device Manager class */ -class WCMRCoreAudioDeviceManager : public WCMRAudioDeviceManager -{ -public: - - WCMRCoreAudioDeviceManager(WCMRAudioDeviceManagerClient *pTheClient, eAudioDeviceFilter eCurAudioDeviceFilter, - bool useMultithreading = true, bool bNocopy = false); ///< constructor - virtual ~WCMRCoreAudioDeviceManager(void); ///< Destructor - -protected: - static OSStatus HardwarePropertyChangeCallback (AudioHardwarePropertyID inPropertyID, void* inClientData); - - virtual WCMRAudioDevice* initNewCurrentDeviceImpl(const std::string & deviceName); - virtual void destroyCurrentDeviceImpl(); - virtual WTErr generateDeviceListImpl(); - virtual WTErr updateDeviceListImpl(); - virtual WTErr getDeviceSampleRatesImpl(const std::string & deviceName, std::vector<int>& sampleRates) const; - virtual WTErr getDeviceBufferSizesImpl(const std::string & deviceName, std::vector<int>& bufferSizes) const; - - bool m_UseMultithreading; ///< Flag indicates whether to use multi-threading for audio processing. - bool m_bNoCopyAudioBuffer; - -private: - // helper functions for this class only - WTErr getDeviceAvailableSampleRates(DeviceID deviceId, std::vector<int>& sampleRates); - WTErr getDeviceMaxInputChannels(DeviceID deviceId, unsigned int& inputChannels); - WTErr getDeviceMaxOutputChannels(DeviceID deviceId, unsigned int& outputChannels); - - WCMRAudioDevice* m_NoneDevice; -}; - -#endif //#ifndef __WCMRCoreAudioDeviceManager_h_ |