[DEV] audate audio time interface
This commit is contained in:
parent
75e0396bc1
commit
74f1fee452
@ -18,6 +18,8 @@
|
||||
#include <etk/memory.h>
|
||||
#include "AutoLogInOut.h"
|
||||
#include "IOFormatInterface.h"
|
||||
#include <audio/Time.h>
|
||||
#include <audio/Duration.h>
|
||||
#include "debug.h"
|
||||
|
||||
namespace audio {
|
||||
@ -118,7 +120,7 @@ namespace audio {
|
||||
* @return true The process is done corectly
|
||||
* @return false An error occured
|
||||
*/
|
||||
virtual bool process(std11::chrono::system_clock::time_point& _time,
|
||||
virtual bool process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
|
@ -49,7 +49,7 @@ void audio::drain::ChannelReorder::configurationChange() {
|
||||
}
|
||||
|
||||
|
||||
bool audio::drain::ChannelReorder::process(std11::chrono::system_clock::time_point& _time,
|
||||
bool audio::drain::ChannelReorder::process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
|
@ -27,7 +27,7 @@ namespace audio {
|
||||
protected:
|
||||
virtual void configurationChange();
|
||||
public:
|
||||
virtual bool process(std11::chrono::system_clock::time_point& _time,
|
||||
virtual bool process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
|
@ -110,10 +110,10 @@ size_t audio::drain::CircularBuffer::getFreeSizeBeforEnd() const {
|
||||
return size;
|
||||
}
|
||||
size_t audio::drain::CircularBuffer::write(const void* _data, size_t _nbChunk) {
|
||||
return write(_data, _nbChunk, std11::chrono::system_clock::now());//m_timeRead + )
|
||||
return write(_data, _nbChunk, audio::Time::now());//m_timeRead + )
|
||||
}
|
||||
|
||||
size_t audio::drain::CircularBuffer::write(const void* _data, size_t _nbChunk, const std11::chrono::system_clock::time_point& _time) {
|
||||
size_t audio::drain::CircularBuffer::write(const void* _data, size_t _nbChunk, const audio::Time& _time) {
|
||||
if (m_data.size() == 0) {
|
||||
DRAIN_ERROR("EMPTY Buffer");
|
||||
return _nbChunk;
|
||||
@ -183,14 +183,14 @@ size_t audio::drain::CircularBuffer::read(void* _data, size_t _nbChunk) {
|
||||
return read(_data, _nbChunk, m_timeRead);
|
||||
}
|
||||
|
||||
size_t audio::drain::CircularBuffer::read(void* _data, size_t _nbChunk, const std11::chrono::system_clock::time_point& _time) {
|
||||
size_t audio::drain::CircularBuffer::read(void* _data, size_t _nbChunk, const audio::Time& _time) {
|
||||
size_t nbElementDrop = 0;
|
||||
// Critical section (theoriquely protected by Mutex)
|
||||
size_t usedSizeBeforeEnd = getUsedSizeBeforEnd();
|
||||
// verify if we have elements in the Buffer
|
||||
if (0 < m_size) {
|
||||
// check the time of the read :
|
||||
std11::chrono::nanoseconds deltaTime = m_timeRead - _time;
|
||||
audio::Duration deltaTime = m_timeRead - _time;
|
||||
if (deltaTime.count() == 0) {
|
||||
// nothing to do ==> just copy data ...
|
||||
} else if (deltaTime.count() > 0) {
|
||||
@ -251,16 +251,16 @@ size_t audio::drain::CircularBuffer::read(void* _data, size_t _nbChunk, const st
|
||||
return nbElementDrop;
|
||||
}
|
||||
|
||||
void audio::drain::CircularBuffer::setReadPosition(const std11::chrono::system_clock::time_point& _time) {
|
||||
void audio::drain::CircularBuffer::setReadPosition(const audio::Time& _time) {
|
||||
// Critical section (theoriquely protected by Mutex)
|
||||
size_t usedSizeBeforeEnd = getUsedSizeBeforEnd();
|
||||
if (0 < m_size) {
|
||||
// check the time of the read :
|
||||
std11::chrono::nanoseconds deltaTime = _time - m_timeRead;
|
||||
audio::Duration deltaTime = _time - m_timeRead;
|
||||
size_t nbSampleToRemove = int64_t(m_frequency)*int64_t(deltaTime.count())/1000000000LL;
|
||||
nbSampleToRemove = std::min(nbSampleToRemove, m_size);
|
||||
DRAIN_VERBOSE("Remove sample in the buffer " << nbSampleToRemove << " / " << m_size);
|
||||
std11::chrono::nanoseconds updateTime((int64_t(nbSampleToRemove)*1000000000LL)/int64_t(m_frequency));
|
||||
audio::Duration updateTime(0,(int64_t(nbSampleToRemove)*1000000000LL)/int64_t(m_frequency));
|
||||
DRAIN_VERBOSE(" add time : " << updateTime.count() << "ns / " << deltaTime.count() << "ns");
|
||||
if (usedSizeBeforeEnd >= nbSampleToRemove) {
|
||||
usedSizeBeforeEnd -= nbSampleToRemove;
|
||||
@ -274,7 +274,7 @@ void audio::drain::CircularBuffer::setReadPosition(const std11::chrono::system_c
|
||||
m_timeRead += updateTime;
|
||||
//m_timeRead += deltaTime;
|
||||
} else {
|
||||
m_timeRead = std11::chrono::system_clock::time_point();
|
||||
m_timeRead = audio::Time();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -11,6 +11,8 @@
|
||||
#include <etk/types.h>
|
||||
#include <vector>
|
||||
#include <etk/chrono.h>
|
||||
#include <audio/Time.h>
|
||||
#include <audio/Duration.h>
|
||||
|
||||
namespace audio {
|
||||
namespace drain {
|
||||
@ -44,7 +46,7 @@ namespace audio {
|
||||
std::vector<uint8_t> m_data; //!< data pointer
|
||||
void* m_write; //!< write pointer
|
||||
void* m_read; //!< read pointer
|
||||
std11::chrono::system_clock::time_point m_timeRead; //!< current read time
|
||||
audio::Time m_timeRead; //!< current read time
|
||||
uint32_t m_frequency;
|
||||
// TODO : Remove the m_size ==> this is a bad element to be mutex-less
|
||||
size_t m_size; //!< number of chunk availlable in this buffer
|
||||
@ -106,7 +108,7 @@ namespace audio {
|
||||
* @param[in] _time Time to start write data (if before end ==> not replace data, write only if after end)
|
||||
* @return Number of chunk copied.
|
||||
*/
|
||||
size_t write(const void* _data, size_t _nbChunk, const std11::chrono::system_clock::time_point& _time);
|
||||
size_t write(const void* _data, size_t _nbChunk, const audio::Time& _time);
|
||||
size_t write(const void* _data, size_t _nbChunk);
|
||||
/**
|
||||
* @brief Read Chunk from the buffer to the pointer data.
|
||||
@ -115,12 +117,12 @@ namespace audio {
|
||||
* @param[in] _time Time to start read data (if before start ==> add 0 at start, if after, remove unread data)
|
||||
* @return Number of chunk copied.
|
||||
*/
|
||||
size_t read(void* _data, size_t _nbChunk, const std11::chrono::system_clock::time_point& _time);
|
||||
size_t read(void* _data, size_t _nbChunk, const audio::Time& _time);
|
||||
//! @previous
|
||||
size_t read(void* _data, size_t _nbChunk);
|
||||
void setReadPosition(const std11::chrono::system_clock::time_point& _time);
|
||||
void setReadPosition(const audio::Time& _time);
|
||||
|
||||
std11::chrono::system_clock::time_point getReadTimeStamp() {
|
||||
audio::Time getReadTimeStamp() {
|
||||
return m_timeRead;
|
||||
}
|
||||
/**
|
||||
|
@ -46,7 +46,7 @@ void audio::drain::EndPointCallback::configurationChange() {
|
||||
}
|
||||
|
||||
|
||||
bool audio::drain::EndPointCallback::process(std11::chrono::system_clock::time_point& _time,
|
||||
bool audio::drain::EndPointCallback::process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
|
@ -13,13 +13,13 @@
|
||||
namespace audio {
|
||||
namespace drain {
|
||||
typedef std11::function<void (void* _data,
|
||||
const std11::chrono::system_clock::time_point& _playTime,
|
||||
const audio::Time& _playTime,
|
||||
size_t _nbChunk,
|
||||
enum audio::format _format,
|
||||
uint32_t _frequency,
|
||||
const std::vector<audio::channel>& _map)> playbackFunction;
|
||||
typedef std11::function<void (const void* _data,
|
||||
const std11::chrono::system_clock::time_point& _readTime,
|
||||
const audio::Time& _readTime,
|
||||
size_t _nbChunk,
|
||||
enum audio::format _format,
|
||||
uint32_t _frequency,
|
||||
@ -43,7 +43,7 @@ namespace audio {
|
||||
*/
|
||||
virtual ~EndPointCallback() {};
|
||||
virtual void configurationChange();
|
||||
virtual bool process(std11::chrono::system_clock::time_point& _time,
|
||||
virtual bool process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
|
@ -32,7 +32,7 @@ void audio::drain::EndPointRead::configurationChange() {
|
||||
}
|
||||
|
||||
|
||||
bool audio::drain::EndPointRead::process(std11::chrono::system_clock::time_point& _time,
|
||||
bool audio::drain::EndPointRead::process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
|
@ -25,7 +25,7 @@ namespace audio {
|
||||
*/
|
||||
virtual ~EndPointRead() {};
|
||||
virtual void configurationChange();
|
||||
virtual bool process(std11::chrono::system_clock::time_point& _time,
|
||||
virtual bool process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
|
@ -52,7 +52,7 @@ void audio::drain::EndPointWrite::configurationChange() {
|
||||
}
|
||||
|
||||
|
||||
bool audio::drain::EndPointWrite::process(std11::chrono::system_clock::time_point& _time,
|
||||
bool audio::drain::EndPointWrite::process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
namespace audio {
|
||||
namespace drain{
|
||||
typedef std11::function<void (const std11::chrono::system_clock::time_point& _time,
|
||||
typedef std11::function<void (const audio::Time& _time,
|
||||
size_t _nbChunk,
|
||||
enum audio::format _format,
|
||||
uint32_t _frequency,
|
||||
@ -37,7 +37,7 @@ namespace audio {
|
||||
*/
|
||||
virtual ~EndPointWrite() {};
|
||||
virtual void configurationChange();
|
||||
virtual bool process(std11::chrono::system_clock::time_point& _time,
|
||||
virtual bool process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
|
@ -39,7 +39,7 @@ void audio::drain::Equalizer::configurationChange() {
|
||||
}
|
||||
}
|
||||
|
||||
bool audio::drain::Equalizer::process(std11::chrono::system_clock::time_point& _time,
|
||||
bool audio::drain::Equalizer::process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
|
@ -30,7 +30,7 @@ namespace audio {
|
||||
protected:
|
||||
virtual void configurationChange();
|
||||
public:
|
||||
virtual bool process(std11::chrono::system_clock::time_point& _time,
|
||||
virtual bool process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
|
@ -243,7 +243,7 @@ void audio::drain::FormatUpdate::configurationChange() {
|
||||
}
|
||||
|
||||
|
||||
bool audio::drain::FormatUpdate::process(std11::chrono::system_clock::time_point& _time,
|
||||
bool audio::drain::FormatUpdate::process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
|
@ -26,7 +26,7 @@ namespace audio {
|
||||
protected:
|
||||
virtual void configurationChange();
|
||||
public:
|
||||
virtual bool process(std11::chrono::system_clock::time_point& _time,
|
||||
virtual bool process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
|
@ -28,7 +28,7 @@ audio::drain::Process::~Process() {
|
||||
}
|
||||
}
|
||||
|
||||
bool audio::drain::Process::push(std11::chrono::system_clock::time_point& _time,
|
||||
bool audio::drain::Process::push(audio::Time& _time,
|
||||
void* _data,
|
||||
size_t _nbChunk) {
|
||||
void* out = nullptr;
|
||||
@ -38,7 +38,7 @@ bool audio::drain::Process::push(std11::chrono::system_clock::time_point& _time,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool audio::drain::Process::pull(std11::chrono::system_clock::time_point& _time,
|
||||
bool audio::drain::Process::pull(audio::Time& _time,
|
||||
void* _data,
|
||||
size_t _nbChunk,
|
||||
size_t _chunkSize) {
|
||||
@ -81,7 +81,7 @@ bool audio::drain::Process::pull(std11::chrono::system_clock::time_point& _time,
|
||||
}
|
||||
|
||||
|
||||
bool audio::drain::Process::process(std11::chrono::system_clock::time_point& _time,
|
||||
bool audio::drain::Process::process(audio::Time& _time,
|
||||
void* _inData,
|
||||
size_t _inNbChunk,
|
||||
void*& _outData,
|
||||
|
@ -36,7 +36,7 @@ namespace audio {
|
||||
* @return true The procress is done corectly.
|
||||
* @return false An error occured.
|
||||
*/
|
||||
bool push(std11::chrono::system_clock::time_point& _time,
|
||||
bool push(audio::Time& _time,
|
||||
void* _data,
|
||||
size_t _nbChunk);
|
||||
/**
|
||||
@ -48,7 +48,7 @@ namespace audio {
|
||||
* @return true The procress is done corectly.
|
||||
* @return false An error occured.
|
||||
*/
|
||||
bool pull(std11::chrono::system_clock::time_point& _time,
|
||||
bool pull(audio::Time& _time,
|
||||
void* _data,
|
||||
size_t _nbChunk,
|
||||
size_t _chunkSize);
|
||||
@ -62,7 +62,7 @@ namespace audio {
|
||||
* @return true The procress is done corectly.
|
||||
* @return false An error occured.
|
||||
*/
|
||||
bool process(std11::chrono::system_clock::time_point& _time,
|
||||
bool process(audio::Time& _time,
|
||||
void* _inData,
|
||||
size_t _inNbChunk,
|
||||
void*& _outData,
|
||||
@ -71,7 +71,7 @@ namespace audio {
|
||||
size_t _inNbChunk,
|
||||
void*& _outData,
|
||||
size_t& _outNbChunk) {
|
||||
std11::chrono::system_clock::time_point time;
|
||||
audio::Time time;
|
||||
return process(time, _inData, _inNbChunk, _outData, _outNbChunk);
|
||||
}
|
||||
bool processIn(void* _inData,
|
||||
|
@ -24,7 +24,7 @@ void audio::drain::Resampler::init() {
|
||||
audio::drain::Algo::init();
|
||||
m_type = "Resampler";
|
||||
m_supportedFormat.push_back(audio::format_int16);
|
||||
m_residualTimeInResampler = std11::chrono::nanoseconds(0);
|
||||
m_residualTimeInResampler = audio::Duration(0);
|
||||
}
|
||||
|
||||
std11::shared_ptr<audio::drain::Resampler> audio::drain::Resampler::create() {
|
||||
@ -78,14 +78,14 @@ void audio::drain::Resampler::configurationChange() {
|
||||
m_input.getFrequency(),
|
||||
m_output.getFrequency(),
|
||||
10, &err);
|
||||
m_residualTimeInResampler = std11::chrono::nanoseconds(0);
|
||||
m_residualTimeInResampler = audio::Duration(0);
|
||||
#else
|
||||
DRAIN_WARNING("SPEEX DSP lib not accessible ==> can not resample");
|
||||
m_needProcess = false;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool audio::drain::Resampler::process(std11::chrono::system_clock::time_point& _time,
|
||||
bool audio::drain::Resampler::process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
@ -109,7 +109,7 @@ bool audio::drain::Resampler::process(std11::chrono::system_clock::time_point& _
|
||||
DRAIN_VERBOSE("Resampler correct timestamp : " << _time << " ==> " << (_time - m_residualTimeInResampler));
|
||||
_time -= m_residualTimeInResampler;
|
||||
|
||||
std11::chrono::nanoseconds inTime((int64_t(_inputNbChunk)*1000000000LL) / int64_t(m_input.getFrequency()));
|
||||
audio::Duration inTime(0, (int64_t(_inputNbChunk)*1000000000LL) / int64_t(m_input.getFrequency()));
|
||||
m_residualTimeInResampler += inTime;
|
||||
#ifdef HAVE_SPEEX_DSP_RESAMPLE
|
||||
float nbInputTime = float(_inputNbChunk)/m_input.getFrequency();
|
||||
@ -148,7 +148,7 @@ bool audio::drain::Resampler::process(std11::chrono::system_clock::time_point& _
|
||||
}
|
||||
_outputNbChunk = nbChunkOutput;
|
||||
DRAIN_VERBOSE(" process chunk=" << nbChunkInput << " out=" << nbChunkOutput);
|
||||
std11::chrono::nanoseconds outTime((int64_t(_outputNbChunk)*1000000000LL) / int64_t(m_output.getFrequency()));
|
||||
audio::Duration outTime(0, (int64_t(_outputNbChunk)*1000000000LL) / int64_t(m_output.getFrequency()));
|
||||
DRAIN_VERBOSE("convert " << _inputNbChunk << " ==> " << _outputNbChunk << " " << inTime.count() << " => " << outTime.count());
|
||||
// correct time :
|
||||
m_residualTimeInResampler -= outTime;
|
||||
|
@ -39,13 +39,13 @@ namespace audio {
|
||||
protected:
|
||||
virtual void configurationChange();
|
||||
public:
|
||||
virtual bool process(std11::chrono::system_clock::time_point& _time,
|
||||
virtual bool process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
size_t& _outputNbChunk);
|
||||
private:
|
||||
std11::chrono::nanoseconds m_residualTimeInResampler; //!< the time of data locked in the resampler ...
|
||||
audio::Duration m_residualTimeInResampler; //!< the time of data locked in the resampler ...
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -304,7 +304,7 @@ std::vector<audio::format> audio::drain::Volume::getFormatSupportedOutput() {
|
||||
};
|
||||
|
||||
|
||||
bool audio::drain::Volume::process(std11::chrono::system_clock::time_point& _time,
|
||||
bool audio::drain::Volume::process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
|
@ -69,7 +69,7 @@ namespace audio {
|
||||
protected:
|
||||
virtual void configurationChange();
|
||||
public:
|
||||
virtual bool process(std11::chrono::system_clock::time_point& _time,
|
||||
virtual bool process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
|
Loading…
x
Reference in New Issue
Block a user