13
0
Commit Graph

19220 Commits

Author SHA1 Message Date
2cfc013b0c temporal: fix loading tempo map from XML
We need to clear out all 4 intrusive lists before we start, not just the 3 typed ones
2022-06-16 10:18:37 -06:00
477b136e97 temporal: if requested via -Dtemporalmap, dump tempo map after any update 2022-06-16 10:18:37 -06:00
41bce61552
Cleanup bindings key replacement arrays 2022-06-15 15:32:39 +02:00
047296060f
Fix printing keybindings #8924 (brace/bracket mismatch) 2022-06-15 15:28:57 +02:00
d037dff213
NO-OP: comments and cleanup 2022-06-15 14:16:16 +02:00
471330a292
Fix uninitialized variable (leading to crashes when adding routes)
A route may be processed before latency-compensation callback
sets the route's output_latency. In this case a random offset
was added to the start/end position (via latency_offset).
2022-06-15 14:15:24 +02:00
b95bb0bdac
Prefer atomic dec_and_test (instead of atomic get+set) 2022-06-14 18:19:52 +02:00
32b41037b5 libpbd: do not use debug transmitter inside BaseUI::signal_new_request() to avoid recursion 2022-06-13 13:43:31 -06:00
590b4165e8 use exception-safe inc/dec in TransportFSM::process_events()
Note: the processing guard variable is required because this code could be re-entrant
2022-06-13 10:52:31 -06:00
20997dfa78 add new exception-safe RAII object, that increments/decrements its argument 2022-06-13 10:51:04 -06:00
842fa3c708 NOOP: comment terminology update 2022-06-13 10:20:50 -06:00
5567f30213 triggerbox: output information rather than abort 2022-06-10 13:01:56 -06:00
6bef80ae60 triggerbox: use regular transport request mechanism to get transport started
if a slot becomes active, and the transport is not rolling, it still
asks the transport to roll. however, (1) there's only 1 request across
all triggerboxen (2) the request will not be handled till the next
process cycle (3) the triggerbox returns after the request i.e. it
waits until the transport is rolling
2022-06-10 11:59:12 -06:00
52047e108d
Fix windows builds (amend 01b06906b) 2022-06-09 18:13:33 +02:00
c16b7b6dd5
MixerScene: only request actual value changes
This is otherwise only caught later in the rt-thread after
scheduling a RealTimeOperation via AutomationControl::check_rt.

There is no need to schedule cross-thread events when the
value is not about to be changed.

This can greatly reduce the number of signals emitted by
restoring a slot, which improves performance and also prevents
the EventPool from filling up with useless events.
2022-06-09 02:25:51 +02:00
01b06906b0
Mitigate "POOL OUT OF MEMORY" when batch changing controllables 2022-06-09 02:25:49 +02:00
b1b57571e7
Prevent RealTimeOperation EventQueue clogging
It can happen that the EventQueue fills up with
SessionEvent::RealTimeOperation. Those are to scheduled to be
free()ed later the GUI thread via event_loop->call_slot().

However it can happen that the GUI EventPool is full, so the request
to call Session::rt_cleanup, is never executed.

In this case the SessionEvent pool can fill up with RealTime
Operations which remain there permanently.
2022-06-09 02:25:45 +02:00
95aa39d1c4
Update call_slot() API, inform caller if slot cannot be queued
It can happen that ::get_request() returns NULL if the
EventPool is full. In that case the slot is never called.

In this case the caller can now take action.
2022-06-09 01:46:27 +02:00
03e0fe0a73
Add API to query Session event pool size 2022-06-09 00:41:23 +02:00
fac6d6bf98
Use separate plugin-cache for Apple/M1
Plugins on Apple can be multi-arch (Intel + ARM), or AUs may
be bridged by Rosetta.

A user can also run Intel binary of Ardour or M1 binary on
M1 CPUs on macOS. Each can see different plugins - notably
VST3 plugins that are Intel only can be scanned using the
Intel binary, but are later not available with the M1 build.
2022-06-07 23:49:42 +02:00
b8c3f9342a
Fix typo for ARM MIDI ringbuffer alignment 2022-06-07 23:49:42 +02:00
75fe2ce095 generic MIDI: extend select function API and make argument be bank-relative, always 2022-06-05 15:37:04 -06:00
eb4ac77a7b control protocol: allow protocol implementations to override rid selection API 2022-06-05 15:36:41 -06:00
2e027e5894 generic MIDI: re-enable the "select" function 2022-06-05 15:03:48 -06:00
33b7c38e42 control protocols: add API to control selection by RID 2022-06-05 15:03:48 -06:00
c713841f39
Re-implement RTTaskList using Graph Threads
There is no longer an extra set of rt-threads, but existing
process-graph threads are reused.

There are two main benefits to this approach: graph-threads
have a SessioEvent pool and ProcessThread buffers. They are
also joined to work-groups (on macOS), or  JACK created threads
(cgroups).
2022-06-04 17:22:50 +02:00
7219791d22
Use a GraphNode base-class for processing
The process-graph trigger_queue only needs to call
::prep() and ::run() without knowing any further details.

This is in preparation for using the graph-threads for rt-tasks
2022-06-04 15:22:05 +02:00
c1a1d12354
Disambiguate GraphNode::run and IOPlug::run 2022-06-04 15:19:18 +02:00
637971a7df
Fix Beat duration calculation
bbt_duration_at() calls bbtwalk_to_quarters() which already
subtracts the origin's position. Previously `pos` was subtracted twice.
2022-06-04 04:33:48 +02:00
ac5fb9d1f9
Revert "Debug noseq's audition issue - silent plugin processing"
This reverts commit b3497b3f8f.
2022-06-04 01:40:38 +02:00
543bb85157
Use process-graph for silencing routes during audition
Route::silence() runs plugins. With a heavy session
that relies on multi-core processing, sending silence
to processors will have to be done in parallel.
Otherwise it can result in large DSP load and xruns.

This may allow to revert b3497b3f8f, which was
a prior attempt to resolve this, before understanding
the actual cause.
2022-06-03 22:50:13 +02:00
3e1e0d94c5
Add Process Graph API for Route::silence() processing 2022-06-03 22:50:13 +02:00
57a1dbb375
Update route API for silent processing 2022-06-03 22:50:13 +02:00
191fdfda72
Leave a note for RT-Tasklists (need macOS workgroups) 2022-06-03 22:50:13 +02:00
99e785541a
Coreaudio/M1: prefer device IOThread Workgroup 2022-06-03 22:50:13 +02:00
88a035b000 temporal: changes in API to better support BBT markers 2022-06-03 13:19:56 -06:00
531db75a27 temporal: when dragging tempo/meter, move in points list as well
We spliced the point back into the tempo and meter lists correctly, but failed
to do the same thing for the same object's position in the points list.
2022-06-03 10:53:01 -06:00
7dadb1407b temporal: when copying points between TempoMaps do not double-count MusicTimePoints
They were counted as tempos, and meters, and bartimes individually, which
generated new tempo and meter points in the map, which is incorrect.
2022-06-03 10:53:01 -06:00
1b904285be temporal: improve utility of TempoMap::dump() output 2022-06-03 10:53:01 -06:00
b3497b3f8f
Debug noseq's audition issue - silent plugin processing
When auditioning, ardour's process_audition calls Route::silence
for all routes. PluginInsert::silence simply fed all [ports of all
[replicated] plugins with silence, regardless of port-mapping.
This can cause some VST2/3 plugins to change state, and enable ports
(e.g. stereo VST2 plugins on mono tracks), causing glitches.

This commit is mainly intended to investigate how significant
this glitch is when starting to audition.
2022-06-03 17:17:07 +02:00
fa8f75c145
Fix yet another oversight when coding blindly in 6a513a11f 2022-06-03 07:29:23 +02:00
5417ddd792
Fix typo in 6a513a11f 2022-06-03 07:24:42 +02:00
58979af4f2
Coreaudio: update workgroup query 2022-06-03 06:42:42 +02:00
6a513a11fa
Coreaudio: set real-time constraint before joining the workgroup
The worker thread needs to have a real-time constraint set,
before it cab be joined to the workgroup.
2022-06-03 06:42:38 +02:00
87ee609339
Amend previous commit, fix debug print format 2022-06-03 05:32:19 +02:00
fd5d290217
Fix mach thread time constraints on M1
or any system where timebase is not 1 tick per ns.
2022-06-03 05:27:42 +02:00
74ee7ee091
Add parallel realtime threads to CoreAudio workgroup
This API is only available since BigSur (11.0), see also
https://developer.apple.com/documentation/audiotoolbox/workgroup_management/adding_parallel_real-time_threads_to_audio_workgroups?language=objc
2022-06-03 04:56:28 +02:00
88e9fc3e22
Remove unneccesary include (now handled by libpbd) 2022-06-03 04:52:38 +02:00
c2cff575b7
Add debug info to track down M1 time-constraint issue 2022-06-03 03:52:43 +02:00
972389e1bd
Tweak PluginInsert::silence (used during audition, etc)
Actually run plugins (use _pending_active), and feed silence
to the plugin. Also update timing stats accordingly.
2022-06-03 01:30:02 +02:00