aboutsummaryrefslogtreecommitdiffstats
path: root/lv2/resize-port
diff options
context:
space:
mode:
Diffstat (limited to 'lv2/resize-port')
-rw-r--r--lv2/resize-port/lv2-resize-port.doap.ttl22
-rw-r--r--lv2/resize-port/manifest.ttl9
-rw-r--r--lv2/resize-port/resize-port.h85
-rw-r--r--lv2/resize-port/resize-port.ttl64
4 files changed, 180 insertions, 0 deletions
diff --git a/lv2/resize-port/lv2-resize-port.doap.ttl b/lv2/resize-port/lv2-resize-port.doap.ttl
new file mode 100644
index 0000000..49ab3cb
--- /dev/null
+++ b/lv2/resize-port/lv2-resize-port.doap.ttl
@@ -0,0 +1,22 @@
+@prefix dcs: <http://ontologi.es/doap-changeset#> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+
+<http://lv2plug.in/ns/ext/resize-port>
+ a doap:Project ;
+ doap:name "LV2 Resize Port" ;
+ doap:shortdesc "Dynamically sized LV2 port buffers." ;
+ doap:created "2007-00-00" ;
+ doap:developer <http://drobilla.net/drobilla#me> ;
+ doap:release [
+ doap:revision "1.0" ;
+ doap:created "2012-04-17" ;
+ doap:file-release <http://lv2plug.in/spec/lv2-1.0.0.tar.bz2> ;
+ dcs:blame <http://drobilla.net/drobilla#me> ;
+ dcs:changeset [
+ dcs:item [
+ rdfs:label "Initial release."
+ ]
+ ]
+ ] .
diff --git a/lv2/resize-port/manifest.ttl b/lv2/resize-port/manifest.ttl
new file mode 100644
index 0000000..21569ae
--- /dev/null
+++ b/lv2/resize-port/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/resize-port>
+ a lv2:Specification ;
+ lv2:minorVersion 1 ;
+ lv2:microVersion 0 ;
+ rdfs:seeAlso <resize-port.ttl> .
+
diff --git a/lv2/resize-port/resize-port.h b/lv2/resize-port/resize-port.h
new file mode 100644
index 0000000..34bfe61
--- /dev/null
+++ b/lv2/resize-port/resize-port.h
@@ -0,0 +1,85 @@
+/*
+ Copyright 2007-2016 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.
+*/
+
+/**
+ @defgroup resize-port Resize Port
+
+ Dynamically sized LV2 port buffers.
+
+ @{
+*/
+
+#ifndef LV2_RESIZE_PORT_H
+#define LV2_RESIZE_PORT_H
+
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+
+#define LV2_RESIZE_PORT_URI "http://lv2plug.in/ns/ext/resize-port" ///< http://lv2plug.in/ns/ext/resize-port
+#define LV2_RESIZE_PORT_PREFIX LV2_RESIZE_PORT_URI "#" ///< http://lv2plug.in/ns/ext/resize-port#
+
+#define LV2_RESIZE_PORT__asLargeAs LV2_RESIZE_PORT_PREFIX "asLargeAs" ///< http://lv2plug.in/ns/ext/port#asLargeAs
+#define LV2_RESIZE_PORT__minimumSize LV2_RESIZE_PORT_PREFIX "minimumSize" ///< http://lv2plug.in/ns/ext/port#minimumSize
+#define LV2_RESIZE_PORT__resize LV2_RESIZE_PORT_PREFIX "resize" ///< http://lv2plug.in/ns/ext/port#resize
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** A status code for state functions. */
+typedef enum {
+ LV2_RESIZE_PORT_SUCCESS = 0, /**< Completed successfully. */
+ LV2_RESIZE_PORT_ERR_UNKNOWN = 1, /**< Unknown error. */
+ LV2_RESIZE_PORT_ERR_NO_SPACE = 2 /**< Insufficient space. */
+} LV2_Resize_Port_Status;
+
+/** Opaque data for resize method. */
+typedef void* LV2_Resize_Port_Feature_Data;
+
+/** Host feature to allow plugins to resize their port buffers. */
+typedef struct {
+ /** Opaque data for resize method. */
+ LV2_Resize_Port_Feature_Data data;
+
+ /**
+ Resize a port buffer to at least `size` bytes.
+
+ This function MAY return an error, in which case the port buffer was not
+ resized and the port is still connected to the same location. Plugins
+ MUST gracefully handle this situation.
+
+ This function is in the audio threading class.
+
+ The host MUST preserve the contents of the port buffer when resizing.
+
+ Plugins MAY resize a port many times in a single run callback. Hosts
+ SHOULD make this as inexpensive as possible.
+ */
+ LV2_Resize_Port_Status (*resize)(LV2_Resize_Port_Feature_Data data,
+ uint32_t index,
+ size_t size);
+} LV2_Resize_Port_Resize;
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* LV2_RESIZE_PORT_H */
+
+/**
+ @}
+*/
diff --git a/lv2/resize-port/resize-port.ttl b/lv2/resize-port/resize-port.ttl
new file mode 100644
index 0000000..6688f90
--- /dev/null
+++ b/lv2/resize-port/resize-port.ttl
@@ -0,0 +1,64 @@
+@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 rsz: <http://lv2plug.in/ns/ext/resize-port#> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+<http://lv2plug.in/ns/ext/resize-port>
+ a lv2:Specification ;
+ rdfs:seeAlso <resize-port.h> ,
+ <lv2-resize-port.doap.ttl> ;
+ lv2:documentation """
+<p>This extension defines a feature, rsz:resize, which allows plugins to
+dynamically resize their output port buffers.</p>
+
+<p>In addition to the dynamic feature, there are properties which describe the
+space required for a particular port buffer which can be used statically in
+data files.</p>
+""" .
+
+rsz:resize
+ a lv2:Feature ;
+ lv2:documentation """
+<p>A feature to resize output port buffers in LV2_Plugin_Descriptor::run().</p>
+
+<p>To support this feature, the host must pass an LV2_Feature to the plugin's
+instantiate method with URI LV2_RESIZE_PORT__resize and a pointer to a
+LV2_Resize_Port_Resize structure. This structure provides a resize_port
+function which plugins may use to resize output port buffers as necessary.</p>
+""" .
+
+rsz:asLargeAs
+ a rdf:Property ,
+ owl:DatatypeProperty ;
+ rdfs:domain lv2:Port ;
+ rdfs:range lv2:Symbol ;
+ rdfs:label "as large as" ;
+ lv2:documentation """
+<p>Indicates that a port requires at least as much buffer space as the port
+with the given symbol on the same plugin instance. This may be used for any
+ports, but is generally most useful to indicate an output port must be at least
+as large as some input port (because it will copy from it). If a port is
+asLargeAs several ports, it is asLargeAs the largest such port (not the sum of
+those ports' sizes).</p>
+
+<p>The host guarantees that whenever an ObjectPort's run method is called, any
+output O that is obj:asLargeAs an input I is connected to a buffer large enough
+to copy I, or NULL if the port is lv2:connectionOptional.</p>
+""" .
+
+rsz:minimumSize
+ a rdf:Property ,
+ owl:DatatypeProperty ,
+ owl:FunctionalProperty ;
+ rdfs:domain lv2:Port ;
+ rdfs:range xsd:nonNegativeInteger ;
+ rdfs:label "minimum size" ;
+ rdfs:comment """
+Indicates that a port requires a buffer at least this large, in bytes. Any
+host that supports the resize-port feature MUST connect any port with a
+minimumSize specified to a buffer at least as large as the value given for this
+property. Any host, especially those that do NOT support dynamic port
+resizing, SHOULD do so or reduced functionality may result.
+""" .