// AudioSource.h: interface for the AudioSource class. // ////////////////////////////////////////////////////////////////////// #ifndef AFX_AUDIOSOURCE_H__173FE137_77CB_40B5_9E44_E40F9DF01BE7__INCLUDED_ #define AFX_AUDIOSOURCE_H__173FE137_77CB_40B5_9E44_E40F9DF01BE7__INCLUDED_ #include #include #include "AudioSinkListener.h" #include "TraceUser.h" class AudioSample; class AudioSink; class AudioSource : public AudioSinkListener, public virtual TraceUser { public: AudioSource(); virtual ~AudioSource(); int UnsubscribeAudioSink(AudioSink *audioSink); int SubscribeAudioSink(AudioSink *audioSink); virtual int GiveNextAudioSample(AudioSample **ppAudioSample, AudioSink *audioSink); int StartSource(); int StopSource(); virtual int StartSourceThread(); virtual int StopSourceThread(); static DWORD WINAPI SourceThreadProc(LPVOID params); virtual int SourceThreadStarted(HANDLE sourceThreadHandle, DWORD sourceThreadID); virtual int SourceThreadStopped(HANDLE sourceThreadHandle, DWORD sourceThreadID); virtual int SourceStarted(); virtual int SourceStopped(); protected: virtual int GenerateData(AudioSample **audioSample); int SendAudioSample(AudioSample *audioSample, AudioSink *audioSink); protected: std::vector audioSinks; HANDLE sourceThreadHandle; DWORD sourceThreadID; bool bSourceRunning; bool bSourceThreadRunning; bool bSourceThreadShouldStop; HANDLE sourceThreadStartEvent; HANDLE sourceThreadStopEvent; CRITICAL_SECTION audioSinksMutex; CRITICAL_SECTION sourceThreadMutex; CRITICAL_SECTION sourceStateMutex; CRITICAL_SECTION sourceStartStopMutex; }; #endif // !defined(AFX_AUDIOSOURCE_H__173FE137_77CB_40B5_9E44_E40F9DF01BE7__INCLUDED_)