Commit graph

20168 commits

Author SHA1 Message Date
Paul Davis
4a2c27ed6d abstractui: provide a message if an event loop wakes but finds no work
(this only occurs for debug builds)
2023-04-21 12:16:37 -06:00
Paul Davis
6e65e9c82f abstractUI: pseudo-no-op: debug trace message expansion, and some reformatting 2023-04-21 12:16:37 -06:00
Paul Davis
5d023b4c60 libpbd: fix an important thinko for cross-thread signal architecture
The old code assumed that the thread that created a request buffer for a given
signal-emitting thread would be the latter thread, and thus a thread-local
pointer to the request buffer could be used. This turns out not to be true: the
GUI thread tends to be responsible for constructing the request buffers for
pre-registered threads.

That mechanism has been replaced by using a RWLock protected map using
pthread_t as the key and the request buffer as the value. This allows any
thread to create and register the request buffers used between any other pair
of threads (because the lookup always uses a pthread_t).

The symptoms of this problem were a signal emitted in an audioengine thread
that was propagated to the target thread, but when the target thread scans its
request buffers for requests, it finds nothing (because it didn't know about
the request buffer). In a sense, the signal was successfully delivered to the
target thread, but no meaningful work (i.e the signal handler) is performed.
2023-04-21 12:16:37 -06:00
Paul Davis
6eec11e50e midi surfaces: fix debug trace string 2023-04-21 12:16:37 -06:00
Paul Davis
9dc53f9400 midi surfaces: no reason for the connection handler to be virtual 2023-04-21 12:16:37 -06:00
Paul Davis
0eed821eb9 JACK: do not set the thread-init callback
Because we use the non-callback API, we can call our thread init callback
ourselves from ::process_thread(). In addition, the init_callback in JACK is
used by every thread JACK creates, including the messagebuffer thread, and this
confuses things from an Ardour POV where the callback was intended just for
realtime threads.
2023-04-21 12:16:37 -06:00
Paul Davis
b66bb61650 audioengine thread(s) should have their actual numbered name 2023-04-21 12:16:37 -06:00
Paul Davis
074516cdb4 libpbd: provide access from a ScopedConnection to the underlying UnscopedConnection 2023-04-21 12:16:37 -06:00
Paul Davis
5dc75694f0 libpbd: fix return type of Signal<>::size() 2023-04-21 12:16:37 -06:00
Robin Gareus
70e56ba4e9
Amend 2f3841a8, fix Mixbus build 2023-04-21 03:01:26 +02:00
Nil Geisweiller
57a5f96a98
NO-OP: use Tab to indent 2023-04-21 01:00:41 +02:00
Stefan Westerfeld
55dc3113f3
ace-fluidsynth: fix free_path initialization in save 2023-04-21 00:58:24 +02:00
Robin Gareus
2f3841a81d
Add support for MIDI subgroup busses
This also fixes the channel-count use by the bus,
depending on the type (aux or direct out).

Mixbus detection is also moved from the GUI to the
backend.

This also limits the number of subgroup busses to one,
so that "Remove subgroup bus" works properly.
Eventually we should allow multiple subgroup busses
for aux-sends.
2023-04-21 00:40:59 +02:00
Damien Zammit
d2a4e0ac9a import_pt: Fix PT import to session with existing tracks
Previously, the PT import would place regions on tracks
numbered from 0, therefore landing on unrelated tracks
when pre-existing tracks were present in the session.

This change skips all existing ardour tracks and imports
the PT regions onto the correctly named, appended tracks.

If any tracks exist with the same names as the ones in the import,
the new tracks get an incremented number at the end of them and
the imported regions are placed on the new track, as expected.
2023-04-20 15:45:32 +10:00
Robin Gareus
03b4635bea
Fix a small memory leak 2023-04-19 14:20:48 +02:00
Robin Gareus
7094c82e75
Add Lua bindings to std::shared_ptr<T const>
This is required after the recent RCU change to return
const shared pointers for read (295dbd8e1).
2023-04-19 01:46:58 +02:00
Paul Davis
9f52bc05de fix a minor conflict after reverting a couple of commits 2023-04-18 13:48:59 -06:00
Paul Davis
6cc116e6de Revert "add ProcessedRanges element to Session and update its contents appropriately"
This reverts commit 33047987a7.
2023-04-18 13:48:59 -06:00
Paul Davis
909a2ad639 Revert "modify API of MIDI Clock ticker to use ProcessedRange"
This reverts commit 720102f98a.
2023-04-18 13:48:59 -06:00
Paul Davis
328b4f2d1a Revert "further steps towards correct (or more usable) MClk output"
This reverts commit fe6beee68e.
2023-04-18 13:48:59 -06:00
Paul Davis
d66f3e7c9d temporal: factor out twist iteration, add debug output 2023-04-16 10:33:37 -06:00
Paul Davis
f29557348e remove debug output 2023-04-13 17:47:32 -06:00
Paul Davis
b362d2b6ba temporal: don't abort() for illegal omega value, just leave it as it was 2023-04-13 10:57:12 -06:00
Robin Gareus
dbc3008163
Add Lua Bindings for const shared_ptr lists (295dbd8e1e) 2023-04-12 20:47:35 +02:00
Robin Gareus
c3102ab8a5
Add preference to set PPQN of exported MIDI files
This also changes the default from 19200 to 1920
2023-04-12 13:12:41 +02:00
Paul Davis
def884e26c remove debug output 2023-04-10 09:18:44 -06:00
Paul Davis
f17a516cef temporal: fix comment explaining when/how TempoMap::set() can be used 2023-04-10 09:18:44 -06:00
Paul Davis
a1e9dfb672 canvas lineset: C++11-ification 2023-04-10 09:18:44 -06:00
Paul Davis
4f87506e5c do not sort lineset every time a coord is added; use RAII to create scope and sort at end 2023-04-09 14:36:03 -06:00
Robin Gareus
dde366d6ef
Fix Wreturn-std-move 2023-04-09 00:52:29 +02:00
Robin Gareus
4b1d5d9b63
Resolve boost/std unique_ptr issue 2023-04-08 13:31:50 +02:00
Damien Zammit
a27a88f9f2 import_pt: Update session range to largest audio extents imported
Tested before and after on a small audio-only PT8 session;
session range gets set to [0 to max] extent with this change.
2023-04-08 18:35:26 +10:00
Robin Gareus
295dbd8e1e
Make RCU reader return a const pointer (omnibus commit) 2023-04-08 00:15:37 +02:00
Paul Davis
e9f71824a1 temporal: change API for TempoMap::stretch_tempo()
This will likely be modified because it is actually impossible to do
what this code is attempting to do.
2023-04-07 12:56:57 -06:00
Robin Gareus
f3e13848fa
Do not modify read-only RCU copy of routelist
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().
2023-04-07 19:37:30 +02:00
Robin Gareus
979f9876a7
VST3: skip redundant parameter-changes
This reduces initial parameter-changes during session-load
due to Controllable (PluginControl) state restore after
restoring the plugin state. This likely fixes #9287
2023-04-07 00:23:39 +02:00
Ben Loftis
2713c40b7d extend midi-controllable params with new well-known-controls 2023-04-06 14:52:09 -05:00
Robin Gareus
8b59bf47df
Add a dedicated PlaylistSet type
This is to consolidate various locations that use
`typedef std::set<std::shared_ptr<Playlist>>`
throughout the codebase.
2023-04-06 02:12:32 +02:00
Robin Gareus
0b8d5d3dc5
Tweak Window system-exec, wait for process to terminate 2023-04-05 00:16:37 +02:00
Robin Gareus
d09c049fee
Clarify plugin scan log message 2023-04-05 00:16:37 +02:00
Robin Gareus
d9c35199cc CoreAudio: Update latency when buffesize changes 2023-04-04 19:26:17 +02:00
Robin Gareus
112bf87436
VST3 scan, do not clutter up Log
This prevents excessive "Cache file is valid and up-to-date."
messages in the log window. - Plugin manager has verbose log.
2023-04-04 15:44:21 +02:00
Robin Gareus
850cf3e035
Add vst3/win debug messages to investigate #9273 2023-04-04 14:00:46 +02:00
Robin Gareus
29c6817599
Check that export-channel is not empty 2023-04-04 01:35:27 +02:00
Robin Gareus
473f575a05
Catch Glib::ConvertError when checking for files
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.
2023-04-03 22:10:11 +02:00
Robin Gareus
2c4d1e011c
CaptureProcessor should not be reused
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.
2023-04-03 16:01:24 +02:00
Robin Gareus
a3a30e39df
Fix silent stem export channels (#9294)
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
2023-04-03 15:53:50 +02:00
Robin Gareus
9b23587886
Add missing processor-locks to iterate over processors 2023-04-03 15:17:12 +02:00
Robin Gareus
b03358615c
NO-OP: whitespace (re-align after boost:: -> std::) 2023-04-03 00:17:37 +02:00
Robin Gareus
4ba1ccc09b
NO-OP: use Tab to indent 2023-04-01 17:21:32 +02:00