commit a51cb9f8dbade84554227c8f7f126a13e7791f15
parent 1a7ed1d45c34fffdfe8afddd3b604603e64518ca
Author: falkTX <falktx@falktx.com>
Date: Sun, 26 Sep 2021 22:31:50 +0100
VST3: trigger restart component for preset and latency changes
Signed-off-by: falkTX <falktx@falktx.com>
Diffstat:
2 files changed, 32 insertions(+), 4 deletions(-)
diff --git a/distrho/src/DistrhoPluginVST3.cpp b/distrho/src/DistrhoPluginVST3.cpp
@@ -63,8 +63,7 @@
* - set factory sub_categories
* - set factory email (needs new DPF API, useful for LV2 as well)
* - do something with get_controller_class_id and set_io_mode?
- * - call component handler restart with params-changed flag after changing program (doesnt seem to be needed..?)
- * - call component handler restart with latency-changed flag when latency changes
+ * - replace dpf_message_create with host-side message creation
*/
START_NAMESPACE_DISTRHO
@@ -334,6 +333,9 @@ public:
#if DISTRHO_PLUGIN_HAS_UI
, fChangedParameterValues(nullptr)
#endif
+#if DISTRHO_PLUGIN_WANT_LATENCY
+ , fLastKnownLatency(fPlugin.getLatency())
+#endif
#if DISTRHO_PLUGIN_WANT_MIDI_OUTPUT
, fHostEventOutputHandle(nullptr)
#endif
@@ -1295,6 +1297,16 @@ public:
{
fCurrentProgram = std::round(value * fProgramCountMinusOne);
fPlugin.loadProgram(fCurrentProgram);
+
+ for (uint32_t i=0, count=fPlugin.getParameterCount(); i < count; ++i)
+ {
+ if (fPlugin.isParameterOutputOrTrigger(i))
+ continue;
+ fParameterValues[i] = fPlugin.getParameterValue(i);
+ }
+
+ if (fComponentHandler != nullptr)
+ v3_cpp_obj(fComponentHandler)->restart_component(fComponentHandler, V3_RESTART_PARAM_VALUES_CHANGED);
}
else
#endif
@@ -1518,6 +1530,9 @@ private:
#if DISTRHO_PLUGIN_HAS_UI
bool* fChangedParameterValues;
#endif
+#if DISTRHO_PLUGIN_WANT_LATENCY
+ uint32_t fLastKnownLatency;
+#endif
#if DISTRHO_PLUGIN_WANT_MIDI_INPUT
MidiEvent fMidiEvents[kMaxMidiEvents];
# if DISTRHO_PLUGIN_HAS_UI
@@ -1577,6 +1592,18 @@ private:
requestParameterValueChange(i, curValue);
}
+
+#if DISTRHO_PLUGIN_WANT_LATENCY
+ const uint32_t latency = fPlugin.getLatency();
+
+ if (fLastKnownLatency != latency)
+ {
+ fLastKnownLatency = latency;
+
+ if (fComponentHandler != nullptr)
+ v3_cpp_obj(fComponentHandler)->restart_component(fComponentHandler, V3_RESTART_LATENCY_CHANGED);
+ }
+#endif
}
// ----------------------------------------------------------------------------------------------------------------
diff --git a/examples/Latency/Makefile b/examples/Latency/Makefile
@@ -24,8 +24,9 @@ include ../../Makefile.plugins.mk
# Enable all possible plugin types
TARGETS += ladspa
-TARGETS += lv2_dsp
-TARGETS += vst
+TARGETS += lv2_sep
+TARGETS += vst2
+TARGETS += vst3
all: $(TARGETS)