Age | Commit message (Collapse) | Author |
|
With 4MB RAM and 1.5MB locked base memory (C++ bindings),
TLSF has a better worst-case performance (-20% std-dev
execution time compared to realloc-pool).
Even though on average Realloc-Pool performs better (-9%
average time, compared to TLSF).
|
|
PluginInsert (and a few other places) iterate over channel
mappings using a const iterator. However mappings()
allocated memory since it was copied
|
|
Expose zita-convolver bindings, to allow for
custom NxM convolution matrices, and dedicated FIR processors.
|
|
This will come in handy for FIR, or short samples in combination
with a Lua convolution processor.
|
|
|
|
|
|
This is in preparation for saving state while the session is
record-arm'ed. Most notably config changes and undo/redo.
In case both normal and pending save happens, pending must be
last and is required to recover from crashes during recording.
|
|
Loop recording creates a single long source, regions have to be
"split" from this source, using "start" as offset.
Since MIDI uses absolute timestamps, offsetting this by accumulating
buffer_position += (*ci)->samples;
like Track::use_captured_audio_sources() does, is not correct.
Furthermore, record_enabled() may be off when stopping recording,
MIDI needs to be flushed regardless.
|
|
DiskWriter::transport_looped() is called from the session
when engine loops. This does not take local disk-reader run()
latency offset into account.
finish_capture() needs to be postponed until the disk-writer
itself reaches the loop-position. This is achieved by
postponing loop() and calling it once loop-length of samples
has been captured.
This works because engaging loop always seeks to the loop-position
and first loop resets _capture_captured.
|
|
|
|
set_session_extents had a bug; it wasn't calling locations->add()
on the newly created location.
The correct implementation was in set_session_range_location,
but this was only called from one place.
This function was removed, and set_session_extents will be used in its place.
set_session_extents will create a session location if one no longer exists,
so there is no need for set_session_range_location.
|
|
This differs from ::locate_pending() by covering either phase of a locate - declick or refill
|
|
|
|
plus slight cleanup of Region::set_name().
Note that issues with ARDOUR::legalize_for_path() not excluding colons still remain
|
|
|
|
In prior versions: if Auto Input was enabled, the default behavior was
to monitor the Input of all tracks when stopped; even if they aren't armed.
Tape Machine Mode changed the behavior of Auto Input so that it doesn't
always monitor the track inputs when transport is stopped.
After some discussion on IRC, we determined that Tape mode is likely
more practical for a DAW user, and therefore a better default.
Rather than default an ambiguously-named preference "on", we decided
to invert the behavior, rename it sensibly(?), and default it OFF.
|
|
Because of the addition of LocateTransportDisposition, this call was unconditionally forcing a roll during startup
|
|
Absurd to be memory-conscious about a couple of member variables in an object that represents user input
|
|
TransportFSM
|
|
|
|
"roll-after-locate"
This allows callers to defer logic about auto-play/current rolling state and more to TransportFSM where it
can be cnentralized and is less ambiguous
|
|
|
|
|
|
|
|
|
|
portability)
|
|
|
|
|
|
Session::TransportStateChanged notifies about transport stop before the stop is complete (i.e. at the start of the declick).
Various other objects (notably control surfaces) connect to this signal and use it to modify their displayed state.
We need a method that can tell them we are stopped (or stopping) even though we are not "fully" stopped yet. This is
that method
|
|
|
|
up to the nearest buffer size
|
|
Note: there is no global state for "the" transport master, since we have several at all times now
|
|
This might fix a "SessionHandleRef exists across session deletion",
when the shared_ptr was be pushed onto a x-thread pool, and not
invalidated in time before the session was closed.
|
|
destroy_sources () is only called from Session::remove_last_capture ().
The list of sources to be destroyed is the local scope of that method
and will hold a reference to the object.
copy-construct the list and removing elements one by one from the
copy is only unnecessary overhead.
|
|
future, atomically
The atomically is with respect to the initial thread-based MIDNAM loading
|
|
|
|
|
|
Removed (mistakenly) during work on transportFSM
|
|
|
|
|
|
This allows to indicate that a control should by default be displayed
inline in the mixer-strip.
Previously that was hard-coded for and enabled for send-level
controls only.
|
|
Equivalent to Gain and Trim (gain-coefficient, not dB) and use
it for Sends.
|
|
|
|
overwrite_queued == true is equivalent to _pending_overwrite != 0
|
|
rbuf allocation/use is protected by process_lock
|
|
Even though the method that is overridden (shared_ptr<t>::operator=),
has that signature in modern boost, it's of no real significance
for the case at hand (ExportChannel, ExportTimespan)
|
|
We just don't do this anymore
|
|
|
|
boost::shared_ptr & operator=(shared_ptr const & r);
is not declared virtual and cannot safely be overloaded.
|
|
While loading a session XML state, set_state must use
`Stateful::loading_state_version`.
When later copying processor state,
`Stateful::current_state_version` is correct.
|