Use macro from pbd/enum_convert.h to define to_string/_to for Track enum
[ardour.git] / libs / ardour / plugin_insert.cc
index 25b0e7e46ac104b6ac536e95d13c982eed176291..e9bea95dc9067e0856d2396aca988735d0c242df 100644 (file)
@@ -98,6 +98,9 @@ PluginInsert::PluginInsert (Session& s, boost::shared_ptr<Plugin> plug)
 
 PluginInsert::~PluginInsert ()
 {
+       for (CtrlOutMap::const_iterator i = _control_outputs.begin(); i != _control_outputs.end(); ++i) {
+               boost::dynamic_pointer_cast<ReadOnlyControl>(i->second)->drop_references ();
+       }
 }
 
 void
@@ -452,7 +455,11 @@ PluginInsert::create_automatable_parameters ()
        set<Evoral::Parameter> a = _plugins.front()->automatable ();
 
        for (uint32_t i = 0; i < plugin->parameter_count(); ++i) {
-               if (!plugin->parameter_is_control (i) || !plugin->parameter_is_input (i)) {
+               if (!plugin->parameter_is_control (i)) {
+                       continue;
+               }
+               if (!plugin->parameter_is_input (i)) {
+                       _control_outputs[i] = boost::shared_ptr<ReadOnlyControl> (new ReadOnlyControl (plugin, i));
                        continue;
                }
                Evoral::Parameter param (PluginAutomation, 0, i);
@@ -2803,6 +2810,16 @@ PluginInsert::set_parameter_state_2X (const XMLNode& node, int version)
        }
 }
 
+boost::shared_ptr<ReadOnlyControl>
+PluginInsert::control_output (uint32_t num) const
+{
+       CtrlOutMap::const_iterator i = _control_outputs.find (num);
+       if (i == _control_outputs.end ()) {
+               return boost::shared_ptr<ReadOnlyControl> ();
+       } else {
+               return (*i).second;
+       }
+}
 
 string
 PluginInsert::describe_parameter (Evoral::Parameter param)
@@ -2978,6 +2995,7 @@ PluginInsert::get_impulse_analysis_plugin()
                        assert (out == internal_output_streams ());
                }
                ret->configure_io (internal_input_streams (), out);
+               ret->set_owner (_owner);
                _impulseAnalysisPlugin = ret;
        } else {
                ret = _impulseAnalysisPlugin.lock();