summaryrefslogtreecommitdiff
path: root/libs/surfaces
diff options
context:
space:
mode:
authorMichiel de Roo <michiel@mderoo.nl>2016-09-15 19:05:18 +0200
committerPaul Davis <paul@linuxaudiosystems.com>2016-10-13 12:08:31 -0400
commitbbb20272d5b954e288c1dd47ab5f9848ab991c8a (patch)
tree85c050e2af8b483cc8deb03dfd45a514c8980c60 /libs/surfaces
parent24eaec1fa804f20ee9c73c1a01edf0f4b83062ff (diff)
OSC added plugin activate/deactivate
Diffstat (limited to 'libs/surfaces')
-rw-r--r--libs/surfaces/osc/osc.cc70
-rw-r--r--libs/surfaces/osc/osc.h4
2 files changed, 74 insertions, 0 deletions
diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc
index fd0c9c93e5..1ce3568a44 100644
--- a/libs/surfaces/osc/osc.cc
+++ b/libs/surfaces/osc/osc.cc
@@ -593,6 +593,8 @@ OSC::register_callbacks()
REGISTER_CALLBACK (serv, "/strip/plugin/parameter", "iiif", route_plugin_parameter);
// prints to cerr only
REGISTER_CALLBACK (serv, "/strip/plugin/parameter/print", "iii", route_plugin_parameter_print);
+ REGISTER_CALLBACK (serv, "/strip/plugin/activate", "ii", route_plugin_activate);
+ REGISTER_CALLBACK (serv, "/strip/plugin/deactivate", "ii", route_plugin_deactivate);
REGISTER_CALLBACK (serv, "/strip/send/gain", "iif", route_set_send_gain_dB);
REGISTER_CALLBACK (serv, "/strip/send/fader", "iif", route_set_send_fader);
REGISTER_CALLBACK (serv, "/strip/send/enable", "iif", route_set_send_enable);
@@ -2722,6 +2724,74 @@ OSC::route_plugin_parameter_print (int ssid, int piid, int par, lo_message msg)
return 0;
}
+int
+OSC::route_plugin_activate (int ssid, int piid, lo_message msg)
+{
+ if (!session)
+ return -1;
+ boost::shared_ptr<Stripable> s = get_strip (ssid, lo_message_get_source (msg));
+
+ boost::shared_ptr<Route> r = boost::dynamic_pointer_cast<Route> (s);
+
+ if (!r) {
+ PBD::error << "OSC: Invalid Remote Control ID '" << ssid << "'" << endmsg;
+ return -1;
+ }
+
+ boost::shared_ptr<Processor> redi=r->nth_plugin (piid);
+
+ if (!redi) {
+ PBD::error << "OSC: cannot find plugin # " << piid << " for RID '" << ssid << "'" << endmsg;
+ return -1;
+ }
+
+ boost::shared_ptr<PluginInsert> pi;
+
+ if (!(pi = boost::dynamic_pointer_cast<PluginInsert>(redi))) {
+ PBD::error << "OSC: given processor # " << piid << " on RID '" << ssid << "' is not a Plugin." << endmsg;
+ return -1;
+ }
+
+ boost::shared_ptr<ARDOUR::Plugin> pip = pi->plugin();
+ pi->activate();
+
+ return 0;
+}
+
+int
+OSC::route_plugin_deactivate (int ssid, int piid, lo_message msg)
+{
+ if (!session)
+ return -1;
+ boost::shared_ptr<Stripable> s = get_strip (ssid, lo_message_get_source (msg));
+
+ boost::shared_ptr<Route> r = boost::dynamic_pointer_cast<Route> (s);
+
+ if (!r) {
+ PBD::error << "OSC: Invalid Remote Control ID '" << ssid << "'" << endmsg;
+ return -1;
+ }
+
+ boost::shared_ptr<Processor> redi=r->nth_plugin (piid);
+
+ if (!redi) {
+ PBD::error << "OSC: cannot find plugin # " << piid << " for RID '" << ssid << "'" << endmsg;
+ return -1;
+ }
+
+ boost::shared_ptr<PluginInsert> pi;
+
+ if (!(pi = boost::dynamic_pointer_cast<PluginInsert>(redi))) {
+ PBD::error << "OSC: given processor # " << piid << " on RID '" << ssid << "' is not a Plugin." << endmsg;
+ return -1;
+ }
+
+ boost::shared_ptr<ARDOUR::Plugin> pip = pi->plugin();
+ pi->deactivate();
+
+ return 0;
+}
+
// select
int
diff --git a/libs/surfaces/osc/osc.h b/libs/surfaces/osc/osc.h
index d7dec3c39b..e15eb9a454 100644
--- a/libs/surfaces/osc/osc.h
+++ b/libs/surfaces/osc/osc.h
@@ -454,6 +454,8 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
PATH_CALLBACK3(route_set_send_enable,i,i,f);
PATH_CALLBACK4(route_plugin_parameter,i,i,i,f);
PATH_CALLBACK3(route_plugin_parameter_print,i,i,i);
+ PATH_CALLBACK2_MSG(route_plugin_activate,i,i);
+ PATH_CALLBACK2_MSG(route_plugin_deactivate,i,i);
int route_mute (int rid, int yn, lo_message msg);
int route_solo (int rid, int yn, lo_message msg);
@@ -479,6 +481,8 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
int route_set_send_enable (int rid, int sid, float val, lo_message msg);
int route_plugin_parameter (int rid, int piid,int par, float val, lo_message msg);
int route_plugin_parameter_print (int rid, int piid,int par, lo_message msg);
+ int route_plugin_activate (int rid, int piid, lo_message msg);
+ int route_plugin_deactivate (int rid, int piid, lo_message msg);
//banking functions
int set_bank (uint32_t bank_start, lo_message msg);