From d9c6b1277a708f8a06dfb7d93dddfcebbd5ff03b Mon Sep 17 00:00:00 2001 From: Henri Herscher Date: Fri, 20 Jan 2006 22:49:33 +0000 Subject: First checkin git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@122 09dcff7a-b715-0410-9601-b79a96267cd0 --- orkbasecxx/Filter.h | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 orkbasecxx/Filter.h (limited to 'orkbasecxx/Filter.h') 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 +#include "ace/Singleton.h" +#include "AudioCapture.h" + +#ifdef WIN32 +#define __CDECL__ __cdecl +#else +#define __CDECL__ +#endif + +class Filter; + +typedef boost::shared_ptr 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 m_Filters; + + static FilterRegistry* m_singleton; +}; + +//typedef ACE_Singleton FilterRegistrySingleton; + +#endif -- cgit v1.2.3