summaryrefslogtreecommitdiff
path: root/libs/ardour/plugin_insert.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-04-12 14:10:44 +0200
committerRobin Gareus <robin@gareus.org>2017-04-12 21:14:46 +0200
commit7a489dd5532ae53ab943adc1f38c1bc24b4474c9 (patch)
tree457a868e0fe78d9c49c1f4b7f5bc2940657be6d3 /libs/ardour/plugin_insert.cc
parent64f40c09fab28c91892058845c004d12c84636fe (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.cc19
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)