diff options
author | David Robillard <d@drobilla.net> | 2007-08-01 20:50:09 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2007-08-01 20:50:09 +0000 |
commit | d7db3f757fde92126ef9886370ce604992b7e974 (patch) | |
tree | 4ac58366ad0a9980756c23ef58e413ce54bf395f /libs/ardour/midi_buffer.cc | |
parent | 3f421ac45025a856f03b779363f8f5f60b837b1e (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.cc | 24 |
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 { |