[DEBUG] correct some algo think error

This commit is contained in:
Edouard DUPIN 2015-01-28 22:07:11 +01:00
parent 6ab88e627c
commit 65a999c921
16 changed files with 61 additions and 25 deletions

View File

@ -14,12 +14,16 @@ airtalgo::Algo::Algo() :
m_outputData(), m_outputData(),
m_formatSize(0), m_formatSize(0),
m_needProcess(false) { m_needProcess(false) {
AIRTALGO_VERBOSE("CREATE ALGO");
// set notification callback : // set notification callback :
m_input.setCallback(std::bind(&airtalgo::Algo::configurationChange, this)); m_input.setCallback(std::bind(&airtalgo::Algo::configurationChange, this));
m_output.setCallback(std::bind(&airtalgo::Algo::configurationChange, this)); m_output.setCallback(std::bind(&airtalgo::Algo::configurationChange, this));
// first configure ==> update the internal parameters // first configure ==> update the internal parameters
configurationChange(); configurationChange();
} }
airtalgo::Algo::~Algo() {
AIRTALGO_VERBOSE("Remove ALGO");
}
void airtalgo::Algo::configurationChange() { void airtalgo::Algo::configurationChange() {
m_needProcess = false; m_needProcess = false;
@ -48,6 +52,7 @@ void airtalgo::Algo::configurationChange() {
size_t airtalgo::Algo::needInputData(size_t _output) { size_t airtalgo::Algo::needInputData(size_t _output) {
size_t input = _output; size_t input = _output;
/* NOT good at all ...
if (m_input.getFormat() != m_output.getFormat()) { if (m_input.getFormat() != m_output.getFormat()) {
int32_t inputSize = 3; int32_t inputSize = 3;
switch (m_input.getFormat()) { switch (m_input.getFormat()) {
@ -67,10 +72,13 @@ size_t airtalgo::Algo::needInputData(size_t _output) {
input /= m_formatSize; input /= m_formatSize;
} }
} }
*/
/*
if (m_input.getMap().size() != m_output.getMap().size()) { if (m_input.getMap().size() != m_output.getMap().size()) {
input *= m_input.getMap().size(); input *= m_input.getMap().size();
input /= m_output.getMap().size(); input /= m_output.getMap().size();
} }
*/
if (m_input.getFrequency() != m_output.getFrequency()) { if (m_input.getFrequency() != m_output.getFrequency()) {
input *= m_input.getFrequency(); input *= m_input.getFrequency();

View File

@ -113,7 +113,7 @@ namespace airtalgo{
protected: protected:
std::function<void()> m_ioChangeFunctor; //!< function pointer on the upper class std::function<void()> m_ioChangeFunctor; //!< function pointer on the upper class
void configurationChange() { void configurationChange() {
if (m_ioChangeFunctor != NULL) { if (m_ioChangeFunctor != nullptr) {
m_ioChangeFunctor(); m_ioChangeFunctor();
} }
} }
@ -140,7 +140,7 @@ namespace airtalgo{
/** /**
* @brief Destructor * @brief Destructor
*/ */
virtual ~Algo() {}; virtual ~Algo();
protected: protected:
bool m_needProcess; //!< if no change, then no need to process, just forward buffer... bool m_needProcess; //!< if no change, then no need to process, just forward buffer...
IOFormatInterface m_input; //!< Input audio property IOFormatInterface m_input; //!< Input audio property

View File

@ -16,6 +16,10 @@
airtalgo::ChannelReorder::ChannelReorder() { airtalgo::ChannelReorder::ChannelReorder() {
} }
airtalgo::ChannelReorder::~ChannelReorder() {
AIRTALGO_INFO("Remove ChannelReorder");
}
void airtalgo::ChannelReorder::configurationChange() { void airtalgo::ChannelReorder::configurationChange() {
airtalgo::autoLogInOut("ChannelReorder (config)"); airtalgo::autoLogInOut("ChannelReorder (config)");
@ -62,7 +66,7 @@ bool airtalgo::ChannelReorder::process(std::chrono::system_clock::time_point& _t
default: default:
case format_int16: 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<int16_t*>(_input); int16_t* in = static_cast<int16_t*>(_input);
int16_t* out = static_cast<int16_t*>(_output); int16_t* out = static_cast<int16_t*>(_output);
for (size_t kkk=0; kkk<m_output.getMap().size(); ++kkk) { for (size_t kkk=0; kkk<m_output.getMap().size(); ++kkk) {
@ -78,6 +82,7 @@ bool airtalgo::ChannelReorder::process(std::chrono::system_clock::time_point& _t
} }
} }
} }
AIRTALGO_VERBOSE(" " << convertId << " ==> " << kkk);
if (convertId == -1) { if (convertId == -1) {
for (size_t iii=0; iii<_outputNbChunk; ++iii) { for (size_t iii=0; iii<_outputNbChunk; ++iii) {
out[iii*m_output.getMap().size()+kkk] = 0; 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_int32:
case format_float: 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<uint32_t*>(_input); uint32_t* in = static_cast<uint32_t*>(_input);
uint32_t* out = static_cast<uint32_t*>(_output); uint32_t* out = static_cast<uint32_t*>(_output);
for (size_t kkk=0; kkk<m_output.getMap().size(); ++kkk) { for (size_t kkk=0; kkk<m_output.getMap().size(); ++kkk) {

View File

@ -19,7 +19,7 @@ namespace airtalgo{
/** /**
* @brief Destructor * @brief Destructor
*/ */
virtual ~ChannelReorder() {}; virtual ~ChannelReorder();
protected: protected:
virtual void configurationChange(); virtual void configurationChange();
public: public:

View File

@ -20,10 +20,14 @@ airtalgo::EndPointCallback::EndPointCallback(haveNewDataFunction _callback) :
m_inputFunction(_callback) { m_inputFunction(_callback) {
} }
airtalgo::EndPointCallback::~EndPointCallback() {
AIRTALGO_INFO("Remove EndPointCallback");
}
void airtalgo::EndPointCallback::configurationChange() { void airtalgo::EndPointCallback::configurationChange() {
airtalgo::EndPoint::configurationChange(); airtalgo::EndPoint::configurationChange();
AIRTALGO_INFO("update : format=" << m_output.getFormat() << " map=" << m_input.getMap() << " freq=" << m_input.getFrequency() << " size=" << int32_t(m_formatSize));
m_needProcess = true; m_needProcess = true;
} }
@ -38,7 +42,7 @@ bool airtalgo::EndPointCallback::process(std::chrono::system_clock::time_point&
// update buffer size ... // update buffer size ...
m_outputData.resize(_inputNbChunk*m_output.getMap().size()*m_formatSize); m_outputData.resize(_inputNbChunk*m_output.getMap().size()*m_formatSize);
// call user // call user
AIRTALGO_VERBOSE("call user get I16*" << _inputNbChunk << "*" << m_output.getMap().size() << " " << m_output.getMap()); AIRTALGO_VERBOSE("call user get " << _inputNbChunk << "*" << m_output.getMap().size() << " map=" << m_output.getMap() << " datasize=" << int32_t(m_formatSize));
m_outputFunction(_time, m_outputFunction(_time,
_inputNbChunk, _inputNbChunk,
m_output.getMap(), m_output.getMap(),
@ -54,7 +58,7 @@ bool airtalgo::EndPointCallback::process(std::chrono::system_clock::time_point&
} }
if (m_inputFunction != nullptr) { if (m_inputFunction != nullptr) {
// Call user ... // Call user ...
AIRTALGO_VERBOSE("call user set I16*" << _inputNbChunk << "*" << m_input.getMap().size()); AIRTALGO_VERBOSE("call user set " << _inputNbChunk << "*" << m_input.getMap().size());
m_inputFunction(_time, m_inputFunction(_time,
_inputNbChunk, _inputNbChunk,
m_input.getMap(), m_input.getMap(),

View File

@ -26,7 +26,6 @@ namespace airtalgo {
private: private:
needDataFunction m_outputFunction; needDataFunction m_outputFunction;
haveNewDataFunction m_inputFunction; haveNewDataFunction m_inputFunction;
std::vector<uint8_t> m_data;
public: public:
/** /**
* @brief Constructor * @brief Constructor
@ -36,7 +35,7 @@ namespace airtalgo {
/** /**
* @brief Destructor * @brief Destructor
*/ */
virtual ~EndPointCallback() {}; virtual ~EndPointCallback();
virtual void configurationChange(); virtual void configurationChange();
virtual bool process(std::chrono::system_clock::time_point& _time, virtual bool process(std::chrono::system_clock::time_point& _time,
void* _input, void* _input,

View File

@ -14,6 +14,10 @@ airtalgo::EndPointRead::EndPointRead() {
} }
airtalgo::EndPointRead::~EndPointRead() {
AIRTALGO_INFO("Remove EndPointRead");
}
void airtalgo::EndPointRead::configurationChange() { void airtalgo::EndPointRead::configurationChange() {
airtalgo::EndPoint::configurationChange(); airtalgo::EndPoint::configurationChange();

View File

@ -19,7 +19,7 @@ namespace airtalgo{
/** /**
* @brief Destructor * @brief Destructor
*/ */
virtual ~EndPointRead() {}; virtual ~EndPointRead();
virtual void configurationChange(); virtual void configurationChange();
virtual bool process(std::chrono::system_clock::time_point& _time, virtual bool process(std::chrono::system_clock::time_point& _time,
void* _input, void* _input,

View File

@ -16,6 +16,11 @@ airtalgo::EndPointWrite::EndPointWrite() :
} }
airtalgo::EndPointWrite::~EndPointWrite() {
AIRTALGO_INFO("Remove EndPointWrite");
}
void airtalgo::EndPointWrite::configurationChange() { void airtalgo::EndPointWrite::configurationChange() {
airtalgo::EndPoint::configurationChange(); airtalgo::EndPoint::configurationChange();
m_needProcess = true; m_needProcess = true;

View File

@ -29,7 +29,7 @@ namespace airtalgo{
/** /**
* @brief Destructor * @brief Destructor
*/ */
virtual ~EndPointWrite() {}; virtual ~EndPointWrite();
virtual void configurationChange(); virtual void configurationChange();
virtual bool process(std::chrono::system_clock::time_point& _time, virtual bool process(std::chrono::system_clock::time_point& _time,
void* _input, void* _input,

View File

@ -103,7 +103,7 @@ static void convert__float__to__int16(void* _input, void* _output, size_t _nbSam
float value = in[iii] * static_cast<float>(INT16_MAX); float value = in[iii] * static_cast<float>(INT16_MAX);
value = std::min(std::max(static_cast<float>(INT16_MIN), value), static_cast<float>(INT16_MAX)); value = std::min(std::max(static_cast<float>(INT16_MIN), value), static_cast<float>(INT16_MAX));
out[iii] = static_cast<int16_t>(value); out[iii] = static_cast<int16_t>(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) { 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) { m_functionConvert(NULL) {
} }
airtalgo::FormatUpdate::~FormatUpdate() {
AIRTALGO_INFO("Remove FormatUpdate");
}
void airtalgo::FormatUpdate::configurationChange() { void airtalgo::FormatUpdate::configurationChange() {
airtalgo::Algo::configurationChange(); airtalgo::Algo::configurationChange();

View File

@ -18,7 +18,7 @@ namespace airtalgo {
/** /**
* @brief Destructor * @brief Destructor
*/ */
virtual ~FormatUpdate() {}; virtual ~FormatUpdate();
protected: protected:
virtual void configurationChange(); virtual void configurationChange();
public: public:

View File

@ -20,6 +20,11 @@
airtalgo::Process::Process() { airtalgo::Process::Process() {
} }
airtalgo::Process::~Process() {
for (auto &it : m_listAlgo) {
it.reset();
}
}
bool airtalgo::Process::push(std::chrono::system_clock::time_point& _time, bool airtalgo::Process::push(std::chrono::system_clock::time_point& _time,
void* _data, void* _data,
@ -63,7 +68,7 @@ bool airtalgo::Process::process(std::chrono::system_clock::time_point& _time,
_outNbChunk = _inNbChunk; _outNbChunk = _inNbChunk;
return true; return true;
} }
AIRTALGO_VERBOSE(" process : " << m_listAlgo.size() << " algos"); AIRTALGO_VERBOSE(" process : " << m_listAlgo.size() << " algos nbChunk=" << _outNbChunk);
for (size_t iii=0; iii<m_listAlgo.size(); ++iii) { for (size_t iii=0; iii<m_listAlgo.size(); ++iii) {
//std::cout << " Algo " << iii+1 << "/" << m_listAlgo.size() << std::endl; //std::cout << " Algo " << iii+1 << "/" << m_listAlgo.size() << std::endl;
if (m_listAlgo[iii] != nullptr) { if (m_listAlgo[iii] != nullptr) {

View File

@ -21,6 +21,7 @@ namespace airtalgo{
class Process { class Process {
public: public:
Process(); Process();
virtual ~Process();
public: public:
/** /**
* @brief Push data in the algo stream. * @brief Push data in the algo stream.

View File

@ -20,6 +20,7 @@ airtalgo::Resampler::Resampler() :
} }
airtalgo::Resampler::~Resampler() { airtalgo::Resampler::~Resampler() {
AIRTALGO_INFO("Remove Resampler");
#ifdef HAVE_SPEEX_DSP_RESAMPLE #ifdef HAVE_SPEEX_DSP_RESAMPLE
if (m_speexResampler != nullptr) { if (m_speexResampler != nullptr) {
speex_resampler_destroy(m_speexResampler); speex_resampler_destroy(m_speexResampler);
@ -54,12 +55,12 @@ void airtalgo::Resampler::configurationChange() {
m_speexResampler = nullptr; m_speexResampler = nullptr;
} }
int err = 0; int err = 0;
m_speexResampler = speex_resampler_init(m_outputMap.size(), m_speexResampler = speex_resampler_init(m_output.getMap().size(),
m_inputFrequency, m_input.getFrequency(),
m_outputFrequency, m_output.getFrequency(),
10, &err); 10, &err);
#else #else
std::cerr << "SPEEX DSP lib not accessible ==> can not resample" << std::endl; AIRTALGO_WARNING("SPEEX DSP lib not accessible ==> can not resample");
m_needProcess = false; m_needProcess = false;
#endif #endif
} }
@ -86,18 +87,18 @@ bool airtalgo::Resampler::process(std::chrono::system_clock::time_point& _time,
return false; return false;
} }
#ifdef HAVE_SPEEX_DSP_RESAMPLE #ifdef HAVE_SPEEX_DSP_RESAMPLE
float nbInputTime = static_cast<float>(_inputNbChunk)/m_input.getFrequency(); float nbInputTime = float(_inputNbChunk)/m_input.getFrequency();
float nbOutputSample = nbInputTime*m_output.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... // 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<size_t>(nbOutputSample*1.5f); _outputNbChunk = size_t(nbOutputSample*1.5f);
AIRTALGO_VERBOSE(" freq in=" << m_inputFrequency << " out=" << m_outputFrequency); AIRTALGO_VERBOSE(" freq in=" << m_input.getFrequency() << " out=" << m_output.getFrequency());
AIRTALGO_VERBOSE(" Frame duration=" << nbInputTime); AIRTALGO_VERBOSE(" Frame duration=" << nbInputTime);
AIRTALGO_VERBOSE(" nbInput chunk=" << _inputNbChunk << " nbOutputChunk=" << nbOutputSample); 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]); _output = &(m_outputData[0]);
if (m_speexResampler == nullptr) { if (m_speexResampler == nullptr) {
std::cout << " No speex resampler" << std::endl; AIRTALGO_ERROR(" No speex resampler");
return false; return false;
} }
uint32_t nbChunkInput = _inputNbChunk; uint32_t nbChunkInput = _inputNbChunk;

View File

@ -26,8 +26,9 @@ def create(target):
'airtalgo/Resampler.cpp' 'airtalgo/Resampler.cpp'
]) ])
# TODO: myModule.add_optionnal_module_depend('speexdsp', "HAVE_SPEEX_DSP_RESAMPLE")
myModule.add_module_depend(['etk']) myModule.compile_flags_CC("-DHAVE_SPEEX_DSP_RESAMPLE")
myModule.add_module_depend(['etk', 'speexdsp'])
myModule.add_export_path(tools.get_current_path(__file__)) myModule.add_export_path(tools.get_current_path(__file__))
# add the currrent module at the # add the currrent module at the