When a route's output is connected to multiple busses, re-establishing
port-connections on session-load calls Route::output_change_handler
multiple times.
Implicit solo counts are saved and restored by the route's SoloControl,
however the output_change_handler invalidated it on session load.
Since connections are restored iteratively, counting soloed downstream
routes will yield an incorrect result until all connections are
established.
This fixes the issue that implicit solo is lost on session-reload
in case a route has multiple connections with different up/downstream
solo states.
This restores using the distinct colors for cursor and edited text,
which was lost in the theme overhaul in 7f80883eb1.
Since delta-clocks are not editable, the same color is used for
delta display and the edit cursor (orange in the default theme).
* Include main-out channel-count when bouncing the output
* Do not de-activate disk-reader and mains-out when freezing a track
* Ignore meter when counting channels
When copying a plugin via drag/drop or copying plugin state, use
the main instance only. Plugins will later be replicated as
needed when configuring processors.
TMM ports cannot exist without a backend.
This fixes crashes where the PortEngine is re-initialized
(backend change):
Previously, TMM ports were only dropped (and recreated)
in TMM::restart() called from ARDOUR::init_post_engine().
When starting a new backend the old one is already destroyed,
but TM still held reference to Ports owned by that backend.
Calling the port's d'tor caused a memory corruption trying to
acquire the backend's port_callback_mutex:
e.g. When creating new session with a different backend
from a running instance, or unit-test after call to
AudioEngine::destroy(): https://pastebin.com/4D6pLA5s
While Ardour uses separate indices when naming tracks and busses
("track 1", "track 2", "bus 1", "bus 2"), the indices are contiguous
(0: "track 1", 1: "track 2", 2: "bus 1", 3: "bus 2").
* replace signal-emission with direct calls to CoreSelecton
using BaseUI's session pointer
* remove unused leftmost strip API
* use CoreSelection for first-selected strip
* Accessing CoreSelection does not modify the session
(allow access from const callbacks)
* replace static calls in P2 surface
This removes indirection and dependency on the GUI for
managing strip selection.
For the time being (since bc78629788) vst3 plugin uses
the Control Protocol API for track selection and focus, and
hence users of libardour also need to use libardour_cp
AVX optimized routine applying gain for Linux was causing SIGSEGV.
It was root caused to premature optimization on frames < 8, and
this commit fixes this issue.