diff options
Diffstat (limited to 'lv2/resize-port')
-rw-r--r-- | lv2/resize-port/lv2-resize-port.doap.ttl | 22 | ||||
-rw-r--r-- | lv2/resize-port/manifest.ttl | 9 | ||||
-rw-r--r-- | lv2/resize-port/resize-port.h | 85 | ||||
-rw-r--r-- | lv2/resize-port/resize-port.ttl | 64 |
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. +""" . |