2014-04-29 16:30:56 -04:00
/*
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 0213 9 , USA .
*/
2014-02-24 14:39:10 -05:00
//----------------------------------------------------------------------------------
//
//
//! \file WCMRNativeAudio.h
//!
//! WCMRNativeAudio and related class declarations
//!
//---------------------------------------------------------------------------------*/
# ifndef __WCMRNativeAudio_h_
# define __WCMRNativeAudio_h_
# if defined(_WINDOWS)
# include "windows.h"
# endif
# include "pthread.h"
# include "WCRefManager.h"
# include "WCMRAudioDeviceManager.h"
class WCMRNativeAudioDevice ; //forward
class WCMRNativeAudioDevice : public WCMRAudioDevice
{
public :
2014-04-29 16:30:56 -04:00
WCMRNativeAudioDevice ( WCMRAudioDeviceManager * pManager , bool useMultithreading = true , bool bNoCopy = false ) : WCMRAudioDevice ( pManager ) ,
m_UseMultithreading ( useMultithreading ) ,
m_bNoCopyAudioBuffer ( bNoCopy )
2014-02-24 14:39:10 -05:00
{ }
virtual ~ WCMRNativeAudioDevice ( ) { }
protected :
bool m_UseMultithreading ;
bool m_bNoCopyAudioBuffer ; ///< This flag determines whether the audio callback performs a copy of audio, or the source/sink perform the copy. It should be true to let source/sink do the copies.
2014-04-29 16:30:56 -04:00
2014-02-24 14:39:10 -05:00
} ;
//! A dummy device to allow apps to choose "None" in case no real device connection is required.
class WCMRNativeAudioNoneDevice : public WCMRNativeAudioDevice
{
public :
WCMRNativeAudioNoneDevice ( WCMRAudioDeviceManager * pManager ) ;
virtual ~ WCMRNativeAudioNoneDevice ( ) ;
virtual WTErr SetActive ( bool newState ) ; ///<Prepare/Activate device.
virtual WTErr SetStreaming ( bool newState ) ; ///<Start/Stop Streaming - should reconnect connections when streaming starts!
virtual WTErr SetCurrentBufferSize ( int newSize ) ; ///<Change Current Buffer Size : This is a requset, might not be successful at run time!
private :
static void * __SilenceThread ( void * This ) ;
void _SilenceThread ( ) ;
# if defined(_WINDOWS)
void _usleep ( uint64_t usec ) ;
# else
inline void _usleep ( uint64_t usec ) { : : usleep ( usec ) ; }
# endif
2014-04-29 16:30:56 -04:00
static const size_t __m_NumInputChannels = 32 ;
static const size_t __m_NumOutputChannels = 32 ;
2014-02-24 14:39:10 -05:00
pthread_t m_SilenceThread ;
2014-04-29 16:30:56 -04:00
float * _m_inputBuffer ;
float * _m_outputBuffer ;
2014-02-24 14:39:10 -05:00
static uint64_t __get_time_nanos ( ) ;
# if defined (_WINDOWS)
HANDLE _waitableTimerForUsleep ;
# endif
} ;
# endif //#ifndef __WCMRNativeAudio_h_