[DEV] add write callback mode and correct write mode
This commit is contained in:
parent
f012027d5b
commit
6ab88e627c
@ -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<std::mutex> 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<const int8_t*>(_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++);
|
||||
}
|
||||
}
|
||||
|
@ -12,11 +12,14 @@
|
||||
#include <functional>
|
||||
|
||||
namespace airtalgo{
|
||||
typedef std::function<void (const std::chrono::system_clock::time_point& _playTime, const size_t& _nbChunk, const std::vector<airtalgo::channel>& _map)> writeNeedDataFunction_int16_t;
|
||||
typedef std::function<void (const std::chrono::system_clock::time_point& _playTime,
|
||||
const size_t& _nbChunk,
|
||||
const std::vector<airtalgo::channel>& _map,
|
||||
enum airtalgo::format _type)> needDataFunctionWrite;
|
||||
class EndPointWrite : public EndPoint {
|
||||
private:
|
||||
std::vector<int16_t> m_tmpData;
|
||||
writeNeedDataFunction_int16_t m_function;
|
||||
std::vector<int8_t> 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;
|
||||
}
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user