aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2012-03-15 21:45:54 +0000
committerDavid Robillard <d@drobilla.net>2012-03-15 21:45:54 +0000
commitf07778a13c7cad74d7e9d2f404253fe67d3cd2c6 (patch)
treeb8633cb12d72ef77655415543af0af1a79ef2370
parente5600d750ffd32b3f5760616a197240acdfc1f46 (diff)
downloadlv2-f07778a13c7cad74d7e9d2f404253fe67d3cd2c6.tar.xz
Add new discovery API.
-rw-r--r--lv2/lv2plug.in/ns/lv2core/lv2.h70
-rw-r--r--lv2/lv2plug.in/ns/lv2core/lv2core.doap.ttl75
-rw-r--r--lv2/lv2plug.in/ns/lv2core/manifest.ttl2
-rw-r--r--lv2/lv2plug.in/ns/lv2core/wscript2
4 files changed, 110 insertions, 39 deletions
diff --git a/lv2/lv2plug.in/ns/lv2core/lv2.h b/lv2/lv2plug.in/ns/lv2core/lv2.h
index 9df9ac1..b255404 100644
--- a/lv2/lv2plug.in/ns/lv2core/lv2.h
+++ b/lv2/lv2plug.in/ns/lv2core/lv2.h
@@ -348,6 +348,12 @@ typedef struct _LV2_Descriptor {
/**
Prototype for plugin accessor function.
+
+ This is part of the old discovery API, which has been replaced due to being
+ inadequate for some plugins. It is limited because the bundle path is not
+ available during discovery, and it relies on non-portable shared library
+ constructors/destructors. However, this API is still supported and plugins
+ are not required to migrate.
Plugins are discovered by hosts using RDF data (not by loading libraries).
See http://lv2plug.in for details on the discovery process, though most
@@ -371,11 +377,73 @@ LV2_SYMBOL_EXPORT
const LV2_Descriptor * lv2_descriptor(uint32_t index);
/**
- Type of the lv2_descriptor() function in a plugin library.
+ Type of the lv2_descriptor() function in a library (old discovery API).
*/
typedef const LV2_Descriptor *
(*LV2_Descriptor_Function)(uint32_t index);
+/**
+ Handle for a library descriptor.
+*/
+typedef void* LV2_Lib_Handle;
+
+/**
+ Descriptor for a plugin library.
+
+ To access a plugin library, the host creates an LV2_Lib_Descriptor via the
+ lv2_lib_descriptor() function in the shared object.
+*/
+typedef struct {
+ /**
+ Opaque library data which must be passed as the first parameter to all
+ the methods of this struct.
+ */
+ LV2_Lib_Handle handle;
+
+ /**
+ The total size of this struct. This allows for this struct to be
+ expanded in the future if necessary. This MUST be set by the library to
+ sizeof(LV2_Lib_Descriptor). The host MUST NOT access any fields of this
+ struct beyond get_plugin() unless this field indicates they are present.
+ */
+ uint32_t size;
+
+ /**
+ Destroy this library descriptor and free all related resources.
+ */
+ void (*cleanup)(LV2_Lib_Handle handle);
+
+ /**
+ Plugin accessor.
+
+ Plugins are accessed by index using values from 0 upwards. Out of range
+ indices MUST result in this function returning NULL, so the host can
+ enumerate plugins by increasing @a index until NULL is returned.
+ */
+ const LV2_Descriptor * (*get_plugin)(LV2_Lib_Handle handle,
+ uint32_t index);
+} LV2_Lib_Descriptor;
+
+/**
+ Prototype for library accessor function.
+
+ This is the entry point for a plugin library. Hosts load this symbol from
+ the library and call this function to obtain a library descriptor which can
+ be used to access all the contained plugins. The returned object must not
+ be destroyed (using LV2_Lib_Descriptor::cleanup()) until all plugins loaded
+ from that library have been destroyed.
+*/
+const LV2_Lib_Descriptor *
+lv2_lib_descriptor(const char * bundle_path,
+ const LV2_Feature *const * features);
+
+/**
+ Type of the lv2_lib_descriptor() function in an LV2 library.
+*/
+typedef const LV2_Lib_Descriptor *
+(*LV2_Lib_Descriptor_Function)(const char * bundle_path,
+ const LV2_Feature *const * features);
+
#ifdef __cplusplus
}
#endif
diff --git a/lv2/lv2plug.in/ns/lv2core/lv2core.doap.ttl b/lv2/lv2plug.in/ns/lv2core/lv2core.doap.ttl
index 41958a8..752349c 100644
--- a/lv2/lv2plug.in/ns/lv2core/lv2core.doap.ttl
+++ b/lv2/lv2plug.in/ns/lv2core/lv2core.doap.ttl
@@ -25,15 +25,18 @@
doap:shortdesc "An audio plugin interface specification." ;
doap:programming-language "C" ;
doap:release [
- doap:revision "6.5" ;
- doap:created "2012-03-10" ;
+ doap:revision "6.7" ;
+ doap:created "2012-03-15" ;
dcs:blame <http://drobilla.net/drobilla#me> ;
dcs:changeset [
dcs:item [
rdfs:label "Fix LV2_SYMBOL_EXPORT and lv2_descriptor prototype for Windows." ;
- rdfs:label "Add lv2:isParameter, lv2:hasParameter, lv2:latency, and lv2:freeWheeling."
- ]
- ]
+ ] , [
+ rdfs:label "Add lv2:isParameter, lv2:hasParameter, lv2:latency, and lv2:freeWheeling." ;
+ ] , [
+ rdfs:label "Add new discovery API which allows libraries to read bundle files during discovery, makes library construction/destruction explicit, and adds extensibility to prevent future breakage." ;
+ ] ;
+ ] ;
] , [
doap:revision "6.0" ;
doap:created "2011-11-21" ;
@@ -41,19 +44,19 @@
dcs:blame <http://drobilla.net/drobilla#me> ;
dcs:changeset [
dcs:item [
- rdfs:label "Rename core.lv2 and lv2.ttl to lv2core.lv2 and lv2core.ttl to adhere to modern conventions."
+ rdfs:label "Rename core.lv2 and lv2.ttl to lv2core.lv2 and lv2core.ttl to adhere to modern conventions." ;
] , [
- rdfs:label "Add lv2:extensionData and lv2:ExtensionData for plugins to indicate that they support some URI for extension_data()."
+ rdfs:label "Add lv2:extensionData and lv2:ExtensionData for plugins to indicate that they support some URI for extension_data()." ;
] , [
- rdfs:label "Remove lv2config in favour of the simple convention that specifications install headers to standard URI-based paths."
+ rdfs:label "Remove lv2config in favour of the simple convention that specifications install headers to standard URI-based paths." ;
] , [
- rdfs:label "Switch to the ISC license, a simple BSD-style license (with permission of all contributors to lv2.h and its ancestor, ladspa.h)."
+ rdfs:label "Switch to the ISC license, a simple BSD-style license (with permission of all contributors to lv2.h and its ancestor, ladspa.h)." ;
] , [
- rdfs:label "Make lv2core.ttl a valid OWL 2 DL ontology."
+ rdfs:label "Make lv2core.ttl a valid OWL 2 DL ontology." ;
] , [
- rdfs:label "Improve documentation."
- ]
- ]
+ rdfs:label "Improve documentation." ;
+ ] ;
+ ] ;
] , [
doap:revision "4.0" ;
doap:created "2011-03-18" ;
@@ -61,33 +64,33 @@
dcs:blame <http://drobilla.net/drobilla#me> ;
dcs:changeset [
dcs:item [
- rdfs:label "Make doap:license suggested, but not required (for wrappers)."
+ rdfs:label "Make doap:license suggested, but not required (for wrappers)." ;
] , [
- rdfs:label "Define lv2:binary (MUST be in manifest.ttl)."
+ rdfs:label "Define lv2:binary (MUST be in manifest.ttl)." ;
] , [
- rdfs:label "Define lv2:minorVersion and lv2:microVersion (MUST be in manifest.ttl)."
+ rdfs:label "Define lv2:minorVersion and lv2:microVersion (MUST be in manifest.ttl)." ;
] , [
- rdfs:label "Define lv2:documentation and use it to document lv2core."
+ rdfs:label "Define lv2:documentation and use it to document lv2core." ;
] , [
- rdfs:label "Add lv2:FunctionPlugin and lv2:ConstantPlugin classes."
+ rdfs:label "Add lv2:FunctionPlugin and lv2:ConstantPlugin classes." ;
] , [
- rdfs:label "Move lv2:AmplifierPlugin under lv2:DynamicsPlugin."
+ rdfs:label "Move lv2:AmplifierPlugin under lv2:DynamicsPlugin." ;
] , [
- rdfs:label "Loosen domain of lv2:optionalFeature and lv2:requiredFeature (to allow re-use in extensions)."
+ rdfs:label "Loosen domain of lv2:optionalFeature and lv2:requiredFeature (to allow re-use in extensions)." ;
] , [
- rdfs:label "Add generic lv2:Resource and lv2:PluginBase classes."
+ rdfs:label "Add generic lv2:Resource and lv2:PluginBase classes." ;
] , [
- rdfs:label "Fix definition of lv2:minimum etc. (used for values, not scale points)."
+ rdfs:label "Fix definition of lv2:minimum etc. (used for values, not scale points)." ;
] , [
- rdfs:label "More precisely define properties with OWL."
+ rdfs:label "More precisely define properties with OWL." ;
] , [
- rdfs:label "Move project metadata to manifest."
+ rdfs:label "Move project metadata to manifest." ;
] , [
- rdfs:label "Add lv2:enumeration port property."
+ rdfs:label "Add lv2:enumeration port property." ;
] , [
- rdfs:label "Define run() pre-roll special case (sample_count == 0)."
- ]
- ]
+ rdfs:label "Define run() pre-roll special case (sample_count == 0)." ;
+ ] ;
+ ] ;
] , [
doap:revision "3.0" ;
doap:created "2008-11-08" ;
@@ -95,13 +98,13 @@
dcs:blame <http://drobilla.net/drobilla#me> ;
dcs:changeset [
dcs:item [
- rdfs:label "Require that serialisations refer to ports by symbol rather than index."
+ rdfs:label "Require that serialisations refer to ports by symbol rather than index." ;
] , [
- rdfs:label "Minor stylistic changes to lv2.ttl."
+ rdfs:label "Minor stylistic changes to lv2.ttl." ;
] , [
- rdfs:label "No header changes."
- ]
- ]
+ rdfs:label "No header changes." ;
+ ] ;
+ ] ;
] , [
doap:revision "2.0" ;
doap:created "2008-02-10" ;
@@ -109,9 +112,9 @@
dcs:blame <http://drobilla.net/drobilla#me> ;
dcs:changeset [
dcs:item [
- rdfs:label "Initial release."
- ]
- ]
+ rdfs:label "Initial release." ;
+ ] ;
+ ] ;
] ;
doap:developer <http://plugin.org.uk/swh.xrdf#me> ,
<http://drobilla.net/drobilla#me> ;
diff --git a/lv2/lv2plug.in/ns/lv2core/manifest.ttl b/lv2/lv2plug.in/ns/lv2core/manifest.ttl
index 9837ba5..7ff95a2 100644
--- a/lv2/lv2plug.in/ns/lv2core/manifest.ttl
+++ b/lv2/lv2plug.in/ns/lv2core/manifest.ttl
@@ -6,5 +6,5 @@
<http://lv2plug.in/ns/lv2core>
a doap:Project , lv2:Specification , owl:Ontology ;
lv2:minorVersion 6 ;
- lv2:microVersion 5 ;
+ lv2:microVersion 7 ;
rdfs:seeAlso <lv2core.ttl> , <lv2core.doap.ttl> . \ No newline at end of file
diff --git a/lv2/lv2plug.in/ns/lv2core/wscript b/lv2/lv2plug.in/ns/lv2core/wscript
index b485d7d..3e80259 100644
--- a/lv2/lv2plug.in/ns/lv2core/wscript
+++ b/lv2/lv2plug.in/ns/lv2core/wscript
@@ -8,7 +8,7 @@ import waflib.Scripting as Scripting
import glob
# Version of this package (even if built as a child)
-LV2CORE_VERSION = '6.1'
+LV2CORE_VERSION = '6.7'
# Variables for 'waf dist'
APPNAME = 'lv2core'