diff options
-rw-r--r-- | orkbasecxx/Filter.cpp | 55 | ||||
-rw-r--r-- | orkbasecxx/Filter.h | 17 |
2 files changed, 72 insertions, 0 deletions
diff --git a/orkbasecxx/Filter.cpp b/orkbasecxx/Filter.cpp index 4da3711..b1c0d4c 100644 --- a/orkbasecxx/Filter.cpp +++ b/orkbasecxx/Filter.cpp @@ -141,3 +141,58 @@ int AlawToPcmFilter::GetInputRtpPayloadType() { return 0x8; } + + +//==================================================================== + + +FilterRef UlawToPcmFilter::Instanciate() +{ + FilterRef Filter(new UlawToPcmFilter()); + return Filter; +} + +void UlawToPcmFilter::AudioChunkIn(AudioChunkRef& inputAudioChunk) +{ + // Create output buffer + m_outputAudioChunk.reset(new AudioChunk()); + AudioChunkDetails outputDetails = *inputAudioChunk->GetDetails(); // pass through all details + outputDetails.m_rtpPayloadType = -1; // and override the ones that this filter changes + outputDetails.m_encoding = PcmAudio; + + int numSamples = inputAudioChunk->GetNumSamples(); + short* outputBuffer = (short*)m_outputAudioChunk->CreateBuffer(numSamples*2, outputDetails); + char* inputBuffer = (char*)inputAudioChunk->m_pBuffer; + + + for(int i=0; i<numSamples; i++) + { + outputBuffer[i] = (short)ulaw2linear(inputBuffer[i]); + } + +} + +void UlawToPcmFilter::AudioChunkOut(AudioChunkRef& chunk) +{ + chunk = m_outputAudioChunk; +} + +AudioEncodingEnum UlawToPcmFilter::GetInputAudioEncoding() +{ + return UlawAudio; +} + +AudioEncodingEnum UlawToPcmFilter::GetOutputAudioEncoding() +{ + return PcmAudio; +} + +CStdString UlawToPcmFilter::GetName() +{ + return "UlawToPcm"; +} + +int UlawToPcmFilter::GetInputRtpPayloadType() +{ + return 0x0; +}
\ No newline at end of file diff --git a/orkbasecxx/Filter.h b/orkbasecxx/Filter.h index 379af59..3002e7f 100644 --- a/orkbasecxx/Filter.h +++ b/orkbasecxx/Filter.h @@ -63,6 +63,23 @@ private: //=================================================================== +class DLL_IMPORT_EXPORT UlawToPcmFilter : public Filter +{ +public: + FilterRef __CDECL__ Instanciate(); + void __CDECL__ AudioChunkIn(AudioChunkRef& chunk); + void __CDECL__ AudioChunkOut(AudioChunkRef& chunk); + AudioEncodingEnum __CDECL__ GetInputAudioEncoding(); + AudioEncodingEnum __CDECL__ GetOutputAudioEncoding(); + CStdString __CDECL__ GetName(); + int __CDECL__ GetInputRtpPayloadType(); + +private: + AudioChunkRef m_outputAudioChunk; +}; + +//=================================================================== + /** Filter Registry */ class DLL_IMPORT_EXPORT FilterRegistry |