summaryrefslogtreecommitdiff
path: root/libs/ardour/route.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-09-19 17:03:28 +0200
committerRobin Gareus <robin@gareus.org>2017-09-19 17:03:28 +0200
commit21aa2f529f27a39bf41bbff041404093460bdbad (patch)
tree9de56636bd73f580b014f2e8cf30eb1e7d200ffb /libs/ardour/route.cc
parentf7e35024b6f9e81de49ace3d82ddc30af9012893 (diff)
Fix nightly typos'n'thinkos: initial-delay calculation
Diffstat (limited to 'libs/ardour/route.cc')
-rw-r--r--libs/ardour/route.cc17
1 files changed, 8 insertions, 9 deletions
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index 9ad7510f6d..041640a973 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -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;
}