diff options
author | Robin Gareus <robin@gareus.org> | 2016-07-05 19:14:25 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-07-05 23:30:21 +0200 |
commit | ac325cea25ed8fef467ae7888da131d1d166b960 (patch) | |
tree | 45b000331276a48c194d342b4e19f817e1b14abe | |
parent | e845b9f9357c4ff471c02b1f63a61275bb4a7d28 (diff) |
implement lv2:designation processing#enable (for bypass ports)
-rw-r--r-- | libs/ardour/ardour/lv2_extensions.h | 32 | ||||
-rw-r--r-- | libs/ardour/ardour/lv2_plugin.h | 2 | ||||
-rw-r--r-- | libs/ardour/lv2_plugin.cc | 16 |
3 files changed, 50 insertions, 0 deletions
diff --git a/libs/ardour/ardour/lv2_extensions.h b/libs/ardour/ardour/lv2_extensions.h index e299b0864a..64fc3bc615 100644 --- a/libs/ardour/ardour/lv2_extensions.h +++ b/libs/ardour/ardour/lv2_extensions.h @@ -139,4 +139,36 @@ typedef struct _LV2_License_Interface { @} */ +/** + @defgroup plugin provided bypass + + A port with the designation "processing#enable" must + control a plugin's internal bypass mode. + + If the port value is larger than zero the plugin processes + normally. + + If the port value is zero, the plugin is expected to bypass + all signals unmodified. + + The plugin is responsible for providing a click-free transition + between the states. + + (values less than zero are reserved for future use: + e.g click-free insert/removal of latent plugins. + Generally values <= 0 are to be treated as bypassed.) + + lv2:designation <http://ardour.org/lv2/processing#enable> ; + + @{ +*/ + +#define LV2_PROCESSING_URI "http://ardour.org/lv2/processing" +#define LV2_PROCESSING_URI_PREFIX LV2_PROCESSING_URI "#" +#define LV2_PROCESSING_URI__enable LV2_PROCESSING_URI_PREFIX "enable" + +/** + @} +*/ + #endif diff --git a/libs/ardour/ardour/lv2_plugin.h b/libs/ardour/ardour/lv2_plugin.h index 9d4e2d1f68..cbd7a7abc2 100644 --- a/libs/ardour/ardour/lv2_plugin.h +++ b/libs/ardour/ardour/lv2_plugin.h @@ -126,6 +126,8 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee bool parameter_is_output (uint32_t) const; bool parameter_is_toggled (uint32_t) const; + uint32_t designated_bypass_port (); + boost::shared_ptr<ScalePoints> get_scale_points(uint32_t port_index) const; diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc index f33c9db6ac..228fd74117 100644 --- a/libs/ardour/lv2_plugin.cc +++ b/libs/ardour/lv2_plugin.cc @@ -2703,6 +2703,22 @@ LV2Plugin::parameter_is_input(uint32_t param) const return _port_flags[param] & PORT_INPUT; } +uint32_t +LV2Plugin::designated_bypass_port () +{ +#ifdef LV2_EXTENDED + const LilvPort* port = NULL; + LilvNode* designation = lilv_new_uri (_world.world, LV2_PROCESSING_URI__enable); + port = lilv_plugin_get_port_by_designation ( + _impl->plugin, _world.lv2_InputPort, designation); + lilv_node_free(designation); + if (port) { + return lilv_port_get_index (_impl->plugin, port); + } +#endif + return UINT32_MAX; +} + void LV2Plugin::print_parameter(uint32_t param, char* buf, uint32_t len) const { |