summaryrefslogtreecommitdiff
path: root/orkbasecxx/Filter.cpp
diff options
context:
space:
mode:
authorHenri Herscher <henri@oreka.org>2006-01-20 22:49:33 +0000
committerHenri Herscher <henri@oreka.org>2006-01-20 22:49:33 +0000
commitd9c6b1277a708f8a06dfb7d93dddfcebbd5ff03b (patch)
treeddc049b894a5a1bb9471a9b94bad62d95868f741 /orkbasecxx/Filter.cpp
parente918c412e63769d1db155e1314bb384e092216ec (diff)
First checkin
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@122 09dcff7a-b715-0410-9601-b79a96267cd0
Diffstat (limited to 'orkbasecxx/Filter.cpp')
-rw-r--r--orkbasecxx/Filter.cpp143
1 files changed, 143 insertions, 0 deletions
diff --git a/orkbasecxx/Filter.cpp b/orkbasecxx/Filter.cpp
new file mode 100644
index 0000000..88e49f8
--- /dev/null
+++ b/orkbasecxx/Filter.cpp
@@ -0,0 +1,143 @@
+/*
+ * Oreka -- A media capture and retrieval platform
+ *
+ * Copyright (C) 2005, orecx LLC
+ *
+ * http://www.orecx.com
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License.
+ * Please refer to http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+#pragma warning( disable: 4786 ) // disables truncated symbols in browse-info warning
+
+#include "Filter.h"
+extern "C"
+{
+#include "g711.h"
+}
+void FilterRegistry::RegisterFilter(FilterRef& Filter)
+{
+ m_Filters.push_back(Filter);
+}
+
+
+FilterRef FilterRegistry::GetNewFilter(AudioEncodingEnum inputEncoding, AudioEncodingEnum outputEncoding)
+{
+ for(std::list<FilterRef>::iterator it = m_Filters.begin(); it!=m_Filters.end(); it++)
+ {
+ FilterRef Filter = *it;
+
+ if( Filter->GetInputAudioEncoding() == inputEncoding &&
+ Filter->GetOutputAudioEncoding() == outputEncoding )
+ {
+ return Filter->Instanciate();
+ }
+ }
+ return FilterRef(); // No filter found
+}
+
+
+FilterRef FilterRegistry::GetNewFilter(int rtpPayloadType)
+{
+ for(std::list<FilterRef>::iterator it = m_Filters.begin(); it!=m_Filters.end(); it++)
+ {
+ FilterRef Filter = *it;
+
+ if( Filter->GetInputRtpPayloadType() == rtpPayloadType )
+ {
+ return Filter->Instanciate();
+ }
+ }
+ return FilterRef(); // No filter found
+}
+
+
+FilterRef FilterRegistry::GetNewFilter(CStdString& filterName)
+{
+ for(std::list<FilterRef>::iterator it = m_Filters.begin(); it!=m_Filters.end(); it++)
+ {
+ FilterRef Filter = *it;
+
+ if( Filter->GetName().CompareNoCase(filterName) == 0 )
+ {
+ return Filter->Instanciate();
+ }
+ }
+ return FilterRef(); // No filter found
+}
+
+FilterRegistry* FilterRegistry::m_singleton = 0;
+
+FilterRegistry* FilterRegistry::instance()
+{
+ if(m_singleton == NULL)
+ {
+ m_singleton = new FilterRegistry();
+ }
+ return m_singleton;
+}
+
+//====================================================================
+
+int Filter::GetInputRtpPayloadType()
+{
+ // default: the filter does not accept any RTP payload type
+ return -1;
+}
+
+
+//====================================================================
+
+
+FilterRef AlawToPcmFilter::Instanciate()
+{
+ FilterRef Filter(new AlawToPcmFilter());
+ return Filter;
+}
+
+void AlawToPcmFilter::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)alaw2linear(inputBuffer[i]);
+ }
+
+}
+
+void AlawToPcmFilter::AudioChunkOut(AudioChunkRef& chunk)
+{
+ chunk = m_outputAudioChunk;
+}
+
+AudioEncodingEnum AlawToPcmFilter::GetInputAudioEncoding()
+{
+ return AlawAudio;
+}
+
+AudioEncodingEnum AlawToPcmFilter::GetOutputAudioEncoding()
+{
+ return PcmAudio;
+}
+
+CStdString AlawToPcmFilter::GetName()
+{
+ return "ALawToPcm";
+}
+
+int AlawToPcmFilter::GetInputRtpPayloadType()
+{
+ return 0x8;
+} \ No newline at end of file