summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2019-02-28 04:46:25 +0100
committerRobin Gareus <robin@gareus.org>2019-02-28 04:49:00 +0100
commit5d4fbcb1eae6e9b01cd32ff7e4470559bfd66b89 (patch)
tree1f5aa83ee5f029df7e174ad170136143a2c50573
parent2ee2b8481c50782faa54c306267a5800f9d5ddee (diff)
Allow to special case plugins used for IR analysis
This is relevant for some VST specifics (e.g connected pins) or similar audioMasterCallbacks that use either global or plugin-insert specific data.
-rw-r--r--libs/ardour/ardour/plugin.h15
-rw-r--r--libs/ardour/plugin.cc2
-rw-r--r--libs/ardour/plugin_insert.cc1
-rw-r--r--libs/ardour/session_vst.cc4
4 files changed, 16 insertions, 6 deletions
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<std::string, PresetRecord> _presets;
+ ARDOUR::AudioEngine& _engine;
+ ARDOUR::Session& _session;
+ PluginInfoPtr _info;
+ uint32_t _cycles;
+ SessionObject* _owner;
+ bool _for_impulse_analysis;
- SessionObject* _owner;
+ std::map<std::string, PresetRecord> _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;