Commit Graph

27481 Commits

Author SHA1 Message Date
60262275af
Do not create automation when shifting (insert/remove time)
This fixes a bug when shift() creates automation for parameters that
can not have any automation (hidden parameters, Mixbus PRE).

The GUI (RTAV) aborts() when it finds an automation lane for
a hidden parameter.

This also cleans up shift() operations in general. Empty automation
lanes should be left alone, no guard-point at zero should be added.
2019-03-25 17:05:19 +01:00
3448f3151e
NO-OP: whitespac 2019-03-23 17:35:26 +01:00
60686a7b37
NO-OP: whitespace 2019-03-23 17:20:28 +01:00
c97116083f
Fix generic-midi controllable race-condition
Continued work after e9b36f2bea. Prefer a shared_ptr<>.

MIDIControllable::write_feedback() runs in realtime context, directly
from the main process-thread. Synchronizing weak-pointers and deletion
across threads does not work reliably. Retaining a shared_ptr<> for
controllables that are in use can solve this.
2019-03-23 16:32:48 +01:00
1d5e5b3523
Clean up MonitorProcessorControls
As opposed to regular AutomationControls these PBD:::Controllables
are not SessionObjects and don't emit a signal when the session
goes away.
2019-03-23 16:15:31 +01:00
96e991d08f
Clean out session-global controllables
This isn't strictly speaking needed, there are only a handful of
users (most notably generic-midi ctrl surface, and Selection)
2019-03-23 16:15:28 +01:00
da114c5a4d
Remove static Destroyed(*), prefer StatefulDestructable API
This also add a debug-dump method to show remaining registered
Controllables.
2019-03-23 16:15:23 +01:00
ff8bd935cf
Remove chicken/egg d'tor
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())
2019-03-23 14:31:00 +01:00
73029d45ba
Re-add global lookup for generic-midi ctrl state 2019-03-23 04:24:39 +01:00
087fd57d37
Re-add Controllable registry
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 :(
2019-03-23 04:23:43 +01:00
e9b36f2bea
Update GenericMidiControlProtocol to use shared/weak Controllable pointers
This fixes a race-condition when a controllable is deleted
while sending feedback to the device.

Previously there was a race-condition MIDIControllable::write_feedback()
triggered from rt-thread, processed in Surface-thread and deleting
a route or processor.

This is a first step, currently state-restore is not fully functional
session->controllable_by_id() does not cover all Controllables.
2019-03-23 02:09:39 +01:00
16fe286ed9
Use weak-pointer for Controllable learning 2019-03-23 01:50:45 +01:00
1dedadd03f
Remove c-pointer Controllable* registry 2019-03-23 01:42:03 +01:00
baed14c17e
Prepare PBD::Controllable API cleanup (remove only registry user) 2019-03-23 01:41:55 +01:00
9a1c22d7e1
Remove unusued API Create/Delete Binding 2019-03-23 01:28:23 +01:00
430e51065c
Update cAutomationControl values when copying state
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.
2019-03-22 14:12:30 +01:00
e398656940
Prevent crashes when copying LV2 plugin state
LV2 plugin state-loading is generally safe to perform concurrently
with running the plugin (as per LV2 spec). However concurrent run()
is not.
2019-03-22 14:09:03 +01:00
5372f9182d
NO-OP: reduce scope 2019-03-22 14:06:51 +01:00
391cb44dc6
Add ultra-insane CBR 320kbit mp3 quality 2019-03-21 21:58:08 +01:00
fb74b9e015 working but still confusing fix for ensuring that playlist shared-with data 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
2019-03-20 21:16:57 -07:00
02684009eb safety fix, in case non-Route stripable is selected 2019-03-20 20:50:29 -07:00
df90dbd7bb sort track selection into presentation order before duplicating.
This ensures that new tracks appear in the correct order (#7549)
2019-03-20 20:42:02 -07:00
2c7b632824 fix Session::new_route_from_template() to use playlist IDs and not names. This also fixes #7674 2019-03-20 20:09:17 -07:00
851388e0b4 remove "rename_playlist" argument from Route::set_name_in_state().
We no longer find playlists by name when constructing tracks, so
the name of the playlist is not relevant
2019-03-20 20:02:07 -07:00
acbd12c885 fix all surfaces' available action menus
Note: this replicated code is ridiculous
2019-03-20 14:23:23 -07:00
cf2fa0ae84 fix Mackie available action menu 2019-03-20 13:05:35 -07:00
51df70b405 ActionManager::get_all_actions() no longer includes <Actions> in the paths it returns, part 3 (GUI) 2019-03-20 11:15:47 -07:00
94d859e30d ActionManager::get_all_actions() no longer includes <Actions> in the paths it returns, part 2 (surface support) 2019-03-20 11:15:34 -07:00
df29e57cb4 ActionManager::get_all_actions() no longer includes <Actions> in the paths it returns, part 1 2019-03-20 11:15:22 -07:00
ed97a290db make ::ardour_action_name() private to Bindings, because nothing else uses it and it semi-exposes the <Actions> nonsense 2019-03-20 11:12:06 -07:00
fd3b8f79af do not create a (throwaway) playlist during track creation 2019-03-19 15:43:06 -07:00
50604d83de
Fix incorrectly saved un-used playlists
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.
2019-03-19 22:05:06 +01:00
c2e0fe8b3f
Add some more playlist Lua bindings 2019-03-19 22:05:06 +01:00
21e2b353c1 Add an exception handler for access_action() used by control surfaces and Lua. 2019-03-19 11:52:19 -05:00
957393c435 Compiler fix for 201110. 2019-03-19 11:24:26 -05:00
4667ca962b Mixer/show-editor is now Common/show-editor 2019-03-19 10:42:05 -05:00
21110444c1 use a new unhandled (thus far) exception rather than ::abort() when an action is undefined 2019-03-19 08:29:30 -07:00
a3986f703d reorder #include directives 2019-03-18 22:58:24 -07:00
842faa5b6e
Add example script to list Playlists 2019-03-19 05:32:12 +01:00
1172ff4948
Add Lua bindings for SessionPlaylists 2019-03-19 05:27:34 +01:00
1f7db60389
Add convenience methods (mainly for scripting) 2019-03-19 05:27:30 +01:00
c09c7bab52
Update GUI, use Session::playlists() getter (2/2) 2019-03-19 05:14:40 +01:00
cf11e11fc5
Remove global Session::playlists variable, use getter method (1/2)
Global variables that can written by anyone are to be avoided.
This also simplifies exposing SessionPlaylists as Lua bindings.
2019-03-19 05:14:00 +01:00
ab79165893
Fix Playlist refcount when deleting track
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.
2019-03-19 03:08:06 +01:00
7054b2ffc7 switch remaining use of Common/ToggleMixerList to Mixer/ToggleMixerList 2019-03-18 10:58:02 -07:00
7d71729237 compute correct size for working buffers used by compound regions during disk refills 2019-03-18 07:39:23 -07:00
b53d80a7d4 make PlaybackBuffer<T>'s power-of-two size computation available to others 2019-03-18 07:39:23 -07:00
4706201425
NO-OP: Use API to set/test state-of-the-state 2019-03-18 15:36:58 +01:00
bd9d848058 remove debug output 2019-03-17 22:22:09 -07:00
09fd380948
Avoid calling rt-methods from non-rt context
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)
2019-03-18 06:15:12 +01:00