waveaudiosink.h

来自「rtp在linux下的实现」· C头文件 代码 · 共 86 行

H
86
字号
// WaveAudioSink.h: interface for the WaveAudioSink class.
//
//////////////////////////////////////////////////////////////////////

#ifndef AFX_WAVEAUDIOSINK_H__82B1217D_28FD_4C8A_B8FA_ADF13478A7CF__INCLUDED_
#define AFX_WAVEAUDIOSINK_H__82B1217D_28FD_4C8A_B8FA_ADF13478A7CF__INCLUDED_

#ifdef WIN32
#include <windows.h>
#include <mmsystem.h>
#else
#include "vtypes.h"
typedef struct w_tag {
    char* lpData;
    int32_t dwBufferLength;
    int32_t dwBytesRecord;
    int32_t dwUser;
    int32_t dwFlags;
    int32_t dwLoops;
    struct w_tag* lpNext;
    int32_t res;
} VWaveHdr;

#define WAVEHDR VWaveHdr
#endif
#include <list>

#include "AudioSink.h"
#include "Parameters.h"

class WaveAudioSink : public AudioSink
{
public:
	WaveAudioSink();
	virtual ~WaveAudioSink();
	virtual int StartSink();
	virtual int StopSink();
#ifdef WIN32
	virtual int SinkThreadStarted(HANDLE sinkThreadHandle, DWORD sinkThreadID);
	virtual int SinkThreadStopped(HANDLE sinkThreadHandle, DWORD sinkThreadID);
#else
	virtual int SinkThreadStarted(vthread_t sinkThreadHandle, DWORD sinkThreadID);
	virtual int SinkThreadStopped(vthread_t sinkThreadHandle, DWORD sinkThreadID);
#endif

	int SetVolume(unsigned long volume);
	int SetDeviceID(unsigned int deviceID);
	unsigned int GetDeviceID();
	int SetFrameSize(unsigned long size);
	int SetNumFrames(unsigned long numFrames);
	int SetFormat(int waveFormatNumber);

protected:
	virtual int RenderAudioSamples(std::vector<std::pair<AudioSample *, AudioSource *> > &data);
	virtual int SetTraceLevel();
private:
	int BeginAudioRender();
	int EndAudioRender();
	int ResetAudioRender();
	WAVEHDR *GetBuffer();
#ifdef WIN32
	static void CALLBACK SpeakerCallback(HWAVEOUT hWaveOut, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2);
#endif

private:
	bool				enabled;
	bool				bRunning;
	unsigned long		frameSize;
	unsigned long		numFrames;
	unsigned int		waveoutDeviceID;
#ifdef WIN32
	HANDLE				dataEvent;
	HWAVEOUT			hWaveOut;
	HANDLE				pauseEvent;
#endif
	WAVEHDR				waveHdr[WAVESINK_MAX_WAVEHDR];
	WAVEFORMATEX		wfx;
	char				dataBuffer[WAVESINK_MAX_WAVEHDR][WAVESINK_MAX_WAVEHDR_SIZE];
	std::list<WAVEHDR*> freeBuffers;
	CRITICAL_SECTION	dataMutex;
	CRITICAL_SECTION	freeBuffersMutex;
	CRITICAL_SECTION	filterMutex;
};

#endif // !defined(AFX_WAVEAUDIOSINK_H__82B1217D_28FD_4C8A_B8FA_ADF13478A7CF__INCLUDED_)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?