, _active (true)
, _signal_latency (0)
, _initial_delay (0)
- , _roll_delay (0)
, _disk_io_point (DiskIOPreFader)
, _pending_process_reorder (0)
, _pending_signals (0)
start_sample + _trim->output_latency (),
end_sample + _trim->output_latency (),
nframes);
- } else {
- _amp->apply_gain_automation (false);
- _trim->apply_gain_automation (false);
}
/* Tell main outs what to do about monitoring. We do this so that
}
}
- _roll_delay = _initial_delay;
+ if (_disk_reader) {
+ _disk_reader->set_roll_delay (_initial_delay);
+ }
}
void
_meter->run (bufs, start_sample, end_sample, 0.0, nframes, true);
}
- _amp->apply_gain_automation (false);
- _trim->apply_gain_automation (false);
passthru (bufs, start_sample, end_sample, nframes, 0, true);
flush_processor_buffers_locked (nframes);
}
_silent = false;
- _amp->apply_gain_automation(false);
BufferSet& bufs = _session.get_route_buffers (n_process_buffers ());
_meter->run (bufs, start_sample, end_sample, 1.0 /*speed()*/, nframes, true);
}
- passthru (bufs, start_sample, end_sample, nframes, declick, ((_disk_writer && !_disk_writer->record_enabled()) && _session.transport_rolling()));
+ passthru (bufs, start_sample, end_sample, nframes, declick, (!_disk_writer || !_disk_writer->record_enabled()) && _session.transport_rolling());
if ((_disk_reader && _disk_reader->need_butler()) || (_disk_writer && _disk_writer->need_butler())) {
need_butler = true;
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));
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;
}
}
if (_session.transport_stopped()) {
- _roll_delay = _initial_delay;
+ if (_disk_reader) {
+ _disk_reader->set_roll_delay (_initial_delay);
+ }
}
}
(*i)->non_realtime_locate (pos);
}
}
- _roll_delay = _initial_delay;
+
+ if (_disk_reader) {
+ _disk_reader->set_roll_delay (_initial_delay);
+ }
}
void