summaryrefslogtreecommitdiff
path: root/libs/ardour/delayline.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2014-06-15 16:36:13 +0200
committerRobin Gareus <robin@gareus.org>2014-06-15 16:36:13 +0200
commit6c6afa4ecfce7fdb57a0b53afc50a6698f1657ed (patch)
treeb3a0edc26072c675e2b9fe2b790d2d15f81cadc4 /libs/ardour/delayline.cc
parentb0bab058d0a89faacf98bb7b6142f7f69c7c9bcb (diff)
optimize midi delayline.
Diffstat (limited to 'libs/ardour/delayline.cc')
-rw-r--r--libs/ardour/delayline.cc34
1 files changed, 21 insertions, 13 deletions
diff --git a/libs/ardour/delayline.cc b/libs/ardour/delayline.cc
index 550051f2d0..0bd7793366 100644
--- a/libs/ardour/delayline.cc
+++ b/libs/ardour/delayline.cc
@@ -222,10 +222,12 @@ DelayLine::run (BufferSet& bufs, framepos_t /* start_frame */, framepos_t /* end
}
}
- // delay events in current-buffer, in place.
- for (MidiBuffer::iterator m = mb.begin(); m != mb.end(); ++m) {
- MidiBuffer::TimeType *t = m.timeptr();
- *t += _delay;
+ if (_delay != 0) {
+ // delay events in current-buffer, in place.
+ for (MidiBuffer::iterator m = mb.begin(); m != mb.end(); ++m) {
+ MidiBuffer::TimeType *t = m.timeptr();
+ *t += _delay;
+ }
}
// move events from dly-buffer into current-buffer until nsamples
@@ -239,16 +241,22 @@ DelayLine::run (BufferSet& bufs, framepos_t /* start_frame */, framepos_t /* end
m = dly->erase(m);
}
- // move events after nsamples from current-buffer into dly-buffer
- // and trim current-buffer after nsamples
- for (MidiBuffer::iterator m = mb.begin(); m != mb.end();) {
- const Evoral::MIDIEvent<MidiBuffer::TimeType> ev (*m, false);
- if (ev.time() < nsamples) {
- ++m;
- continue;
+ /* For now, this is only relevant if there is there's a positive delay.
+ * In the future this could also be used to delay 'too early' events
+ * (ie '_global_port_buffer_offset + _port_buffer_offset' - midi_port.cc)
+ */
+ if (_delay != 0) {
+ // move events after nsamples from current-buffer into dly-buffer
+ // and trim current-buffer after nsamples
+ for (MidiBuffer::iterator m = mb.begin(); m != mb.end();) {
+ const Evoral::MIDIEvent<MidiBuffer::TimeType> ev (*m, false);
+ if (ev.time() < nsamples) {
+ ++m;
+ continue;
+ }
+ dly->insert_event(ev);
+ m = mb.erase(m);
}
- dly->insert_event(ev);
- m = mb.erase(m);
}
}
}