diff options
author | David Robillard <d@drobilla.net> | 2011-04-28 18:19:28 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2011-04-28 18:19:28 +0000 |
commit | 8513a822501175e510591ff15418022a145ddc81 (patch) | |
tree | fbc3668f48d5c5392b895b8084237956252ad3e2 /src/engine/Recorder.hpp | |
parent | f87b2217c0108e263669d2c5a80b87bab41f0002 (diff) | |
download | machina-8513a822501175e510591ff15418022a145ddc81.tar.gz machina-8513a822501175e510591ff15418022a145ddc81.tar.bz2 machina-8513a822501175e510591ff15418022a145ddc81.zip |
Improve RingBuffer implementation.
Previous implementation was broken when written to full capacity, and
this version is significantly faster as well.
git-svn-id: http://svn.drobilla.net/lad/trunk/machina@3213 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/Recorder.hpp')
-rw-r--r-- | src/engine/Recorder.hpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/engine/Recorder.hpp b/src/engine/Recorder.hpp index c7f78f4..714b2a9 100644 --- a/src/engine/Recorder.hpp +++ b/src/engine/Recorder.hpp @@ -18,9 +18,10 @@ #ifndef MACHINA_RECORDER_HPP #define MACHINA_RECORDER_HPP +#include "raul/log.hpp" #include "raul/Slave.hpp" #include "raul/SharedPtr.hpp" -#include "raul/EventRingBuffer.hpp" +#include "raul/RingBuffer.hpp" #include "machina/Machine.hpp" @@ -33,7 +34,14 @@ public: Recorder(size_t buffer_size, TimeUnit unit, double q, bool step); inline void write(Raul::TimeStamp time, size_t size, const unsigned char* buf) { - _record_buffer.write(time, size, buf); + if (_record_buffer.write_space() < (sizeof(TimeStamp) + sizeof(size_t) + size)) { + Raul::warn << "Record buffer overflow" << std::endl; + return; + } else { + _record_buffer.write(sizeof(TimeStamp), (uint8_t*)&time); + _record_buffer.write(sizeof(size_t), (uint8_t*)&size); + _record_buffer.write(size, buf); + } } SharedPtr<Machine> finish(); @@ -42,7 +50,7 @@ private: virtual void _whipped(); TimeUnit _unit; - Raul::EventRingBuffer _record_buffer; + Raul::RingBuffer _record_buffer; SharedPtr<MachineBuilder> _builder; }; |