diff --git a/airtalgo/Algo.cpp b/airtalgo/Algo.cpp index e40daea..59b1b99 100644 --- a/airtalgo/Algo.cpp +++ b/airtalgo/Algo.cpp @@ -14,12 +14,16 @@ airtalgo::Algo::Algo() : m_outputData(), m_formatSize(0), m_needProcess(false) { + AIRTALGO_VERBOSE("CREATE ALGO"); // set notification callback : m_input.setCallback(std::bind(&airtalgo::Algo::configurationChange, this)); m_output.setCallback(std::bind(&airtalgo::Algo::configurationChange, this)); // first configure ==> update the internal parameters configurationChange(); } +airtalgo::Algo::~Algo() { + AIRTALGO_VERBOSE("Remove ALGO"); +} void airtalgo::Algo::configurationChange() { m_needProcess = false; @@ -48,6 +52,7 @@ void airtalgo::Algo::configurationChange() { size_t airtalgo::Algo::needInputData(size_t _output) { size_t input = _output; + /* NOT good at all ... if (m_input.getFormat() != m_output.getFormat()) { int32_t inputSize = 3; switch (m_input.getFormat()) { @@ -67,10 +72,13 @@ size_t airtalgo::Algo::needInputData(size_t _output) { input /= m_formatSize; } } + */ + /* if (m_input.getMap().size() != m_output.getMap().size()) { input *= m_input.getMap().size(); input /= m_output.getMap().size(); } + */ if (m_input.getFrequency() != m_output.getFrequency()) { input *= m_input.getFrequency(); diff --git a/airtalgo/Algo.h b/airtalgo/Algo.h index d58f53c..741b4f1 100644 --- a/airtalgo/Algo.h +++ b/airtalgo/Algo.h @@ -113,7 +113,7 @@ namespace airtalgo{ protected: std::function m_ioChangeFunctor; //!< function pointer on the upper class void configurationChange() { - if (m_ioChangeFunctor != NULL) { + if (m_ioChangeFunctor != nullptr) { m_ioChangeFunctor(); } } @@ -140,7 +140,7 @@ namespace airtalgo{ /** * @brief Destructor */ - virtual ~Algo() {}; + virtual ~Algo(); protected: bool m_needProcess; //!< if no change, then no need to process, just forward buffer... IOFormatInterface m_input; //!< Input audio property diff --git a/airtalgo/ChannelReorder.cpp b/airtalgo/ChannelReorder.cpp index de6e516..890cc3a 100644 --- a/airtalgo/ChannelReorder.cpp +++ b/airtalgo/ChannelReorder.cpp @@ -16,6 +16,10 @@ airtalgo::ChannelReorder::ChannelReorder() { } +airtalgo::ChannelReorder::~ChannelReorder() { + AIRTALGO_INFO("Remove ChannelReorder"); +} + void airtalgo::ChannelReorder::configurationChange() { airtalgo::autoLogInOut("ChannelReorder (config)"); @@ -62,7 +66,7 @@ bool airtalgo::ChannelReorder::process(std::chrono::system_clock::time_point& _t default: case format_int16: { - AIRTALGO_INFO("convert " << m_input.getMap() << " ==> " << m_output.getMap()); + AIRTALGO_VERBOSE("convert " << m_input.getMap() << " ==> " << m_output.getMap() << " format=" << int32_t(m_formatSize)); int16_t* in = static_cast(_input); int16_t* out = static_cast(_output); for (size_t kkk=0; kkk " << kkk); if (convertId == -1) { for (size_t iii=0; iii<_outputNbChunk; ++iii) { out[iii*m_output.getMap().size()+kkk] = 0; @@ -94,7 +99,7 @@ bool airtalgo::ChannelReorder::process(std::chrono::system_clock::time_point& _t case format_int32: case format_float: { - AIRTALGO_INFO("convert (2) " << m_input.getMap() << " ==> " << m_output.getMap()); + AIRTALGO_VERBOSE("convert (2) " << m_input.getMap() << " ==> " << m_output.getMap()); uint32_t* in = static_cast(_input); uint32_t* out = static_cast(_output); for (size_t kkk=0; kkk m_data; public: /** * @brief Constructor @@ -36,7 +35,7 @@ namespace airtalgo { /** * @brief Destructor */ - virtual ~EndPointCallback() {}; + virtual ~EndPointCallback(); virtual void configurationChange(); virtual bool process(std::chrono::system_clock::time_point& _time, void* _input, diff --git a/airtalgo/EndPointRead.cpp b/airtalgo/EndPointRead.cpp index 9dc56c9..ee11510 100644 --- a/airtalgo/EndPointRead.cpp +++ b/airtalgo/EndPointRead.cpp @@ -14,6 +14,10 @@ airtalgo::EndPointRead::EndPointRead() { } +airtalgo::EndPointRead::~EndPointRead() { + AIRTALGO_INFO("Remove EndPointRead"); +} + void airtalgo::EndPointRead::configurationChange() { airtalgo::EndPoint::configurationChange(); diff --git a/airtalgo/EndPointRead.h b/airtalgo/EndPointRead.h index 90b8af1..d698273 100644 --- a/airtalgo/EndPointRead.h +++ b/airtalgo/EndPointRead.h @@ -19,7 +19,7 @@ namespace airtalgo{ /** * @brief Destructor */ - virtual ~EndPointRead() {}; + virtual ~EndPointRead(); virtual void configurationChange(); virtual bool process(std::chrono::system_clock::time_point& _time, void* _input, diff --git a/airtalgo/EndPointWrite.cpp b/airtalgo/EndPointWrite.cpp index b20f25b..911c876 100644 --- a/airtalgo/EndPointWrite.cpp +++ b/airtalgo/EndPointWrite.cpp @@ -16,6 +16,11 @@ airtalgo::EndPointWrite::EndPointWrite() : } +airtalgo::EndPointWrite::~EndPointWrite() { + AIRTALGO_INFO("Remove EndPointWrite"); + +} + void airtalgo::EndPointWrite::configurationChange() { airtalgo::EndPoint::configurationChange(); m_needProcess = true; diff --git a/airtalgo/EndPointWrite.h b/airtalgo/EndPointWrite.h index 5905ecb..dcb2a38 100644 --- a/airtalgo/EndPointWrite.h +++ b/airtalgo/EndPointWrite.h @@ -29,7 +29,7 @@ namespace airtalgo{ /** * @brief Destructor */ - virtual ~EndPointWrite() {}; + virtual ~EndPointWrite(); virtual void configurationChange(); virtual bool process(std::chrono::system_clock::time_point& _time, void* _input, diff --git a/airtalgo/FormatUpdate.cpp b/airtalgo/FormatUpdate.cpp index 04b026b..189554d 100644 --- a/airtalgo/FormatUpdate.cpp +++ b/airtalgo/FormatUpdate.cpp @@ -103,7 +103,7 @@ static void convert__float__to__int16(void* _input, void* _output, size_t _nbSam float value = in[iii] * static_cast(INT16_MAX); value = std::min(std::max(static_cast(INT16_MIN), value), static_cast(INT16_MAX)); out[iii] = static_cast(value); - //AIRTALGO_VERBOSE(" in=" << in[iii] << " out=" << out[iii]); + //AIRTALGO_DEBUG(iii << " in=" << in[iii] << " out=" << out[iii]); } } static void convert__float__to__int16_on_int32(void* _input, void* _output, size_t _nbSample) { @@ -130,6 +130,9 @@ airtalgo::FormatUpdate::FormatUpdate() : m_functionConvert(NULL) { } +airtalgo::FormatUpdate::~FormatUpdate() { + AIRTALGO_INFO("Remove FormatUpdate"); +} void airtalgo::FormatUpdate::configurationChange() { airtalgo::Algo::configurationChange(); diff --git a/airtalgo/FormatUpdate.h b/airtalgo/FormatUpdate.h index 3d149bf..0786996 100644 --- a/airtalgo/FormatUpdate.h +++ b/airtalgo/FormatUpdate.h @@ -18,7 +18,7 @@ namespace airtalgo { /** * @brief Destructor */ - virtual ~FormatUpdate() {}; + virtual ~FormatUpdate(); protected: virtual void configurationChange(); public: diff --git a/airtalgo/Process.cpp b/airtalgo/Process.cpp index 44a23a5..268829a 100644 --- a/airtalgo/Process.cpp +++ b/airtalgo/Process.cpp @@ -20,6 +20,11 @@ airtalgo::Process::Process() { } +airtalgo::Process::~Process() { + for (auto &it : m_listAlgo) { + it.reset(); + } +} bool airtalgo::Process::push(std::chrono::system_clock::time_point& _time, void* _data, @@ -63,7 +68,7 @@ bool airtalgo::Process::process(std::chrono::system_clock::time_point& _time, _outNbChunk = _inNbChunk; return true; } - AIRTALGO_VERBOSE(" process : " << m_listAlgo.size() << " algos"); + AIRTALGO_VERBOSE(" process : " << m_listAlgo.size() << " algos nbChunk=" << _outNbChunk); for (size_t iii=0; iii can not resample" << std::endl; + AIRTALGO_WARNING("SPEEX DSP lib not accessible ==> can not resample"); m_needProcess = false; #endif } @@ -86,18 +87,18 @@ bool airtalgo::Resampler::process(std::chrono::system_clock::time_point& _time, return false; } #ifdef HAVE_SPEEX_DSP_RESAMPLE - float nbInputTime = static_cast(_inputNbChunk)/m_input.getFrequency(); + float nbInputTime = float(_inputNbChunk)/m_input.getFrequency(); float nbOutputSample = nbInputTime*m_output.getFrequency(); // we add 10% of the buffer size to have all the time enought data in the output to proceed all the input data... - _outputNbChunk = static_cast(nbOutputSample*1.5f); - AIRTALGO_VERBOSE(" freq in=" << m_inputFrequency << " out=" << m_outputFrequency); + _outputNbChunk = size_t(nbOutputSample*1.5f); + AIRTALGO_VERBOSE(" freq in=" << m_input.getFrequency() << " out=" << m_output.getFrequency()); AIRTALGO_VERBOSE(" Frame duration=" << nbInputTime); AIRTALGO_VERBOSE(" nbInput chunk=" << _inputNbChunk << " nbOutputChunk=" << nbOutputSample); - m_outputData.resize(_outputNbChunk*m_input.getMap().size()*m_formatSize); + m_outputData.resize(_outputNbChunk*m_output.getMap().size()*m_formatSize); _output = &(m_outputData[0]); if (m_speexResampler == nullptr) { - std::cout << " No speex resampler" << std::endl; + AIRTALGO_ERROR(" No speex resampler"); return false; } uint32_t nbChunkInput = _inputNbChunk; diff --git a/lutin_airtalgo.py b/lutin_airtalgo.py index c022739..b82bcc6 100644 --- a/lutin_airtalgo.py +++ b/lutin_airtalgo.py @@ -26,8 +26,9 @@ def create(target): 'airtalgo/Resampler.cpp' ]) - - myModule.add_module_depend(['etk']) + # TODO: myModule.add_optionnal_module_depend('speexdsp', "HAVE_SPEEX_DSP_RESAMPLE") + myModule.compile_flags_CC("-DHAVE_SPEEX_DSP_RESAMPLE") + myModule.add_module_depend(['etk', 'speexdsp']) myModule.add_export_path(tools.get_current_path(__file__)) # add the currrent module at the