implement lv2:designation processing#enable (for bypass ports)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user