// 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 <windows.h>
|
#include <vector>
|
|
#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<AudioSink *> 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_)
|