summaryrefslogtreecommitdiff
path: root/libs/ardour/midi_buffer.cc
diff options
context:
space:
mode:
authorHans Baier <hansfbaier@googlemail.com>2009-02-02 08:50:28 +0000
committerHans Baier <hansfbaier@googlemail.com>2009-02-02 08:50:28 +0000
commitae2e090e74b18b12423dab7c62d2645cbcc36459 (patch)
treec75fb55a2cc7d14ca8867b19fd13832b7c3fa36d /libs/ardour/midi_buffer.cc
parenteaada019258528576771b42fd9136c7ebfe01d61 (diff)
* fixed crash: MidiBuffer::reserve returned wrong write location
git-svn-id: svn://localhost/ardour2/branches/3.0@4475 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/midi_buffer.cc')
-rw-r--r--libs/ardour/midi_buffer.cc17
1 files changed, 14 insertions, 3 deletions
diff --git a/libs/ardour/midi_buffer.cc b/libs/ardour/midi_buffer.cc
index f724aac100..dccff1815d 100644
--- a/libs/ardour/midi_buffer.cc
+++ b/libs/ardour/midi_buffer.cc
@@ -129,8 +129,14 @@ bool
MidiBuffer::push_back(const Evoral::MIDIEvent<TimeType>& ev)
{
const size_t stamp_size = sizeof(TimeType);
+ cerr << "MidiBuffer: pushing event " << " size: " << _size
+ << " event size: " << ev.size()
+ << " capacity: " << _capacity
+ << " stamp size: " << stamp_size << " \n";
+
if (_size + stamp_size + ev.size() >= _capacity) {
- cerr << "MidiBuffer::push_back failed (buffer is full)" << endl;
+ cerr << "MidiBuffer::push_back failed (buffer is full)"
+ << endl;
return false;
}
@@ -187,8 +193,12 @@ MidiBuffer::reserve(TimeType time, size_t size)
return 0;
}
- uint8_t* const write_loc = _data + _size;
+ // write timestamp
+ uint8_t* write_loc = _data + _size;
*((TimeType*)write_loc) = time;
+
+ // move write_loc to begin of MIDI buffer data to write to
+ write_loc += stamp_size;
_size += stamp_size + size;
_silent = false;
@@ -201,8 +211,9 @@ void
MidiBuffer::silence(nframes_t dur, nframes_t offset)
{
// FIXME use parameters
- if (offset != 0)
+ if (offset != 0) {
cerr << "WARNING: MidiBuffer::silence w/ offset != 0 (not implemented)" << endl;
+ }
_size = 0;
_silent = true;