I had set the previous next buttons to wrap around
but Robin felt dead ending was better. The previous
button becomes insensitive when the first foldback bus
is displayed and next is insensitive when the last is
displayed.
- Set width so added pan controls in send controls don't change size
- output button shows only ports applicable to foldback use
- Size text to leave widget width alone
- Center level control
-
Do not send continuous stream of note-evens with zero velocity
after muting a MIDI track or after a fade to silence completed
(and all-notes-off has been sent).
NB. Automated Faders are left untouched (no panic is sent for -infdB gain),
Note-on events with zero velocity are sent.
This resolves a circular dependency:
libardour calls methods from libardour_cp and vice versa.
Since 9bb2f2bb libardour is also calling active() and that method
needs to be forced to use late binding. -- compare to b9bbea7174
USB stack may not be available on some systems, e.g. unit-test VM.
When libusb_init(0) fails to create default context, further calls
into the libusb API will cause segfaults.
Since 3d15499cda, libevoral enforces Parameter min/max
range. Ardour::ParameterDescriptor sets FadeInAutomation range to 0..2.
Hence all unit-test data needs to be in this range.
ControlProtocols are single instance.
Activating an already active protocol leads to crashes due to
various rasons (e.g. port already registered), re-used singleton
event_loop_name and request-buffers, duplicate free of
AbstractUI request buffers during deactivate,..
When I/O port-counts do not change, plugin re-order happens
in sync in the process-thread. ::configure_io() is only called
to ensure that the current configuration is valid.
In case that the ChanCount does not change, the method must
be realtime-safe and not block.
DiskWriter::reset_write_sources() is not realtime-safe and
implicitly causes a session-save:
Write-sources are destroyed and re-created. This includes
a call to write_source->drop_references(), which triggers
ARDOUR::Session::remove_source(), which saves the session.
Furthermore adding/removing plugins will likewise call
::configure_io().
Previously any processor change on a track lead to
saving the session!