[DEV] audate audio time interface

This commit is contained in:
Edouard DUPIN 2015-04-13 21:49:48 +02:00
parent 75e0396bc1
commit 74f1fee452
21 changed files with 49 additions and 45 deletions

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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();
}
}

View File

@ -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;
}
/**

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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;

View File

@ -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 ...
};
}
}

View File

@ -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,

View File

@ -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,