Commit Graph

16501 Commits

Author SHA1 Message Date
Robin Gareus
a28b1f548e Add interface to inform plugins about replicated instances
This allows for asking plugins to synchronize internal state
that isn't visible to the host between plugin instances.
2020-10-06 23:34:25 +02:00
Robin Gareus
7ab664d5a4 Properly emit Plugin::DropReferences (1/2) 2020-10-05 19:57:14 +02:00
Robin Gareus
df55af6483 Fix include path prefix 2020-10-05 19:57:08 +02:00
John Emmas
6155558c76 Add a new #include path to our MSVC project (libardour) 2020-10-03 11:23:54 +01:00
Robin Gareus
ec2eedacc6 Fix C++89 builds, (vst3 interface needs nullptr) 2020-10-02 20:42:40 +02:00
Robin Gareus
c069709939 VST3: do not create persistent view to test has_editor()
This is a better variant of 05d2a0f4a4. Mainly becuase
some plugins crash when view->remove() is called for a
view that was never attached.
2020-10-02 16:45:49 +02:00
Robin Gareus
05d2a0f4a4 VST3: explicitly close and release view
A call to VST3Plugin::has_editor() can create the view of
a plugin. If the GUI is never displayed, the view would
not have been released, which can lead to crashes when
unloading the plugin.
2020-10-02 15:29:04 +02:00
Robin Gareus
3c4801bc96 VST3: common factory instantiating and release
This may address some issues with multiple references
(and incremental releases) of a plugin's factory.
2020-10-02 15:01:01 +02:00
Robin Gareus
6e89df412a VST3: Fix another potential crash when removing a plugin 2020-10-01 23:39:59 +02:00
Robin Gareus
46e895aaad Re-brand a-* plugins as Ardour Community Effects (ACE) 2020-09-30 21:59:20 +02:00
Robin Gareus
e4cb7a14e8 VST3: reduce debug output 2020-09-30 17:10:24 +02:00
Robin Gareus
00b5b61a43 VST3: implement some restart component flags
Re-order handling of the flags, do not return early,
and log warnings for unhandled flags.
2020-09-30 17:09:32 +02:00
Robin Gareus
814eca48af VST3: disable MIDI busses before removing plugin
There is anecdotal evidence that some plugins require this
to exit cleanly.
2020-09-30 16:43:42 +02:00
Robin Gareus
8209b4b948 VST3: handle zero length plugin state 2020-09-30 04:41:59 +02:00
Robin Gareus
5e882afe10 Fix dereferencing empty vectors 2020-09-30 03:18:19 +02:00
Robin Gareus
71212e0c81 Remove debug/profile message in optimized builds 2020-09-29 16:46:29 +02:00
Robin Gareus
dcc14e9f6c Never write #ifdef'ed code after 4am 2020-09-28 17:23:32 +02:00
Robin Gareus
d4b774e935 VST3: partially revert debcda25b4 implicit notifications to self 2020-09-28 04:35:10 +02:00
Robin Gareus
ff26258461 Fix sloppy typing 2020-09-28 03:41:48 +02:00
Robin Gareus
117184c3bd Fix 32bit alignment in prev commits
this amends
  f52c5ca3ac
and
  5abe677fea
2020-09-28 03:20:14 +02:00
Robin Gareus
f52c5ca3ac ARM RTMidiBuffer alignment 2020-09-28 03:12:38 +02:00
Robin Gareus
5abe677fea Fix ARM MIDI buffer alignment
Both TimeType (8byte) and EventType (4byte) are written
in an un-aligned buffer (usually 3 byte MIDI messages).
This caused an Illegal Instruction for 32bit ARM builds
2020-09-28 01:23:02 +02:00
Robin Gareus
7e1ce160e9 ARM 32bit enum alignment (used in MIDIBuffer)
Evoral::EventType is written directly into a uint8_t buffer
by dereferncing a pointer-type:
*(reinterpret_cast<Evoral::EventType*>((uintptr_t)...)
2020-09-28 01:21:43 +02:00
Robin Gareus
37ec50cbf8 Remove C++11ism 2020-09-27 20:42:23 +02:00
Robin Gareus
5cbc5cc52a VST3: setProcessing, setActive calls are optional 2020-09-27 20:30:44 +02:00
Robin Gareus
debcda25b4 VST3: use a dedicated connection list 2020-09-27 20:29:36 +02:00
Robin Gareus
1d6d4dc7b8 VST3: add set-dirty/state-changed support 2020-09-27 18:01:50 +02:00
Robin Gareus
55df465fb3 VST3: load custom state after restoring port value
This fixes restoring the sate of Spitfire LABS and possibly
other plugins
2020-09-26 21:42:57 +02:00
Robin Gareus
6a780f9cbc VST3: fix pitchbend range 2020-09-26 21:40:09 +02:00
Robin Gareus
751db481a6 Use linear fades for loop-range cross-fades
The cross-over point of an exponential fade occurs further towards
start of the fade. This increases consistency of cross-fades moving
the cross-over point to the center of the fade.

Also looped material is likely correlated in which a linear fade
is more appropriate.
2020-09-25 17:09:25 +02:00
Robin Gareus
c08298e6d8 Fix loop cross-fade glitch #8420
This fixes an off-by one when assigning `fade_length` and
also solves an edge-case with different fade length for
fade-in/fade-out.
2020-09-25 17:09:25 +02:00
Robin Gareus
929e88aac1 VST3: Prepare to debug plugin bus/channel count 2020-09-24 18:46:03 +02:00
Robin Gareus
86be01c0f9 VST3: Ignore MIDI channel count for a bus
Assume that simply the presence of an Event bus indicates
that MIDI is supported.

This fixes Arturia synths, among others.
see also  https://forum.juce.com/t/vst3-event-bus-channel-count/25051
2020-09-24 18:38:44 +02:00
Robin Gareus
68ee66a4ee VST3: dedicated blacklist files for each architecture 2020-09-24 17:08:32 +02:00
Robin Gareus
3e209bfd33 VST3: prevent plugin copy-construction 2020-09-24 15:58:06 +02:00
Robin Gareus
c51e3ac7c7 VST3: support non-integer indexed presets 2020-09-24 15:57:14 +02:00
Robin Gareus
a060c0a2ef Revert "Expose PluginInfo index (for VST3 shells)"
This reverts commit 04e5ea0f86.
2020-09-23 23:40:33 +02:00
Robin Gareus
5a15a33839 VST3: use TUID/FUID, remove numeric index
This fixes an issue with plugin-shells, in particular those
with variable number of plugins (e.g. waves)
2020-09-23 23:39:10 +02:00
Robin Gareus
81695b10e4 Take processor-lock to update latency of inactive routes 2020-09-22 23:41:38 +02:00
Robin Gareus
40439b6cc4 Disconnect plugin-signals on plugin-deletion
Use the plugin-insert itself as ScopedConnectionList, don't
clutter up the Route's List
2020-09-22 23:41:11 +02:00
Robin Gareus
4601507165 Collect and queue processor latency updates
This is only relevant when automating a plugin-bypass, due to
ActiveChanged the following could happen from the realtime thread:

#2 ARDOUR::Session::update_latency_compensation (false, false)
#3 PBD::Signal0<void, PBD::OptionalLastValue<void> >
#4 ARDOUR::AutomationControl::actually_set_value
#5 ARDOUR::PluginInsert::PluginControl::actually_set_value
#6 ARDOUR::PluginInsert::connect_and_run
#7 ARDOUR::PluginInsert::automate_and_run

In this specific case the update_latency_compensation()
is called with process-lock held but the caller lied:
  called_from_backend=false
When a delayline update is needed, this can lead to a deadlock,
since the process-lock is acquired again.

Simply postponing the update is preferable since this also
postpones the change when actively recording.

PS. This may need special casing for freewheel export.
2020-09-22 23:35:48 +02:00
Robin Gareus
2b139ead8d Cache route's output playback latency
IO::latency iterates over the port-set retrieving the
private_latency_range of each port. The value can cached
since it can only change when connections or latency changes.

see also 40eefeddd6
2020-09-22 21:55:49 +02:00
Robin Gareus
bebca37447 Cache the latency of the metronome's port 2020-09-22 21:42:52 +02:00
Robin Gareus
650b4a6900 Only query MIDI Clock port latency when it changes
Previously there were excessive calls, since MidiClockTicker::reset()
is called in **every** cycle when Mclk is disabled.
2020-09-22 21:15:31 +02:00
Robin Gareus
ecf4a62082 Fix off-by-one in declick fade allocation #8418
This case is only relevant for large sample-rates for
the fade-in curve. see also 6f755c3c02
2020-09-22 16:44:50 +02:00
John Emmas
f4be03ac8f Move MSVC's declaration of VST3_SUPPORT to the right place
(reverts commit #ae2a1c15fa)
2020-09-22 12:21:20 +01:00
John Emmas
8895d19cd7 Build 'ardour-vst3-scanner.exe' with MSVC 2020-09-22 12:15:09 +01:00
Robin Gareus
fe73d03809 VST3: explicitly release GUI resources 2020-09-21 21:19:15 +02:00
Robin Gareus
8754090c47 VST3: cleanup component, release resources
This fixes a hang at exit (in FreeLibrary, dlclose) for some
VST3 plugins.
2020-09-20 23:06:27 +02:00
Robin Gareus
a2e366ce28 VST3: Release plugin factory before unloading plugin 2020-09-20 22:09:02 +02:00