Age | Commit message (Collapse) | Author |
|
|
|
see also 23baeee8293
|
|
|
|
|
|
JACK is not yet finished.
Changes also include minor reformatting and a spelling correction (latecies to latencies)
|
|
This can help when running with very low latency and the
initial process callback is [indirectly] expensive.
E.g. load a heavy session the a RPi4, initial setup can pull
in a lot of data, which blocks the bus.
In particular with the ALSA backend this can lead to poll timeout
which effectively stops the backend.
|
|
|
|
This allows for caches to warm up, background worker threads to
spin up and things settle down. This also prevents initial
audible artifacts of live input.
In almost all cases this completes before the GUI is brought up.
|
|
|
|
Session::plan_master_strategy()
|
|
Substantive comments associated with code in Session::plan_master_strategy.
Known not to work for reverse TC. Also, the JACK related code has not yet been tested
|
|
This fixes an issue that after changing backends (::set_backend),
the session-transport was in inconsistent state. If it was rolling,
it continued to roll with "stop" being unavailable.
|
|
|
|
|
|
Session::process() can call split-cycle which offset the
buffer pointers. When vari-speeding at speed > 1.0, the
engine also splits the cycle every n_samples, to not exceed
the configured buffersize. This needs to take prior buffer
offsets into account.
|
|
|
|
|
|
|
|
|
|
This handles a case when the engine was started normally
(not for latency measurement), and measurement is performed later.
This resulted in a duplicate backend start
|
|
|
|
|
|
|
|
|
|
|
|
Since upcoming state-machine transitions are done in rt-context
via ARDOUR::Session::process_event () they should all in rt-context.
set_session() is called from the UI thread (and the process-lock wasn't
even taken)
|
|
|
|
AudioEngine::Running()
|
|
Trust that ::reset() works for all transport masters, and call it when engine is stopped. This way
the transport masters are ready to be called again as soon as the engine restarts.
|
|
requiring "users" of the library to arrange for it
|
|
This probably no real world effect since there is a mutex in the
loop that acts as a memory barrier.
|
|
* PortEngine::available() implementation
* AudioEngine::connected() wrapper
Eventually we may re-introduce PortEngine::available along
with a libardour internal port-engine.
|
|
sure Engine::running() will be false
|
|
|
|
|
|
|
|
|
|
Previously Ardour used a /local/ per track vari-speed mechanism.
Now that the disk-reader is a latency-compensated processor, the speed
of each disk-reader would need to be maintained locally, offset by each
disk-reader's output latency. Furthermore each disk-reader may
produce a different number of samples, depending on its global alignment.
This commit introduces port-data resampling directly at the engine-level:
Up/down-sample all input ports at the beginning, and down/up-sample output
port-data using the inverse ratio at the end of the session's process
cycle.
The session itself is unaware of the speed-change, and only needs to
handle transport speeds {-1, 0, +1}.
This also allows for aligned cue-monitoring and vari-speed recording,
and also pitch-shifts synthesized MIDI along.
|
|
Generated by tools/f2s. Some hand-editing will be required in a few places to fix up comments related to timecode
and video in order to keep the legible
|
|
|
|
|
|
Make AudioEngine::prepare_for_latency_measurement() idempotent. There are
multple calls (when switching to the measurement page and every time
a measurement is preformed).
Also the Stopped() signal is important for the Dialog state regardless
if the engine was stopped for latency or not.
|
|
|
|
|
|
|
|
|
|
|
|
shared_ptr<Port> now uses a deleter functor which pushes Port* to a lock-free FIFO so that the Port is
always deleted (and thus unregistered with the PortEngine/backend) in a safe context w.r.t. various
callbacks in the host. Currently the auto_connect_thread in Session has been tasked with doing these
deletions.
|
|
Prepare to bundle session-utils with releases.
Session-utils use libardour which needs an Engine. "Dummy" is the only
engine that always works
|
|
AudioEngine::stop() if running() is not true and _backend->stop() is true, mutex was being unlocked without being locked.
|