aboutsummaryrefslogtreecommitdiffstats
path: root/lv2/lv2plug.in/ns/ext/morph/morph.h
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2012-05-31 01:13:58 +0000
committerDavid Robillard <d@drobilla.net>2012-05-31 01:13:58 +0000
commit3c83ae6ed27e0486a1d5520f1674ee38ba6767c5 (patch)
tree3678a57b3c1802b60072937218d89c93973ff04d /lv2/lv2plug.in/ns/ext/morph/morph.h
parent338857fe5f2525f50c9105969d2b07cbc8415940 (diff)
downloadlv2-3c83ae6ed27e0486a1d5520f1674ee38ba6767c5.tar.xz
Add morph extension.
Diffstat (limited to 'lv2/lv2plug.in/ns/ext/morph/morph.h')
-rw-r--r--lv2/lv2plug.in/ns/ext/morph/morph.h118
1 files changed, 118 insertions, 0 deletions
diff --git a/lv2/lv2plug.in/ns/ext/morph/morph.h b/lv2/lv2plug.in/ns/ext/morph/morph.h
new file mode 100644
index 0000000..e411e10
--- /dev/null
+++ b/lv2/lv2plug.in/ns/ext/morph/morph.h
@@ -0,0 +1,118 @@
+/*
+ Copyright 2012 David Robillard <http://drobilla.net>
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+
+#ifndef LV2_MORPH_H
+#define LV2_MORPH_H
+
+#include <stdint.h>
+
+#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
+#include "lv2/lv2plug.in/ns/ext/urid/urid.h"
+
+#define LV2_MORPH_URI "http://lv2plug.in/ns/ext/morph"
+#define LV2_MORPH_PREFIX LV2_MORPH_URI "#"
+
+#define LV2_MORPH__AutoMorphPort LV2_MORPH_PREFIX "AutoMorphPort"
+#define LV2_MORPH__MorphPort LV2_MORPH_PREFIX "MorphPort"
+#define LV2_MORPH__interface LV2_MORPH_PREFIX "interface"
+#define LV2_MORPH__supportsType LV2_MORPH_PREFIX "supportsType"
+
+#ifdef __cplusplus
+extern "C" {
+#else
+# include <stdbool.h>
+#endif
+
+typedef enum {
+ LV2_MORPH_SUCCESS = 0, /**< Completed successfully. */
+ LV2_MORPH_ERR_UNKNOWN = 1, /**< Unknown error. */
+ LV2_MORPH_ERR_BAD_TYPE = 2, /**< Unsupported type. */
+ LV2_MORPH_ERR_BAD_PORT = 3 /**< Port is not morphable. */
+} LV2_Morph_Status;
+
+/** A port property. */
+typedef struct {
+ LV2_URID key; /**< Key (predicate) */
+ uint32_t size; /**< Value size */
+ LV2_URID type; /**< Value type */
+ const void* value; /**< Value (object) */
+} LV2_Morph_Property;
+
+/** The interface provided by a plugin to support morph ports. */
+typedef struct {
+ /**
+ Morph a port to a different type.
+
+ This function is in the audio threading class.
+
+ This function MAY return an error, in which case the port's type was not
+ changed. If the type was changed and the plugin has AutoMorphPort
+ ports, the host MUST check the type of every AutoMorphPort using the
+ port_type() function since they may have changed.
+
+ This function MUST gracefully handle being called for ports that are not
+ MorpPorts by ignoring the request and returning LV2_MORPH_ERR_BAD_PORT.
+
+ A NULL-terminated array of additional properties to set on the port may
+ be passed via @p properties. These properties and their values are
+ owned by the caller and valid only for the duration of the call.
+
+ @param instance The plugin instance.
+ @param port The index of the port to change the type of.
+ @param type The new port type URID.
+ @param properties Additional properties to set, or NULL.
+ */
+ LV2_Morph_Status (*morph_port)(LV2_Handle instance,
+ uint32_t port,
+ LV2_URID type,
+ const LV2_Morph_Property*const* properties);
+
+ /**
+ Get the type of an AutoMorphPort.
+
+ This function is in the audio threading class.
+
+ If the plugin has no auto morph ports, this field may be NULL. This
+ function may only be called for ports which are AutoMorphPorts.
+
+ This function MAY return 0, which indicates that the current
+ configuration of MorphPort types is invalid and the port is
+ non-functional. If the port is not lv2:connectionOptional, then the
+ plugin MUST NOT be used.
+
+ The @p properties parameter may be used to get additional properties of
+ the port. To do so, the host passes a NULL-terminated property array
+ with keys set to the desired properties and all other fields zeroed.
+ The plugin sets these fields appropriately if possible. The data
+ pointed to is owned by the plugin and only valid until the next call to
+ a method on this plugin (this mechanism is only meant for accessing
+ simple properties, such as buffer size).
+
+ @param instance The plugin instance.
+ @param port The index of the port to return the type of.
+ @param properties Additional properties to get, or NULL.
+ @return The current type of the port.
+ */
+ LV2_URID (*port_type)(LV2_Handle instance,
+ uint32_t port,
+ LV2_Morph_Property*const* properties);
+} LV2_Morph_Interface;
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* LV2_MORPH_H */