summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenri Herscher <henri@oreka.org>2006-01-30 21:16:26 +0000
committerHenri Herscher <henri@oreka.org>2006-01-30 21:16:26 +0000
commitc42bf70a3f20ab6f15d0290382ca1c3c2df7efee (patch)
tree118c258bda9af5f1a11f9f854bc5a6bafa4191e4
parent9230b49a123560deb7faae20c69af710f4873b3e (diff)
Added ulaw filter
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@145 09dcff7a-b715-0410-9601-b79a96267cd0
-rw-r--r--orkbasecxx/Filter.cpp55
-rw-r--r--orkbasecxx/Filter.h17
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