diff --git a/libs/ardour/ardour/plugin_insert.h b/libs/ardour/ardour/plugin_insert.h index 3b76d2588f..d9b85fe9c9 100644 --- a/libs/ardour/ardour/plugin_insert.h +++ b/libs/ardour/ardour/plugin_insert.h @@ -140,6 +140,7 @@ class PluginInsert : public Processor int32_t count_for_configuration (ChanCount in, ChanCount out) const; boost::shared_ptr plugin_factory (boost::shared_ptr); + void add_plugin_with_activation (boost::shared_ptr); }; } // namespace ARDOUR diff --git a/libs/ardour/ladspa_plugin.cc b/libs/ardour/ladspa_plugin.cc index d9a1ad074b..cc532c61ca 100644 --- a/libs/ardour/ladspa_plugin.cc +++ b/libs/ardour/ladspa_plugin.cc @@ -634,6 +634,9 @@ LadspaPlugin::run_in_place (nframes_t nframes) _control_data[i] = _shadow_data[i]; } } + + assert (_was_activated); + _descriptor->run (_handle, nframes); } diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index 7174963ca8..650c929afb 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -92,7 +92,7 @@ PluginInsert::set_count (uint32_t num) uint32_t diff = num - _plugins.size(); for (uint32_t n = 0; n < diff; ++n) { - _plugins.push_back (plugin_factory (_plugins[0])); + add_plugin_with_activation (_plugins[0]); if (require_state) { /* XXX do something */ @@ -762,10 +762,10 @@ PluginInsert::set_state(const XMLNode& node, int version) if (_plugins.size() != count) { - _plugins.push_back (plugin); + add_plugin_with_activation (plugin); for (uint32_t n = 1; n < count; ++n) { - _plugins.push_back (plugin_factory (plugin)); + add_plugin_with_activation (plugin_factory (plugin)); } } @@ -1003,3 +1003,12 @@ PluginInsert::collect_signal_for_analysis(nframes_t nframes) _signal_analysis_collect_nframes_max = nframes; } +/** Add a plugin to our list and activate it if we have already been activated */ +void +PluginInsert::add_plugin_with_activation (boost::shared_ptr plugin) +{ + _plugins.push_back (plugin); + if (active()) { + plugin->activate (); + } +}