// ACMTransformer.h: interface for the ACMTransformer class.
|
//
|
//////////////////////////////////////////////////////////////////////
|
|
#ifndef AFX_ACMTRANSFORMER_H__86E322E0_F705_4ED1_9572_2A65C9105F62__INCLUDED_
|
#define AFX_ACMTRANSFORMER_H__86E322E0_F705_4ED1_9572_2A65C9105F62__INCLUDED_
|
|
#include <mmreg.h>
|
#include <Msacm.h>
|
#include <mmsystem.h>
|
#include <queue>
|
#include <list>
|
|
#include "AudioTransformer.h"
|
#include "Parameters.h"
|
|
#define ACMTRANSFORMER_NUM_STREAMHEADER 1
|
|
class ACMTransformer : public AudioTransformer
|
{
|
public:
|
ACMTransformer();
|
virtual ~ACMTransformer();
|
SetSourceFormat(WAVEFORMATEX &wfxSource);
|
SetDestinationFormat(WAVEFORMATEX &wfxDest);
|
int TransformStarted();
|
int TransformStopped();
|
int SetOutputDuration(int millisecs);
|
int FlushBuffer();
|
protected:
|
virtual int TransformAudioSamples(std::vector<std::pair<AudioSample *, AudioSource *> > &data, AudioSample **ppAudioSample);
|
virtual int SetTraceLevel();
|
int RenderAudioSamples(std::vector<std::pair<AudioSample *, AudioSource *> > &data);
|
int GenerateData(AudioSample **ppAudioSample);
|
private:
|
ACMSTREAMHEADER *GetBuffer();
|
void ReleaseBuffer(ACMSTREAMHEADER *acmHdr);
|
bool IsRunning();
|
void SetRunning(bool isRunning);
|
int AddConvertedData(unsigned char *dataIn, int numBytes);
|
static void CALLBACK ACMCallback(HACMSTREAM has, UINT uMsg, DWORD dwInstance, LPARAM lParam1, LPARAM lParam2);
|
private:
|
WAVEFORMATEX sourceFormat;
|
WAVEFORMATEX destFormat;
|
HACMSTREAM hACMStream;
|
ACMSTREAMHEADER acmStreamHeader[ACMTRANSFORMER_NUM_STREAMHEADER];
|
unsigned char sourceBuffer[ACMTRANSFORMER_NUM_STREAMHEADER][ACMTRANSFORMER_MAX_SOURCEBUFFERSIZE];
|
unsigned char destBuffer[ACMTRANSFORMER_NUM_STREAMHEADER][ACMTRANSFORMER_MAX_DESTBUFFERSIZE];
|
std::queue<unsigned char> outputQueue;
|
std::list<ACMSTREAMHEADER *> freeBuffers;
|
CRITICAL_SECTION outputQueueMutex;
|
CRITICAL_SECTION freeBuffersMutex;
|
CRITICAL_SECTION stateMutex;
|
CRITICAL_SECTION acmMutex;
|
CRITICAL_SECTION queryStateMutex;
|
HANDLE freeBuffersEvent;
|
HANDLE outputEnqueueEvent;
|
HANDLE outputDequeueEvent;
|
int outputDuration;
|
bool bRunning;
|
};
|
|
#endif // !defined(AFX_ACMTRANSFORMER_H__86E322E0_F705_4ED1_9572_2A65C9105F62__INCLUDED_)
|