From ab02284fc295c581fe3e4d480e2d05281598484c Mon Sep 17 00:00:00 2001 From: Len Ovens Date: Tue, 1 Aug 2017 07:23:27 -0700 Subject: OSC: expand plugin_descriptor to split into smaller OSC messages (issue #0007433) --- libs/surfaces/osc/osc.cc | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index 954b7edb64..46446f357e 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -4077,11 +4077,6 @@ OSC::route_plugin_descriptor (int ssid, int piid, lo_message msg) { boost::shared_ptr pip = pi->plugin(); bool ok = false; - lo_message reply = lo_message_new(); - lo_message_add_int32 (reply, ssid); - lo_message_add_int32 (reply, piid); - lo_message_add_int32(reply, redi->enabled() ? 1 : 0); - for ( uint32_t ppi = 0; ppi < pip->parameter_count(); ppi++) { uint32_t controlid = pip->nth_parameter(ppi, ok); @@ -4090,6 +4085,10 @@ OSC::route_plugin_descriptor (int ssid, int piid, lo_message msg) { } boost::shared_ptr c = pi->automation_control(Evoral::Parameter(PluginAutomation, 0, controlid)); + lo_message reply = lo_message_new(); + lo_message_add_int32 (reply, ssid); + lo_message_add_int32 (reply, piid); + lo_message_add_int32 (reply, ppi + 1); ParameterDescriptor pd; pi->plugin()->get_parameter_descriptor(controlid, pd); @@ -4102,6 +4101,10 @@ OSC::route_plugin_descriptor (int ssid, int piid, lo_message msg) { flags |= pd.logarithmic ? 4 : 0; flags |= pd.sr_dependent ? 32 : 0; flags |= pd.toggled ? 64 : 0; + flags |= pip->parameter_is_input(controlid) ? 0x80 : 0; + + std::string param_desc = pi->plugin()->describe_parameter(Evoral::Parameter(PluginAutomation, 0, controlid)); + flags |= (param_desc == X_("hidden")) ? 0x100 : 0; lo_message_add_int32 (reply, flags); switch(pd.datatype) { @@ -4139,27 +4142,34 @@ OSC::route_plugin_descriptor (int ssid, int piid, lo_message msg) { lo_message_add_string(reply, _("UNKNOWN")); break; } - lo_message_add_float (reply, pd.lower); lo_message_add_float (reply, pd.upper); lo_message_add_string (reply, pd.print_fmt.c_str()); if ( pd.scale_points ) { lo_message_add_int32 (reply, pd.scale_points->size()); for ( ARDOUR::ScalePoints::const_iterator i = pd.scale_points->begin(); i != pd.scale_points->end(); ++i) { - lo_message_add_int32 (reply, i->second); + lo_message_add_float (reply, i->second); lo_message_add_string (reply, ((std::string)i->first).c_str()); } - } else { + } + else { lo_message_add_int32 (reply, 0); } if ( c ) { lo_message_add_double (reply, c->get_value()); - } else { + } + else { lo_message_add_double (reply, 0); } + + lo_send_message (get_address (msg), "/strip/plugin/descriptor", reply); + lo_message_free (reply); } - lo_send_message (get_address (msg), "/strip/plugin/descriptor", reply); + lo_message reply = lo_message_new (); + lo_message_add_int32 (reply, ssid); + lo_message_add_int32 (reply, piid); + lo_send_message (get_address (msg), "/strip/plugin/descriptor_end", reply); lo_message_free (reply); return 0; -- cgit v1.2.3