summaryrefslogtreecommitdiff
path: root/orkbasecxx/Filter.h
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.h
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.h')
-rw-r--r--orkbasecxx/Filter.h85
1 files changed, 85 insertions, 0 deletions
diff --git a/orkbasecxx/Filter.h b/orkbasecxx/Filter.h
new file mode 100644
index 0000000..379af59
--- /dev/null
+++ b/orkbasecxx/Filter.h
@@ -0,0 +1,85 @@
+/*
+ * 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
+ *
+ */
+#ifndef __FILTER_H__
+#define __FILTER_H__
+
+#include <list>
+#include "ace/Singleton.h"
+#include "AudioCapture.h"
+
+#ifdef WIN32
+#define __CDECL__ __cdecl
+#else
+#define __CDECL__
+#endif
+
+class Filter;
+
+typedef boost::shared_ptr<Filter> FilterRef;
+
+/** Filter Interface
+ * a filter is a black box that takes media chunks as an input and produces media chunks as an output
+ * it can be translating between two encodings (codec) or just processing the signal
+ */
+class DLL_IMPORT_EXPORT Filter
+{
+public:
+ virtual FilterRef __CDECL__ Instanciate() = 0;
+ virtual void __CDECL__ AudioChunkIn(AudioChunkRef& chunk) = 0;
+ virtual void __CDECL__ AudioChunkOut(AudioChunkRef& chunk) = 0;
+ virtual AudioEncodingEnum __CDECL__ GetInputAudioEncoding() = 0;
+ virtual AudioEncodingEnum __CDECL__ GetOutputAudioEncoding() = 0;
+ virtual CStdString __CDECL__ GetName() = 0;
+ /** Input RTP payload time - this is overridden if the filter is a codec that accepts a certain
+ RTP payload type such as GSM. if not, returns -1 by default */
+ virtual int __CDECL__ GetInputRtpPayloadType();
+};
+//===================================================================
+
+class DLL_IMPORT_EXPORT AlawToPcmFilter : 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
+{
+public:
+ static FilterRegistry* instance();
+ void RegisterFilter(FilterRef& Filter);
+ FilterRef GetNewFilter(AudioEncodingEnum inputEncoding, AudioEncodingEnum outputEncoding);
+ FilterRef GetNewFilter(int rtpPayloadType);
+ FilterRef GetNewFilter(CStdString& filterName);
+
+private:
+ std::list<FilterRef> m_Filters;
+
+ static FilterRegistry* m_singleton;
+};
+
+//typedef ACE_Singleton<FilterRegistry, ACE_Thread_Mutex> FilterRegistrySingleton;
+
+#endif