diff options
author | Hans Baier <hansfbaier@googlemail.com> | 2009-02-02 08:50:28 +0000 |
---|---|---|
committer | Hans Baier <hansfbaier@googlemail.com> | 2009-02-02 08:50:28 +0000 |
commit | ae2e090e74b18b12423dab7c62d2645cbcc36459 (patch) | |
tree | c75fb55a2cc7d14ca8867b19fd13832b7c3fa36d /libs/ardour/midi_buffer.cc | |
parent | eaada019258528576771b42fd9136c7ebfe01d61 (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.cc | 17 |
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; |