// AudioSink.h: interface for the AudioSink class. // ////////////////////////////////////////////////////////////////////// #ifndef AFX_AUDIOSINK_H__08C0DCDA_463E_4DF1_80E7_1BC6CE17AF92__INCLUDED_ #define AFX_AUDIOSINK_H__08C0DCDA_463E_4DF1_80E7_1BC6CE17AF92__INCLUDED_ #include #include #include #include "AudioSourceListener.h" #include "TraceUser.h" class AudioSample; class AudioSource; class AudioSink : public AudioSourceListener, public virtual TraceUser { public: AudioSink(); virtual ~AudioSink(); int UnsubscribeAudioSource(AudioSource *audioSource); int SubscribeAudioSource(AudioSource *audioSource); virtual int TakeNextAudioSample(AudioSample *audioSample, AudioSource *audioSource); int StartSink(); int StopSink(); virtual int StartSinkThread(); virtual int StopSinkThread(); static DWORD WINAPI SinkThreadProc(LPVOID params); virtual int SinkThreadStarted(HANDLE sinkThreadHandle, DWORD sinkThreadID); virtual int SinkThreadStopped(HANDLE sinkThreadHandle, DWORD sinkThreadID); virtual int SinkStarted(); virtual int SinkStopped(); protected: virtual int RenderAudioSamples(std::vector > &data); protected: std::vector audioSources; std::vector > inputData; HANDLE sinkThreadHandle; DWORD sinkThreadID; bool bSinkRunning; bool bSinkThreadRunning; bool bSinkThreadShouldStop; HANDLE sinkThreadStartEvent; HANDLE sinkThreadStopEvent; CRITICAL_SECTION audioSourcesMutex; CRITICAL_SECTION sinkThreadMutex; CRITICAL_SECTION sinkStateMutex; CRITICAL_SECTION sinkStartStopMutex; }; #endif // !defined(AFX_AUDIOSINK_H__08C0DCDA_463E_4DF1_80E7_1BC6CE17AF92__INCLUDED_)