Enforce disk-reader to be after the disk-writer

If disk-monitoring is disabled: disk-reader position is not relevant.
If Rec-arm is off: disk-writer position is not relevant.

But...

   Play -> [plugins] -> Record

is basically a bounce and best done using the bounce operation.
(faster than realtime).

   Input + Play -> Record -> Output

Ardour would need to align playback with the Input to be recorded
and at the same time align it with output, so that a player can play
along on the same track. That's not possible without a time-machine (or
a 2nd play processor).

While it can work in theory under some special circumstances, allowing
the disk-reader before the disk-writer is really just confusing,
error prone and valid uses cases are better handled by dedicated
operations.
This commit is contained in:
Robin Gareus 2017-09-22 03:47:38 +02:00
parent 431b2f15c6
commit aac8040e95

View File

@ -4681,8 +4681,6 @@ Route::setup_invisible_processors ()
new_processors.push_front (_intreturn);
}
/* EXPORT PROCESSOR */
/* DISK READER & WRITER (for Track objects) */
if (_disk_reader || _disk_writer) {
@ -4722,6 +4720,21 @@ Route::setup_invisible_processors ()
}
}
/* ensure dist-writer is before disk-reader */
if (_disk_reader && _disk_writer) {
ProcessorList::iterator reader_pos = find (new_processors.begin(), new_processors.end(), _disk_reader);
ProcessorList::iterator writer_pos = find (new_processors.begin(), new_processors.end(), _disk_writer);
assert (reader_pos != new_processors.end ());
assert (writer_pos != new_processors.end ());
if (std::distance (new_processors.begin(), reader_pos) < std::distance (new_processors.begin(), writer_pos)) {
new_processors.erase (reader_pos);
assert (writer_pos == find (new_processors.begin(), new_processors.end(), _disk_writer));
new_processors.insert (++writer_pos, _disk_reader);
}
}
/* EXPORT PROCESSOR */
if (_capturing_processor) {
assert (!_capturing_processor->display_to_user ());
ProcessorList::iterator reader_pos = find (new_processors.begin(), new_processors.end(), _disk_reader);