diff options
author | Robin Gareus <robin@gareus.org> | 2017-04-12 14:10:44 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2017-04-12 21:14:46 +0200 |
commit | 7a489dd5532ae53ab943adc1f38c1bc24b4474c9 (patch) | |
tree | 457a868e0fe78d9c49c1f4b7f5bc2940657be6d3 /libs/ardour/plugin_insert.cc | |
parent | 64f40c09fab28c91892058845c004d12c84636fe (diff) |
Add a ReadOnlyControl parameter abstraction
This allows to pass a sperici Controllable alike instance around without
relying on directly exposing the Plugin instance and parameter-id.
Diffstat (limited to 'libs/ardour/plugin_insert.cc')
-rw-r--r-- | libs/ardour/plugin_insert.cc | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index 7196a6d844..e9bea95dc9 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -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) |