aboutsummaryrefslogtreecommitdiffstats
path: root/lv2/lv2plug.in/ns/ext/morph
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
parent338857fe5f2525f50c9105969d2b07cbc8415940 (diff)
downloadlv2-3c83ae6ed27e0486a1d5520f1674ee38ba6767c5.tar.xz
Add morph extension.
Diffstat (limited to 'lv2/lv2plug.in/ns/ext/morph')
-rw-r--r--lv2/lv2plug.in/ns/ext/morph/manifest.ttl9
-rw-r--r--lv2/lv2plug.in/ns/ext/morph/morph.h118
-rw-r--r--lv2/lv2plug.in/ns/ext/morph/morph.ttl82
l---------lv2/lv2plug.in/ns/ext/morph/wscript1
4 files changed, 210 insertions, 0 deletions
diff --git a/lv2/lv2plug.in/ns/ext/morph/manifest.ttl b/lv2/lv2plug.in/ns/ext/morph/manifest.ttl
new file mode 100644
index 0000000..1b578c0
--- /dev/null
+++ b/lv2/lv2plug.in/ns/ext/morph/manifest.ttl
@@ -0,0 +1,9 @@
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+
+<http://lv2plug.in/ns/ext/morph>
+ a lv2:Specification ;
+ lv2:minorVersion 0 ;
+ lv2:microVersion 0 ;
+ rdfs:seeAlso <morph.ttl> .
+
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 */
diff --git a/lv2/lv2plug.in/ns/ext/morph/morph.ttl b/lv2/lv2plug.in/ns/ext/morph/morph.ttl
new file mode 100644
index 0000000..39e1ced
--- /dev/null
+++ b/lv2/lv2plug.in/ns/ext/morph/morph.ttl
@@ -0,0 +1,82 @@
+@prefix dcs: <http://ontologi.es/doap-changeset#> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix owl: <http://www.w3.org/2002/07/owl#> .
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+<http://lv2plug.in/ns/ext/morph>
+ a lv2:Specification ,
+ lv2:Feature ;
+ rdfs:seeAlso <morph.h> ,
+ <../../meta/meta.ttl> ;
+ doap:name "LV2 Morph Port Extension" ;
+ doap:shortdesc "Ports that can dynamically change type." ;
+ doap:created "2012-05-22" ;
+ doap:developer <http://drobilla.net/drobilla#me> ;
+ lv2:documentation """
+<p>This extension defines two port types: morph:MorphPort, which has a
+host-configurable type, and morph:AutoMorphPort, which may change type based on
+the type of other ports. These ports always have a default type and work
+normally work in hosts that are unaware of this extension. Thus, this
+extension provides a backwards compatibility mechanism which allows plugins to
+use new port types but gracefully fall back to a default type in hosts that do
+not support them.</p>
+""" .
+
+morph:MorphPort
+ a rdfs:Class ,
+ owl:Class ;
+ rdfs:subClassOf lv2:Port ;
+ rdfs:label "Morph Port" ;
+ lv2:documentation """
+<p>Ports of this type MUST have another type which defines the default buffer
+format (e.g. lv2:ControlPort) but can be dynamically changed to a different
+type in hosts that support morph:interface.</p>
+
+<p>The host may change the type of a MorphPort by calling
+LV2_Morph_Port_Interface::morph_port(). If the plugin has any
+morph:AutoMorphPort ports, the host MUST check their types after changing any
+port type since they may have changed.</p>
+""" .
+
+morph:AutoMorphPort
+ a rdfs:Class ,
+ owl:Class ;
+ rdfs:subClassOf lv2:Port ;
+ rdfs:label "Auto Morph Port" ;
+ lv2:documentation """
+<p>Ports of this type MUST have another type which defines the default buffer
+format (e.g. lv2:ControlPort) but may dynamically change types based on the
+configured types of any morph:MorphPort ports on the same plugin instance.</p>
+
+<p>The type of a port may only change in response to a call to
+LV2_Morph_Port_Interface::morph_port(), i.e. ports can only change type as a
+result of an explicit host request. Whenever any port type on the instance
+changes, the host MUST check the type of all morph:AutoMorphPort ports on the
+instance before calling run() again, since they may have changed.</p>
+
+<p>This is mainly useful for outputs whose type depends on the type of
+corresponding inputs.</p>
+""" .
+
+morph:interface
+ a lv2:ExtensionData ;
+ lv2:documentation """
+<p>The interface provided by the plugin to support morph ports. To support
+this extension, the plugin must return a LV2_Morph_Port_Interface from
+LV2_Descriptor::extension_data() when it is called with this URI
+(LV2_STATE__interface).</p> """ .
+
+morph:supportsType
+ a rdf:Property ,
+ owl:ObjectProperty ;
+ rdfs:domain morph:MorphPort ;
+ rdfs:label "supports type" ;
+ lv2:documentation """
+<p>Indicates that a port supports being switched to a certain type via
+morph:interface.</p>
+""" .
diff --git a/lv2/lv2plug.in/ns/ext/morph/wscript b/lv2/lv2plug.in/ns/ext/morph/wscript
new file mode 120000
index 0000000..7e2c01b
--- /dev/null
+++ b/lv2/lv2plug.in/ns/ext/morph/wscript
@@ -0,0 +1 @@
+../../../../../ext.wscript \ No newline at end of file