EMIPLIB
|
00001 /* 00002 00003 This file is a part of EMIPLIB, the EDM Media over IP Library. 00004 00005 Copyright (C) 2006-2007 Hasselt University - Expertise Centre for 00006 Digital Media (EDM) (http://www.edm.uhasselt.be) 00007 00008 This library is free software; you can redistribute it and/or 00009 modify it under the terms of the GNU Lesser General Public 00010 License as published by the Free Software Foundation; either 00011 version 2.1 of the License, or (at your option) any later version. 00012 00013 This library is distributed in the hope that it will be useful, 00014 but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00016 Lesser General Public License for more details. 00017 00018 You should have received a copy of the GNU Lesser General Public 00019 License along with this library; if not, write to the Free Software 00020 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 00021 USA 00022 00023 */ 00024 00029 #ifndef MIPSPEEXECHOCANCELLER_H 00030 00031 #define MIPSPEEXECHOCANCELLER_H 00032 00033 #include "mipconfig.h" 00034 00035 #ifdef MIPCONFIG_SUPPORT_SPEEX 00036 00037 #include "mipcomponent.h" 00038 #include "miprawaudiomessage.h" 00039 #include <list> 00040 00060 class EMIPLIB_IMPORTEXPORT MIPSpeexEchoCanceller : public MIPComponent 00061 { 00062 public: 00063 MIPSpeexEchoCanceller(); 00064 ~MIPSpeexEchoCanceller(); 00065 00072 bool init(int sampRate, MIPTime interval = MIPTime(0.020), MIPTime bufferLength = MIPTime(0.100)); 00073 00075 bool destroy(); 00076 00078 MIPComponent *getOutputAnalyzer() { return m_pOutputAnalyzer; } 00079 00080 bool push(const MIPComponentChain &chain, int64_t iteration, MIPMessage *pMsg); 00081 bool pull(const MIPComponentChain &chain, int64_t iteration, MIPMessage **pMsg); 00082 private: 00083 void clearMessages(); 00084 00085 class OutputAnalyzer : public MIPComponent 00086 { 00087 public: 00088 OutputAnalyzer(void *pState, int sampRate, int numFrames) : MIPComponent("MIPSpeexEchoCanceller::OutputAnalyzer") 00089 { 00090 m_pSpeexEchoState = pState; 00091 m_sampRate = sampRate; 00092 m_numFrames = numFrames; 00093 } 00094 00095 bool push(const MIPComponentChain &chain, int64_t iteration, MIPMessage *pMsg); 00096 bool pull(const MIPComponentChain &chain, int64_t iteration, MIPMessage **pMsg); 00097 private: 00098 void *m_pSpeexEchoState; 00099 int m_sampRate; 00100 int m_numFrames; 00101 }; 00102 00103 OutputAnalyzer *m_pOutputAnalyzer; 00104 void *m_pSpeexEchoState; 00105 int m_sampRate; 00106 int m_numFrames; 00107 00108 std::list<MIPRaw16bitAudioMessage *> m_messages; 00109 std::list<MIPRaw16bitAudioMessage *>::const_iterator m_msgIt; 00110 int64_t m_prevIteration; 00111 }; 00112 00113 #endif // MIPCONFIG_SUPPORT_SPEEX 00114 00115 #endif // MIPSPEEXECHOCANCELLER_H 00116