⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 audiotransformer.cxx

📁 rtp在linux下的实现
💻 CXX
字号:
// AudioTransformer.cpp: implementation of the AudioTransformer class.
//
//////////////////////////////////////////////////////////////////////

#include "AudioTransformer.h"
#include "AudioSample.h"

#ifndef WIN32
#define EnterCriticalSection(x) (x)->lock()
#define LeaveCriticalSection(x) (x)->unlock()
#endif

using namespace std;

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

AudioTransformer::AudioTransformer()
{

}

AudioTransformer::~AudioTransformer()
{

}

int
AudioTransformer::StartTransform()
{
	tracer.tracef(EE, "StartTransform\n");
	tracer.tracef(EE, "~StartTransform\n");
	return 0;
}

int
AudioTransformer::StopTransform()
{
	tracer.tracef(EE, "StopTransform\n");
	tracer.tracef(EE, "~StopTransform\n");
	return 0;
}

int
AudioTransformer::RenderAudioSamples(std::vector<std::pair<AudioSample *, AudioSource *> > &data)
{
	tracer.tracef(DET, "RenderAudioSamples\n");
	AudioSample *audioSample;
	TransformAudioSamples(data, &audioSample);
	EnterCriticalSection(&audioSinksMutex);
	vector<AudioSink *>::iterator iter = audioSinks.begin();
	for (iter = audioSinks.begin(); iter != audioSinks.end(); iter++)
	{
		tracer.tracef(DET, "RenderAudioSamples : sending sample to 0x%x\n", *iter);
		SendAudioSample(audioSample, *iter);
	}
	LeaveCriticalSection(&audioSinksMutex);
	audioSample->Release();
	tracer.tracef(DET, "~RenderAudioSamples\n");
	return 0;
}

int
AudioTransformer::GenerateData(AudioSample **ppAudioSample)
{
	tracer.tracef(DET, "GenerateData\n");
	// get data from all sources
	inputData.clear();
	EnterCriticalSection(&audioSourcesMutex);
	vector<AudioSource *>::iterator iter = audioSources.begin();
	for (iter = audioSources.begin(); iter != audioSources.end(); iter++)
	{
		AudioSample *pAudioSample=0;
		tracer.tracef(DET, "GenerateData : calling GiveNextAudioSample\n");
		(*iter)->GiveNextAudioSample(&pAudioSample, this);
                if(pAudioSample)
		inputData.push_back(make_pair(pAudioSample, *iter));
	}
	LeaveCriticalSection(&audioSourcesMutex);
	// transform the data
	TransformAudioSamples(inputData, ppAudioSample);
	// release all the input samples
	// (since they were obtained by GiveNextAudioSample, they will not be released by the corresponding source
	for (int i = 0; i < inputData.size(); i++)
	{
		AudioSample *sample = (inputData[i]).first;
		sample->Release();
	}
	tracer.tracef(DET, "~GenerateData\n");
	return 0;
}

int
AudioTransformer::TransformAudioSamples(std::vector<std::pair<AudioSample *, AudioSource *> > &data, AudioSample **ppAudioSample)
{
	tracer.tracef(ERR, "AudioTransformer : ERROR : pure virtual function call !!!\n");
	return 0;
}

⌨️ 快捷键说明

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