allow to query export profile type
[ardour.git] / libs / ardour / delayline.cc
index 8e24fd55ec01b898af36fdc935b445684fae2d55..eda85f0dfd138eaff255a354c014aceef25a08c2 100644 (file)
@@ -50,7 +50,7 @@ DelayLine::~DelayLine ()
 
 #define FADE_LEN (16)
 void
-DelayLine::run (BufferSet& bufs, framepos_t /* start_frame */, framepos_t /* end_frame */, pframes_t nsamples, bool)
+DelayLine::run (BufferSet& bufs, framepos_t /* start_frame */, framepos_t /* end_frame */, double /* speed */, pframes_t nsamples, bool)
 {
        const uint32_t chn = _configured_output.n_audio();
        pframes_t p0 = 0;
@@ -112,9 +112,11 @@ DelayLine::run (BufferSet& bufs, framepos_t /* start_frame */, framepos_t /* end
                        _roff += boff;
                }
 
+               // use shared_array::swap() ??
                _buf = _pending_buf;
                _bsiz = _pending_bsiz;
                _pending_bsiz = 0;
+               _pending_buf.reset();
        }
 
        /* there may be no buffer when delay == 0.
@@ -221,10 +223,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
@@ -238,16 +242,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);
                        }
                }
        }