RCU reader returns a shared ptr to the current object which
can also be used in other places at the same time.
Sorting the shared-ptr list invalidates iterators which can
throw off other users of the same object.
This fixes a bug in PT-import which calls get_nth_audio_track().
This reduces initial parameter-changes during session-load
due to Controllable (PluginControl) state restore after
restoring the plugin state. This likely fixes#9287
When cutting multiple regions with Ripple-ALL, removing
the first region ripples the remaining tracks which includes
selected regions on those tracks which are to be cut later.
This fixes some edge-cases when scanning recent sessions
in get_state_files_in_directory() and likely some other
places that use run_functor_for_paths in case the folder
contains files with non UTF-8 names.
This lead to potentially silent stem-exports. It
should not be possible to hold a shared-ptr reference
of a processor that is not part of the processor chain.
When toggling a channel-configs the following happens:
1. TrackExportChannelSelector::update_config
2. ExportProfileManager::clear_channel_configs
3. RouteExportChannel::create_from_route
[...] CriticalSelectionChanged
4. ExportDialog::update_warnings_and_example_filename
5. ARDOUR::ExportProfileManager::get_warnings
6. ARDOUR::ExportProfileManager::build_filenames
7. ARDOUR::ExportFilename::set_channel_config
[...]
Step 3 creates a RouteExportChannel, Step 7 retains a
shared-pointer to it in the config's ExportFilenamePtr.
When toggling another channel: step 2 release the reference
and step 3 creates a new RouteExportChannel.
This new channel reuses the existing Route::_capture_processor (!).
Now Step 7 releases the first RouteExportChannel in order
to get_warnings for the new one. Since ExportFilenamePtr holds the
the last reference, the d'tor of RouteExportChannel runs,
which removes the capture-processor from the route.
The newly created RouteExportChannel now has a reference
to a CaptureProcessor that is not in the signal-flow.
Note: the order of adding/removing RouteExportChannel matters.
With a two track session:
* Disable "with track/bus processing
* Enable Track 1
* Enable Track 2
* Disable Track 1
* Enable Track 1 // << Track 2 becomes silent
When a control-point is exactly at tick (N * 8), iterating
over the List (Sequence<Time>::const_iterator::operator++)
skipped the point.
Sequence::time_between_interpolated_controller_outputs == 8.
This reverts commit 37cae2f971.
This changes causes issues with recursive calls to the enter/leave event handling
stacks in gtk2_adour. Semantically, the change makes perfect sense, but finding
a solution to the recursion is challenging.
This is better provided by Plugin::print_parameter, which
is called by PluginControl::get_user_string(). This removes
special cases for the mode enums.