summaryrefslogtreecommitdiff
path: root/libs/ardour/midi_buffer.cc
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-08-01 20:50:09 +0000
committerDavid Robillard <d@drobilla.net>2007-08-01 20:50:09 +0000
commitd7db3f757fde92126ef9886370ce604992b7e974 (patch)
tree4ac58366ad0a9980756c23ef58e413ce54bf395f /libs/ardour/midi_buffer.cc
parent3f421ac45025a856f03b779363f8f5f60b837b1e (diff)
Better MidiModel command framework, ready to go for all your canvas editing needs.
Rewrote MidiEvent to be a well-behaved self-contained object that optionally owns it's buffer, has proper copying semantics, etc. Fixed crazy bugs triggered by adding lots of events with varying times to a region. Speed up initial session display significantly (don't redraw each MIDI region tons of times, though still happens more than once and can use fixing...). git-svn-id: svn://localhost/ardour2/trunk@2213 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/midi_buffer.cc')
-rw-r--r--libs/ardour/midi_buffer.cc24
1 files changed, 12 insertions, 12 deletions
diff --git a/libs/ardour/midi_buffer.cc b/libs/ardour/midi_buffer.cc
index 5b7c789ba0..07ae2abab0 100644
--- a/libs/ardour/midi_buffer.cc
+++ b/libs/ardour/midi_buffer.cc
@@ -90,11 +90,11 @@ MidiBuffer::read_from(const Buffer& src, nframes_t nframes, nframes_t offset)
// FIXME: slow
for (size_t i=0; i < src.size(); ++i) {
const MidiEvent& ev = msrc[i];
- if (ev.time >= offset && ev.time < offset+nframes) {
- //cerr << "MidiBuffer::read_from got event, " << ev.time << endl;
+ if (ev.time() >= offset && ev.time() < offset+nframes) {
+ //cerr << "MidiBuffer::read_from got event, " << ev.time() << endl;
push_back(ev);
} else {
- //cerr << "MidiBuffer event out of range, " << ev.time << endl;
+ //cerr << "MidiBuffer event out of range, " << ev.time() << endl;
}
}
@@ -117,9 +117,9 @@ MidiBuffer::push_back(const MidiEvent& ev)
Byte* const write_loc = _data + (_size * MAX_EVENT_SIZE);
- memcpy(write_loc, ev.buffer, ev.size);
+ memcpy(write_loc, ev.buffer(), ev.size());
_events[_size] = ev;
- _events[_size].buffer = write_loc;
+ _events[_size].set_buffer(write_loc);
++_size;
//cerr << "MidiBuffer: pushed, size = " << _size << endl;
@@ -146,9 +146,9 @@ MidiBuffer::push_back(const jack_midi_event_t& ev)
Byte* const write_loc = _data + (_size * MAX_EVENT_SIZE);
memcpy(write_loc, ev.buffer, ev.size);
- _events[_size].time = (double)ev.time;
- _events[_size].size = ev.size;
- _events[_size].buffer = write_loc;
+ _events[_size].time() = (double)ev.time;
+ _events[_size].size() = ev.size;
+ _events[_size].set_buffer(write_loc);
++_size;
//cerr << "MidiBuffer: pushed, size = " << _size << endl;
@@ -176,9 +176,9 @@ MidiBuffer::reserve(double time, size_t size)
Byte* const write_loc = _data + (_size * MAX_EVENT_SIZE);
- _events[_size].time = time;
- _events[_size].size = size;
- _events[_size].buffer = write_loc;
+ _events[_size].time() = time;
+ _events[_size].size() = size;
+ _events[_size].set_buffer(write_loc);
++_size;
//cerr << "MidiBuffer: reserved, size = " << _size << endl;
@@ -238,7 +238,7 @@ MidiBuffer::merge(const MidiBuffer& a, const MidiBuffer& b)
const MidiEvent& a_ev = a[a_index];
const MidiEvent& b_ev = b[b_index];
- if (a_ev.time <= b_ev.time) {
+ if (a_ev.time() <= b_ev.time()) {
push_back(a_ev);
++a_index;
} else {