Fix nightly typos'n'thinkos: initial-delay calculation
authorRobin Gareus <robin@gareus.org>
Tue, 19 Sep 2017 15:03:28 +0000 (17:03 +0200)
committerRobin Gareus <robin@gareus.org>
Tue, 19 Sep 2017 15:03:28 +0000 (17:03 +0200)
libs/ardour/route.cc

index 9ad7510f6d57cb8a57b51e90871c1fb2ff232aef..041640a9739fc19fbb9592b60ff91187ddfc6b96 100644 (file)
@@ -3878,21 +3878,20 @@ Route::update_signal_latency (bool set_initial_delay)
        Glib::Threads::RWLock::ReaderLock lm (_processor_lock);
 
        samplecnt_t l_in  = _input->latency ();
-       samplecnt_t l_out = 0;
+       samplecnt_t l_out = _output->user_latency();
 
        for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
                if ((*i)->active ()) {
-                       l_out += (*i)->signal_latency ();
                        l_in += (*i)->signal_latency ();
                }
                (*i)->set_input_latency (l_in);
-               (*i)->set_output_latency (l_out);
        }
 
-       l_out += _output->user_latency();
-
-       for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
-               (*i)->set_output_latency (l_out - (*i)->output_latency ());
+       for (ProcessorList::reverse_iterator i = _processors.rbegin(); i != _processors.rend(); ++i) {
+               (*i)->set_output_latency (l_out);
+               if ((*i)->active ()) {
+                       l_out += (*i)->signal_latency ();
+               }
        }
 
        DEBUG_TRACE (DEBUG::Latency, string_compose ("%1: internal signal latency = %2\n", _name, l_out));
@@ -3926,8 +3925,8 @@ Route::set_latency_compensation (samplecnt_t longest_session_latency)
        samplecnt_t old = _initial_delay;
        assert (!_disk_reader || _disk_reader->output_latency () <= _signal_latency);
 
-       if (_disk_reader &&  _signal_latency < longest_session_latency) {
-               _initial_delay = longest_session_latency - (_signal_latency - _disk_reader->input_latency ());
+       if (_disk_reader &&  _disk_reader->output_latency () < longest_session_latency) {
+               _initial_delay = longest_session_latency - _disk_reader->output_latency ();
        } else {
                _initial_delay = 0;
        }