[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());
|
//AIRTALGO_INFO(" nb Sample in buffer : " << m_tmpData.size());
|
||||||
if (m_function != nullptr) {
|
if (m_function != nullptr) {
|
||||||
if (m_tmpData.size() <= 20000) {
|
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:
|
// resize output buffer:
|
||||||
//AIRTALGO_INFO(" resize : " << (int32_t)m_formatSize << "*" << (int32_t)_inputNbChunk << "*" << (int32_t)m_outputMap.size());
|
//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());
|
m_outputData.resize(m_formatSize*_inputNbChunk*m_output.getMap().size(), 0);
|
||||||
// clear buffer
|
|
||||||
memset(&m_outputData[0], 0, m_outputData.size());
|
|
||||||
// set output pointer:
|
// set output pointer:
|
||||||
_outputNbChunk = m_outputData.size()/(m_formatSize*m_output.getMap().size());
|
_outputNbChunk = m_outputData.size()/(m_formatSize*m_output.getMap().size());
|
||||||
_output = &m_outputData[0];
|
_output = &m_outputData[0];
|
||||||
@ -51,9 +49,9 @@ bool airtalgo::EndPointWrite::process(std::chrono::system_clock::time_point& _ti
|
|||||||
}
|
}
|
||||||
AIRTALGO_INFO("Write " << _outputNbChunk << " chunks");
|
AIRTALGO_INFO("Write " << _outputNbChunk << " chunks");
|
||||||
// check if we have enought data:
|
// 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:
|
// copy data to the output:
|
||||||
memcpy(_output, &m_tmpData[0], nbChunkToCopy*m_output.getMap().size()*m_formatSize);
|
memcpy(_output, &m_tmpData[0], nbChunkToCopy*m_output.getMap().size()*m_formatSize);
|
||||||
// remove old data:
|
// 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) {
|
void airtalgo::EndPointWrite::write(const void* _value, size_t _nbChunk) {
|
||||||
std::unique_lock<std::mutex> lock(m_mutex);
|
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);
|
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++);
|
m_tmpData.push_back(*value++);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,11 +12,14 @@
|
|||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
namespace airtalgo{
|
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 {
|
class EndPointWrite : public EndPoint {
|
||||||
private:
|
private:
|
||||||
std::vector<int16_t> m_tmpData;
|
std::vector<int8_t> m_tmpData;
|
||||||
writeNeedDataFunction_int16_t m_function;
|
needDataFunctionWrite m_function;
|
||||||
std::mutex m_mutex;
|
std::mutex m_mutex;
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
@ -34,7 +37,7 @@ namespace airtalgo{
|
|||||||
void*& _output,
|
void*& _output,
|
||||||
size_t& _outputNbChunk);
|
size_t& _outputNbChunk);
|
||||||
virtual void write(const void* _value, size_t _nbChunk);
|
virtual void write(const void* _value, size_t _nbChunk);
|
||||||
virtual void setCallback(writeNeedDataFunction_int16_t _function) {
|
virtual void setCallback(needDataFunctionWrite _function) {
|
||||||
m_function = _function;
|
m_function = _function;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user