This covers a race condition in session transport that when synced to an
external engine it sometimes occurs that at the end of ::realtime_stop()
::transport_stopped_or_stopping() returns false when ::setup_rec_box() is
called. In this case the rec boxes are not erased when the recoding transport
is stopped.
This fixes this behavior about the remaining rec boxes, however the race
condition remains.
The race condition is reported in #8104. It should be considered reverting this
commit once the race condition is fixed.
TransportMasterStart needs to be set when this cycle's delta
can reach _remaining_latency_preroll.
This allows to directly catch the master-position and start
rolling without initial vari-speed.
This mechanism adds infrastructure that can later also be used
for MTC and MIDIClock.
PS. The LTC Generator port's latency is queried after the port
is created, and later kept in sync via LatencyUpdated signal.
This uses a recently introduce Signal instead of the generic
GraphReordered, which was used in the past since it usually
happened after the latency was changed.
* Do not allow new send to change implicit solo (no propagation)
* Propagate changes to due aux-send removal upstream
to tracks or busses connected to the source route.
* Forward solo-isolate
So far internal-sends were explicitly special-cased, and implicit
solo-state only was only forwarded for direct up/down-stream
connections. ...and nobody can remember why :)
This restriction is removed, so far mainly with commenting-out
code, as experiment.
Internal sends are not only more convenient, but also required
in cases where direct connections result in ambiguous latency.
When rolling forward the LTC generator needs to send future
a timestamp, so that when it matches the current time when
the signal arrives at the output port.
(A6 aligns transport playhead to output)
Also remove redundant double call to Track::set_block_size(). This dates back to 2010
when there used be an additional traversal of the Diskstream RCU-managed list, before
they became owned by Tracks
In case of JACK all ports not owned by Ardour may be re-sampled,
and latency is added. External JACK ports need to be treated
like physical ports: I/O latency needs to be taken into account.
When not using JACK, all external ports are physical ports
so this is a NO-OP for other backends.
Generator ports (like TransportMaster slaves), should not be
re-sampled when vari-speeding. Instead the Timecode/Clock should
directly use the engine-speed.
For this to happen, they need to be special-cased: no re-sampler
latency, direct access to engine-buffers.
Since 4508d5bab this only happened after a fade-out.
Currently there is no fade when transport is stopped and monitor
mode changes MonitoringDisk <-> MonitoringInput.
DiskReader::DeclickAmp is only used for data from disk.
Fading live-input data passing through will likely need another
Amp.