diff --git a/libs/ardour/ardour/plugin.h b/libs/ardour/ardour/plugin.h index b8d1cd76c0..60a6db3ab2 100644 --- a/libs/ardour/ardour/plugin.h +++ b/libs/ardour/ardour/plugin.h @@ -293,6 +293,8 @@ class LIBARDOUR_API Plugin : public PBD::StatefulDestructible, public HasLatency virtual void set_owner (SessionObject* o) { _owner = o; } SessionObject* owner() const { return _owner; } + void use_for_impulse_analysis () { _for_impulse_analysis = true; } + ARDOUR::AudioEngine& engine() const { return _engine; } ARDOUR::Session& session() const { return _session; } @@ -364,13 +366,14 @@ protected: /** Do the actual removal of a preset of the provided name */ virtual void do_remove_preset (std::string) = 0; - ARDOUR::AudioEngine& _engine; - ARDOUR::Session& _session; - PluginInfoPtr _info; - uint32_t _cycles; - std::map _presets; + ARDOUR::AudioEngine& _engine; + ARDOUR::Session& _session; + PluginInfoPtr _info; + uint32_t _cycles; + SessionObject* _owner; + bool _for_impulse_analysis; - SessionObject* _owner; + std::map _presets; private: diff --git a/libs/ardour/plugin.cc b/libs/ardour/plugin.cc index 49e75e315c..b0d809b1c3 100644 --- a/libs/ardour/plugin.cc +++ b/libs/ardour/plugin.cc @@ -92,6 +92,7 @@ Plugin::Plugin (AudioEngine& e, Session& s) , _session (s) , _cycles (0) , _owner (0) + , _for_impulse_analysis (false) , _have_presets (false) , _have_pending_stop_events (false) , _parameter_changed_since_last_preset (false) @@ -108,6 +109,7 @@ Plugin::Plugin (const Plugin& other) , _info (other._info) , _cycles (0) , _owner (other._owner) + , _for_impulse_analysis (false) , _have_presets (false) , _have_pending_stop_events (false) , _parameter_changed_since_last_preset (false) diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index 119b2c2b05..f7712f8add 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -3052,6 +3052,7 @@ PluginInsert::get_impulse_analysis_plugin() // during init() -- most notably block_size.. // not great. ret = plugin_factory(_plugins[0]); + ret->use_for_impulse_analysis (); ChanCount out (internal_output_streams ()); if (ret->get_info ()->reconfigurable_io ()) { // populate get_info ()->n_inputs and ->n_outputs diff --git a/libs/ardour/session_vst.cc b/libs/ardour/session_vst.cc index b4a584b183..bdad186598 100644 --- a/libs/ardour/session_vst.cc +++ b/libs/ardour/session_vst.cc @@ -69,6 +69,7 @@ intptr_t Session::vst_callback ( static VstTimeInfo _timeinfo; // only uses as fallback VstTimeInfo* timeinfo; int32_t newflags = 0; + bool used_for_impulse_analysis = false; if (effect && effect->ptr1) { plug = (VSTPlugin *) (effect->ptr1); @@ -77,6 +78,9 @@ intptr_t Session::vst_callback ( DEBUG_TRACE (PBD::DEBUG::VSTCallbacks, string_compose ("am callback 0x%1%2, opcode = %3%4, plugin = \"%5\"\n", std::hex, (void*) DEBUG_THREAD_SELF, std::dec, opcode, plug->name())); + if (plug->_for_impulse_analysis) { + plug = 0; + } } else { plug = 0; session = 0;