Previously "zero custom/user latency" meant "default plugin latency".
This is now saved in a separate boolean allowing a user to reduce a
processor's latency to zero.
This also prepares for a global switch to use zero latency throughout
the whole session.
Undo/Redo allows to change a region's envelope without the envelope-list
changing (AutomationList::StateChanged is not emitted).
This also catches other operations where region-length can change while
the Envelope is visible. -- Normally when using the range or object tool
to modify a Region, the Envelope is not visible.
Without this change it was possible that the GUI shows automation
points that don't have a corresponding libardour representation:
e.g. select range, change tool to "draw", press "s" (split), undo,
click on any region-gain point.
* Both the session-start and session-end point should follow the is-free option
* Rename the end-is-free option to session-range-is-free, to reflect that change
* This fixes the problem: recording before the start marker would move the Start,
even if the user had already fixed the End marker.
* When splitting in MouseObject, entered_region should get priority over selected regions.
This fixes the unexpected case where you try to split an unselected a region, but
a) nothing happens OR
b) some other region (maybe off-screen) is split
* Range mode now has its own option for splits, which can be:
Clear: the selection is cleared.
Preserve: the selection is left as-is. (default)
Force: all the regions that resulted from the split are selected (forcing a tool change).
* Un-hid the additional config options to select only the regions BEFORE or AFTER a split.
* Note: splits made with Cut Tool should be unaffected by these changes.
some older systems (e.g. OSX/PPC) fail to compile with
error: call of overloaded 'llabs(long long int)' is ambiguous
candidates are:
long long int llabs(long long int)
long long int __gnu_cxx::llabs(long long int)
Make _pending_overwrite atomic (butler + process thread).
This also addresses a potential seek before override race.
Seeking will fill the buffers and by the time overwrite_existing_buffers()
is called from there is no space to overwrite anymore.
When speed is -1, start_sample >= end_sample and _transport_sample
needs to be decremented.
Session::process_with_events() did this correctly, this change makes
Session::process_without_events() behave identically.
Keep track of safe reservation:
Data has been read (or was skipped) previously can be read again
up to the allocated "reservation" (which is never overwritten).
This is mainly a NO-OP, introducing a new PlaybackBuffer type
and preparing for its use.
At this point in time, the buffer is just a power-of-two sized
ringbuffer and the disk-reader's read-logic is still unchanged.
Eventually the read and write sample position that are currently
private to the disk-reader can be migrated to be owned by the buffer.
Also Diskreader::read() positions can be matched to read-position ..
+/- buffer reservation and de-click can read w/o committing the read.