From 6ab88e627c0aa2e3b8199c9fa7a1fd85e2cbf7f2 Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Tue, 27 Jan 2015 22:45:30 +0100 Subject: [PATCH] [DEV] add write callback mode and correct write mode --- airtalgo/EndPointWrite.cpp | 16 ++++++++-------- airtalgo/EndPointWrite.h | 11 +++++++---- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/airtalgo/EndPointWrite.cpp b/airtalgo/EndPointWrite.cpp index b0ad6dc..b20f25b 100644 --- a/airtalgo/EndPointWrite.cpp +++ b/airtalgo/EndPointWrite.cpp @@ -31,14 +31,12 @@ bool airtalgo::EndPointWrite::process(std::chrono::system_clock::time_point& _ti //AIRTALGO_INFO(" nb Sample in buffer : " << m_tmpData.size()); if (m_function != nullptr) { if (m_tmpData.size() <= 20000) { - m_function(_time, _inputNbChunk, m_output.getMap()); + m_function(_time, _inputNbChunk, m_output.getMap(), m_output.getFormat()); } } // resize output buffer: //AIRTALGO_INFO(" resize : " << (int32_t)m_formatSize << "*" << (int32_t)_inputNbChunk << "*" << (int32_t)m_outputMap.size()); - m_outputData.resize(m_formatSize*_inputNbChunk*m_output.getMap().size()); - // clear buffer - memset(&m_outputData[0], 0, m_outputData.size()); + m_outputData.resize(m_formatSize*_inputNbChunk*m_output.getMap().size(), 0); // set output pointer: _outputNbChunk = m_outputData.size()/(m_formatSize*m_output.getMap().size()); _output = &m_outputData[0]; @@ -51,9 +49,9 @@ bool airtalgo::EndPointWrite::process(std::chrono::system_clock::time_point& _ti } AIRTALGO_INFO("Write " << _outputNbChunk << " chunks"); // check if we have enought data: - int32_t nbChunkToCopy = std::min(_inputNbChunk, m_outputData.size()/m_output.getMap().size()); + int32_t nbChunkToCopy = std::min(_inputNbChunk, m_tmpData.size()/(m_output.getMap().size()*m_formatSize)); - AIRTALGO_INFO(" " << nbChunkToCopy << " chunks ==> " << nbChunkToCopy*m_output.getMap().size()*m_formatSize << " Byte"); + AIRTALGO_INFO(" " << nbChunkToCopy << " chunks ==> " << nbChunkToCopy*m_output.getMap().size()*m_formatSize << " Byte sizeBuffer=" << m_tmpData.size()); // copy data to the output: memcpy(_output, &m_tmpData[0], nbChunkToCopy*m_output.getMap().size()*m_formatSize); // remove old data: @@ -64,9 +62,11 @@ bool airtalgo::EndPointWrite::process(std::chrono::system_clock::time_point& _ti void airtalgo::EndPointWrite::write(const void* _value, size_t _nbChunk) { std::unique_lock lock(m_mutex); - AIRTALGO_INFO("[ASYNC] Get data : " << _nbChunk << " chunks ==> " << _nbChunk*m_output.getMap().size() << " samples formatSize=" << int32_t(m_formatSize)); + AIRTALGO_INFO("[ASYNC] Get data : " << _nbChunk << " chunks" + << " ==> " << _nbChunk*m_output.getMap().size() << " samples" + << " formatSize=" << int32_t(m_formatSize)); const int8_t* value = static_cast(_value); - for (size_t iii=0; iii<_nbChunk*m_formatSize; ++iii) { + for (size_t iii=0; iii<_nbChunk*m_formatSize*m_output.getMap().size(); ++iii) { m_tmpData.push_back(*value++); } } diff --git a/airtalgo/EndPointWrite.h b/airtalgo/EndPointWrite.h index 17e7116..5905ecb 100644 --- a/airtalgo/EndPointWrite.h +++ b/airtalgo/EndPointWrite.h @@ -12,11 +12,14 @@ #include namespace airtalgo{ - typedef std::function& _map)> writeNeedDataFunction_int16_t; + typedef std::function& _map, + enum airtalgo::format _type)> needDataFunctionWrite; class EndPointWrite : public EndPoint { private: - std::vector m_tmpData; - writeNeedDataFunction_int16_t m_function; + std::vector m_tmpData; + needDataFunctionWrite m_function; std::mutex m_mutex; public: /** @@ -34,7 +37,7 @@ namespace airtalgo{ void*& _output, size_t& _outputNbChunk); virtual void write(const void* _value, size_t _nbChunk); - virtual void setCallback(writeNeedDataFunction_int16_t _function) { + virtual void setCallback(needDataFunctionWrite _function) { m_function = _function; } };