2014-02-24 14:39:10 -05:00
//----------------------------------------------------------------------------------
//
2014-04-30 13:46:41 -04:00
// Copyright (c) 2008 Waves Audio Ltd. All rights reserved.
2014-02-24 14:39:10 -05:00
//
//! \file WCMRNativeAudio.h
//!
//! WCMRNativeAudio and related class declarations
//!
//---------------------------------------------------------------------------------*/
# ifndef __WCMRNativeAudio_h_
# define __WCMRNativeAudio_h_
2014-05-01 09:32:18 -04:00
# if defined(PLATFORM_WINDOWS)
2014-02-24 14:39:10 -05:00
# include "windows.h"
# endif
# include "pthread.h"
# include "WCRefManager.h"
# include "WCMRAudioDeviceManager.h"
2014-09-30 20:35:31 -04:00
# if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_9
# include <unistd.h>
# endif
2014-02-24 14:39:10 -05:00
class WCMRNativeAudioDevice ; //forward
class WCMRNativeAudioDevice : public WCMRAudioDevice
{
public :
2014-04-30 13:46:41 -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.
} ;
//! 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!
2014-04-30 13:46:41 -04:00
virtual WTErr UpdateDeviceInfo ( ) ;
2014-02-24 14:39:10 -05:00
private :
static void * __SilenceThread ( void * This ) ;
void _SilenceThread ( ) ;
2014-05-01 09:32:18 -04:00
# if defined(PLATFORM_WINDOWS)
2014-02-24 14:39:10 -05:00
void _usleep ( uint64_t usec ) ;
# else
inline void _usleep ( uint64_t usec ) { : : usleep ( usec ) ; }
# endif
2014-04-30 13:46:41 -04:00
static const size_t __m_NumInputChannels = 0 ;
static const size_t __m_NumOutputChannels = 0 ;
2014-02-24 14:39:10 -05:00
pthread_t m_SilenceThread ;
2014-04-30 13:46:41 -04:00
float * _m_inputBuffer ;
float * _m_outputBuffer ;
2014-02-24 14:39:10 -05:00
static uint64_t __get_time_nanos ( ) ;
2014-05-01 09:32:18 -04:00
# if defined (PLATFORM_WINDOWS)
2014-02-24 14:39:10 -05:00
HANDLE _waitableTimerForUsleep ;
# endif
} ;
# endif //#ifndef __WCMRNativeAudio_h_