// G7112PCMTransformer.cpp: implementation of the G7112PCMTransformer class. // ////////////////////////////////////////////////////////////////////// #include "G7112PCMTransformer.h" #include "AudioSampleManager.h" #include "RTPPacket.h" using namespace std; ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// G7112PCMTransformer::G7112PCMTransformer() { char subFacilityName[100]; sprintf(subFacilityName, "G7112PCMTransformer:%x", this); tracer.SetSubFacilityName(subFacilityName); SetTraceLevel(); } G7112PCMTransformer::~G7112PCMTransformer() { } int G7112PCMTransformer::SetTraceLevel() { long SystemMask = 0; if ((SystemMask = GetRegKeyLong(HKEY_CURRENT_USER, "Software\\Cisco Systems\\MTC\\Tracing", "AllComponents", 0x0)) == 0) { SystemMask = GetRegKeyLong(HKEY_CURRENT_USER, "Software\\Cisco Systems\\MTC\\Tracing", "G7112PCMTransformer", 0x100000); } tracer.SetSystemMask(SystemMask); return 0; } int G7112PCMTransformer::SetALaw() { g711Codec.SetALaw(); return 0; } int G7112PCMTransformer::SetULaw() { g711Codec.SetULaw(); return 0; } int G7112PCMTransformer::TransformAudioSamples(std::vector > &data, AudioSample **ppAudioSample) { int result = 0; AudioSample *outSample = NULL; AudioSample *inSample = NULL; if (data.size() > 0) { inSample = data[0].first; } if (inSample) { result = AudioSampleManager::GetInstance()->GetAudioSample(&outSample, this); if (outSample) { outSample->SetFormat(WaveFormat::GetWaveFormat(WaveFormat_PCM_16_8_1)); if (inSample->RTPHeader()) { outSample->SetRTPHeader((inSample->RTPHeader())->CloneHeader()); } if (inSample->DataSize() <= 0) { outSample->SetSilenceDuration(inSample->GetSilenceDuration()); } else { int outputSize = outSample->BufferSize(); result = g711Codec.Decode(inSample->Data(), inSample->DataSize(), outSample->Data(), &outputSize); outSample->SetDataSize(outputSize); } } else { result = -10; } } *ppAudioSample = outSample; return result; }