From a80920c016127d7601bb89ba32c0beb7040c4cdf Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 28 Feb 2017 20:08:03 +0100 Subject: [PATCH] Tweak/optimize VST callback: The audioMasterAutomate callback from plugin to host does include the parameter-value. Previously there was a redundant call Plugin::parameter_changed_externally() -> get_parameter -> VSTPlugin::get_parameter() back into the plugin to query the value. calling back into the plugin from the callback, may explain oddities and/or crashes with some VSTs. --- libs/ardour/ardour/plugin.h | 2 +- libs/ardour/ardour/vst_plugin.h | 2 ++ libs/ardour/vst_plugin.cc | 8 ++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/libs/ardour/ardour/plugin.h b/libs/ardour/ardour/plugin.h index e4efb2a441..ce9c2f4268 100644 --- a/libs/ardour/ardour/plugin.h +++ b/libs/ardour/ardour/plugin.h @@ -333,7 +333,7 @@ protected: /* Called when a parameter of the plugin is changed outside of this * host's control (typical via a plugin's own GUI/editor) */ - void parameter_changed_externally (uint32_t which, float val); + virtual void parameter_changed_externally (uint32_t which, float val); /* should be overridden by plugin API specific derived types to * actually implement changing the parameter. The derived type should diff --git a/libs/ardour/ardour/vst_plugin.h b/libs/ardour/ardour/vst_plugin.h index 00bf680217..f96b35ff4b 100644 --- a/libs/ardour/ardour/vst_plugin.h +++ b/libs/ardour/ardour/vst_plugin.h @@ -40,6 +40,7 @@ class PluginInsert; class LIBARDOUR_API VSTPlugin : public Plugin { public: + friend class Session; VSTPlugin (AudioEngine &, Session &, VSTHandle *); VSTPlugin (const VSTPlugin& other); virtual ~VSTPlugin (); @@ -99,6 +100,7 @@ public: protected: + void parameter_changed_externally (uint32_t which, float val); void set_plugin (AEffect *); gchar* get_chunk (bool) const; int set_chunk (gchar const *, bool); diff --git a/libs/ardour/vst_plugin.cc b/libs/ardour/vst_plugin.cc index 44972151f0..1088e80c70 100644 --- a/libs/ardour/vst_plugin.cc +++ b/libs/ardour/vst_plugin.cc @@ -137,6 +137,14 @@ VSTPlugin::set_parameter (uint32_t which, float newval) } } +void +VSTPlugin::parameter_changed_externally (uint32_t which, float value ) +{ + ParameterChangedExternally (which, value); /* EMIT SIGNAL */ + Plugin::set_parameter (which, value); +} + + uint32_t VSTPlugin::nth_parameter (uint32_t n, bool& ok) const {