Commit Graph

16885 Commits

Author SHA1 Message Date
Robin Gareus cc7b8b1bc5
gcc-11 compat, volatile atomic variables (1/2)
"While 'atomic' has a volatile qualifier, this is a historical
artifact and the pointer passed to it should not be volatile."

Furthermore "It is very important that all accesses to a
particular integer or pointer be performed using only this API"
(from https://developer.gnome.org/glib/2.68/glib-Atomic-Operations.html)

Hence initialization of atomic variables is changed to also use
this API, instead of directly initializing the value.

This also fixes a few cases where atomic variables were
accessed directly.

see also libs/pbd/pbd/g_atomic_compat.h
2021-03-22 15:30:07 +01:00
Robin Gareus a75c239c0c
Do not accumulate SessionEvent::Overwrite events #8576 2021-03-22 02:54:42 +01:00
Robin Gareus 0fc53d4683
Reduce signal emissions from set_scale_amplitude #8576
Playlist::ContentsChanged() is implicit.

Region::send_change()
-> Playlist::region_changed ()
-> Playlist::notify_contents_changed ()
-> Playlist::ContentsChanged () /* EMIT SIGNAL*/

This cuts the number of signals in half and also
allows to freeze/thaw the playlist to collect the
signals for each playlist into a single signal.
2021-03-22 01:04:01 +01:00
Robin Gareus 6ac8ee41af
Collect Playlist::ContentsChanged() signals #8626
With a large session:

Editor::insert_time()
 -> Playlist::shift()
 -> 4000+ regions are modified
 -> 4k calls to Region::send_change()
 -> --"-- Playlist::region_changed ()
 -> --"-- Playlist::region_bounds_changed ()
 -> --"-- Playlist::notify_contents_changed ()
 -> --"-- ContentsChanged () /* EMIT SIGNAL */
 -> --"-- DiskReader::playlist_modified ()
 -> 4k Session::request_overwrite_buffer events are queued

The butler thread processes them all in the background, but
this also enqueues 4k+ events to the GUI event pool since the
GUI subscribed to Playlist::ContentsChanged ().

However the GUI is inside Editor::insert_time() and cannot handle
events. So they keep accumulating, and eventually hits
"POOL OUT OF MEMORY - RECOMPILE WITH LARGER SIZE!"

-=-
This fixes the issue by collecting blocking ::notify_contents_changed
until all region_changed() events are processed, and a single call
to Playlist::flush_notifications() notifies the UI and disk-reader.
2021-03-21 22:45:57 +01:00
Robin Gareus d08b9eaa8d
Fix debug message: missing newline 2021-03-21 22:31:40 +01:00
Robin Gareus e6dcc47d4a
Fix export-analysis true-peak display offset when stripping silence #8578 2021-03-21 14:36:10 +01:00
Robin Gareus 954edb7bd8
Work around jack input monitoring
This works around JACK not allowing to directly access physical
input buffers by creating an explicit connection.

Ardour access input-buffers directly without connection
for input meters and AFL. This work in general since data
on those ports are always read unconditionally at the start of
each process cycle.

 jack_port_get_buffer (jack_port_by_name (c, "system:capture_1"), n);

However with jack this fails if the given port is not connected.
Due to an internal jack optimization collecting input data is
skipped for ports that have no connections.
2021-03-21 00:06:44 +01:00
Robin Gareus d4a80c18c5
Remove stale comment 2021-03-20 23:42:02 +01:00
Robin Gareus 83618c4667
Silence input-meters when port-buffer is n/a. 2021-03-20 23:09:36 +01:00
Robin Gareus f361211891
Fix crash when removing custom transients
This fixes the following edge-case:
1. Place a custom transient marker.
2. Use Rhythm Ferret to analyze region.
3. Delete custom marker from (1) while rhythm-ferret
   dialog is still open, and analyzed onset markers are visible.
2021-03-20 19:21:31 +01:00
Robin Gareus ff275b24c8
Fix analysis chunksize to be multiple of channel-count #8631 2021-03-20 16:20:20 +01:00
Robin Gareus 4bb3a896b4
Potential fix for lost/empty MIDI files when using snapshots #8552
* Copy flags of referenced file
* Do not share model with copied source!
2021-03-19 20:05:42 +01:00
Robin Gareus 4887350e0d
API consistency, prefer typedef'ed event_id_t 2021-03-19 06:29:03 +01:00
John Emmas a2b1482cad Fix a problem with ASIO buffer sizes on Windows
PortAudio uses what it calls 'default suggested latencies' but in callback streaming mode, they can result in wildly inaccurate buffer sizing (e.g. the user requests a buffer size of 128 but PortAudio actually instructs ASIO to use a much bigger size).

What we do now is to improve PortAudio's suggested latency calculation by basing it on the actual buffer size requested by the user.
2021-03-18 16:12:28 +00:00
Olivier Humbert cc79bc07ed
Update fr.po 2021-03-17 23:16:48 +01:00
Robin Gareus 01863886b5
Clean up Wself-assign - see also d91374d0db 2021-03-17 21:17:13 +01:00
Robin Gareus 48556cbd3c
Fix session-archive on macOS
By default Apple uses a private TMP folder. While mktemp
returns "/tmp/xxx" the canonical path is "/private/tmp/xxx".
This lead to issues when tmp-prefix is removed when building
the session-archive.

See also e52bdc55ad
2021-03-17 18:05:48 +01:00
Robin Gareus 71f8c8ff38
Fix -Wunused-comparison in for() loop
Fixes potential issues when loading a session where state
and IO port-count mismatches. Not sure if that can ever happen.
2021-03-17 17:59:36 +01:00
Robin Gareus ee6e7e8a7e
Fix a -Wabsolute-value, use float for gain_t calculation 2021-03-17 17:57:01 +01:00
Robin Gareus 476856a42c
Fix caching gain coefficient for monitor gain 2021-03-17 17:55:59 +01:00
Robin Gareus d91374d0db
Remove self-assign 2021-03-17 17:54:25 +01:00
Robin Gareus 7ef4a08b5e
No-OP: remove unused variables 2021-03-17 17:53:43 +01:00
Paul Davis 950f0d4c9b change return API for Location::clear_*() methods to indicate if anything was removed 2021-03-16 17:40:06 -06:00
Paul Davis 951257909f Location API to remove xrun markers 2021-03-16 16:49:38 -06:00
Paul Davis 5640f820d3 exclude xrun markers from those returned by Locations::marks_either_side()
Surveying the uses of ::markers_either_side() makes it clear that
xrun markers are never relevant to the callers.
2021-03-15 19:38:20 -06:00
Robin Gareus 31d56eb7fc
Unconditionally set diskstream name, fix setting take-name
Since 6.0 take-name was not updated correctly:
The name changes in Session::non_realtime_stop(). At that
time tracks are still record-armed and ignored name changes.

Newly created tracks also never had a diskstream name set
correctly. This only happened at session-load via set_name(),
or config change.
2021-03-15 22:36:58 +01:00
Robin Gareus bb50925998
Prevent leaking "recorder:" into the file-name
This is safeguard. It should not happen since _write_source_name
once Track::set_name () sets this unconditionally.
2021-03-15 21:28:52 +01:00
Robin Gareus bdec5aa88e
Keep I/O bundle names in sync with custom names
This fixes an issues that IObutton dropdown did not show
renamed inputs until after session-reload.
2021-03-14 18:14:56 +01:00
Robin Gareus 1832228601
Update session-archive error-code to work as documented
* return > 0 if file is not an archive
 * return < 0 if extraction failed
 * return 0 on success.
2021-03-11 19:40:41 +01:00
Robin Gareus 6e0a1d9fd7
Fix session-archive extraction on Windows
Inside the archive forward slash is used as dir-separator,
regardless of OS.
2021-03-11 19:13:51 +01:00
Robin Gareus 32bba6d7d1
Add option to not show VST3 Micro Edit ctrls by default 2021-03-10 17:44:38 +01:00
Robin Gareus 9fb21a0905
Add API to determine undo status
This is is useful to determine if an undoable action was
performed before adding additional information (e.g. selection
changes) to the undo transaction.
2021-03-10 13:51:35 +01:00
John Emmas 3b3d362d56 Add a cast when using 'abs' (to keep MSVC happy) 2021-03-09 11:33:19 +00:00
Robin Gareus 54ece22efb
Prevent denormals in Lua DSP state (LPF, Biquad) 2021-03-08 22:19:01 +01:00
Robin Gareus 9ed877f0a1
NO-OP: re-indent and reduce scope 2021-03-07 00:12:29 +01:00
Artem Alimov 5add650871 Add lua methods to control range locations
Method Session:locations():range_starts_at(pos, slop, incl)
to search range by start point with some inaccuracy delta.
Similar to mark_at(pos, slop)

Method Session:locations():add_range(start, end)
to create new range and get it for later changes.
2021-03-07 00:12:13 +03:00
John Emmas c294932142 When building 'libs/ardour/luabindings/cc' MSVC now requires me to add '/bigobj' to the compiler options 2021-03-06 11:15:39 +00:00
John Emmas b625461132 Guard some code which isn't currently buildable with VS2019
For some unknown reason, VC++2019 won't let us take the address of std::list::unique() - although other std::list members seem okay. I've spent weeks tracking this down but there's no fix available AFAICT.

I've flagged it up to the MSVC development team - just don't hold your breath !!
2021-03-06 11:12:02 +00:00
John Emmas 73b3ca30bb Add a missing 'const' qualifier to keep VC2019 happy 2021-03-03 12:25:47 +00:00
Robin Gareus 7143592e50
Fix MonitoringAutomation parameter-range 2021-03-03 02:15:25 +01:00
Robin Gareus cb0b152b35
VST3: Fix MSVC related crashes
Do not simply allocate std::vector<> space but also initialize
elements. The data is later accessed as C-pointer array: &var[0].
With most compilers simply reserving space in the vector is
sufficient in order to later access the elements directly.
However actually placing objects in the vector before referencing
them is more correct.
2021-03-02 19:05:58 +01:00
Robin Gareus 3722b8a94f
VST3: work around plugins with missing controller state
If a plugin implements Vst::IComponent::set_state() but
does not implement Vst::IEditController::setComponentState()
nor dedicated get/setState interface for the IEditController,
querying the parameters using Vst::IEditController::getParamNormalized()
returns values that do reflect the restored state.

In this case the host needs to save/restore all control-parameters,
and ignore values reported by ::getParamNormalized().

This fixes a state save/restore issue with softube.vst3, however
vstpresets are still broken: the GUI (IComponent) is updated,
however the controller isn't.
2021-03-02 03:22:25 +01:00
Robin Gareus 650f027a9b
Backport VST3 diagnostic pragma
Fixes excessive warnings when compiling on macOS.

This will be overwritten with the identical upstream fix
https://github.com/steinbergmedia/vst3_pluginterfaces/blob/master/base/falignpush.h
with the next tools/update_vst3.sh run
2021-03-01 22:14:38 +01:00
Robin Gareus 291de1d277
Fix OSX and non GCC builds 2021-03-01 16:20:38 +01:00
Robin Gareus b064b3c136 OSC: fix some compiler warnings 2021-02-28 20:01:06 +01:00
Robin Gareus 0c3eaf188b OSC: liblo compatibility fix
see also 770fd1519c
2021-02-28 20:00:04 +01:00
Robin Gareus 7195ca20e0
Update weak_libjack - https://github.com/x42/weakjack/
This fixes an issue with recent MSVC causing a compile-error
due to __attribute__((constructor))
2021-02-28 16:27:22 +01:00
Robin Gareus 770fd1519c
Liblo compat fix
Upstream liblo changed the opaque type `lo_message` from void*
to a custom struct {}.

2c1ef1c682/
2021-02-28 02:25:02 +01:00
Robin Gareus 81d833e938
Fix Windows builds, declare class-keys for bindings 2021-02-27 16:51:37 +01:00
Robin Gareus ace11bd243
Consistency: replace "x-run" with "xrun" (1/2) 2021-02-26 22:22:08 +01:00