Age | Commit message (Collapse) | Author |
|
Session::Controllables is a shared_ptr<> list. As long
as the session exists the Controllables will be around. Destroyed(*)
can only be called after the session is destroyed and releases the
shared_ptr<>
NB. this code had a nice hack to construct a "shared_from_this"
workaround. For future reference:
struct null_deleter { void operator()(void const *) const {} };
boost::shared_ptr<Controllable>(c, null_deleter())
|
|
To facilitate a central registry with weak/shared pointer lookup,
enable_shared_from_this<ARDOUR::AutomationControl>
was migrated to
enable_shared_from_this<PBD::Controllable>
The main (and only) user is generic-midi surface's state interface :(
|
|
This fixes a bug that can result in inconsistent session-state when
copying plugin state from one plugin to another (via drag/drop
ProcessorBox::object_drop, LINK).
The underlying plugin state and settings are copied, port _shadow_data
is updated, and ::get_parameter() shows the correct new value.
However the Controllable was not updated. On Session save/restore
the value may have be lost or was inconsistently restored.
|
|
LV2 plugin state-loading is generally safe to perform concurrently
with running the plugin (as per LV2 spec). However concurrent run()
is not.
|
|
|
|
|
|
is correct when duplicating tracks.
Confusing because orig_track_id is still being switched to the
NEW track, and shared_with refers to the OLD one
|
|
This also fixes #7674
|
|
We no longer find playlists by name when constructing tracks, so
the name of the playlist is not relevant
|
|
|
|
This addresses issues with session-cleanup and region-cleanup in
some sessions.
The root-cause why some unused playlists were saved in the session XML
under <Playlists> and not <UnusedPlaylists> is not known.
Early 6.0-pre did incorrect reference counting, but also older sessions
had this issue. Perhaps due to ambiguities of matching playlists
by name in 5.x or session-format changes 3.x .. 5.x.
|
|
|
|
|
|
|
|
Global variables that can written by anyone are to be avoided.
This also simplifies exposing SessionPlaylists as Lua bindings.
|
|
Both Disk-reader and Disk-writer use the same playlist.
ARDOUR::Track::use_playlist() sets it for both Disk-IO processors,
so it needs to be released by both on destruction.
|
|
disk refills
|
|
|
|
|
|
Since upcoming state-machine transitions are done in rt-context
via ARDOUR::Session::process_event () they should all in rt-context.
set_session() is called from the UI thread (and the process-lock wasn't
even taken)
|
|
Revert this once transport state machine waits for de-click!
This causes audible-clicks on stop, but prevents audible artifacts
on LocateRoll with the current transport-control-logic.
|
|
No need to reconfigure routes due to removal of monitor or aux
send/return. The processors will be removed with the route.
|
|
Those are superseded by b890cf73ad, which is done after
all IOChanges have been processed.
|
|
During session load, all earlier configure_processors() calls
were useless and not taking I/O into account! The Delivery ::pan_out()
needs _output I/O ports in order to correctly report the correct
port-count!
This worked in earlier versions because Config->map_parameters()
triggered [two] processor re-configs via ::listen_position_changed().
That behavior was changed in 1af123465c290664
|
|
|
|
This fixes a potential silent master-bus when re-loading a session
("mains_out" may be skipped).
|
|
Simple test/example code. Eventually this is to replace
Session::process_event() and Session::realtime_*() methods
are to become transition actions.
|
|
|
|
|
|
|
|
This is more useful than exact_equivalent() since _start offset
may not match in some cases (compounds, import, record with different
capture latencies).
However shared group editing (range, copy/paste) does result in
consistent layers and matching position+length.
|
|
|
|
This has been superseded by value_as_string() along with meta-data
from parameter-descriptor, which is supported by all standards, except VST.
|
|
|
|
|
|
|
|
|
|
name (libs version
|
|
|
|
For reasons yet to be investigated, closing stderr when using a
pipe into ffmpeg results in ffmpeg's stderr being written
verbatim in the output file.
|
|
|
|
|
|
"do-not-automatically-disconnect-selection-follows-input
|
|
|
|
|
|
|
|
Listen positions are already correctly set when the route state
is restored. The Route directly uses the Config.
This skips duplicate calls to re-configure all processors on all Routes
during RCConfiguration::map_parameters() on session-load, twice
(pfl-position, listen-position)
|
|
Delaylines are not saved in the XML and internal-return is an
invisible processor not explicitly re-added when the state is restored.
They are [re]inserted during Route::setup_invisible_processors().
So this method need to be called after restoring processor state
(indirectly via configure_processors_unlocked as needed).
PS. During route creation this call happens explicitly and on session load
hookup_io() -> Route::output_change_handler() implicitly sets this up.
|
|
Speed up route creation: add_processor() takes a process-lock
and calls configure_processors() but this is done explicitly at the
end of init() already.
|
|
|