// 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 <windows.h>
|
#include <vector>
|
#include <utility>
|
|
#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<std::pair<AudioSample *, AudioSource *> > &data);
|
|
protected:
|
std::vector<AudioSource *> audioSources;
|
std::vector<std::pair<AudioSample *, AudioSource *> > 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_)
|