From f07778a13c7cad74d7e9d2f404253fe67d3cd2c6 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Thu, 15 Mar 2012 21:45:54 +0000 Subject: Add new discovery API. --- lv2/lv2plug.in/ns/lv2core/lv2.h | 70 +++++++++++++++++++++++++++- lv2/lv2plug.in/ns/lv2core/lv2core.doap.ttl | 75 ++++++++++++++++-------------- lv2/lv2plug.in/ns/lv2core/manifest.ttl | 2 +- lv2/lv2plug.in/ns/lv2core/wscript | 2 +- 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 ; 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 ; 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 ; 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 ; 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 ; dcs:changeset [ dcs:item [ - rdfs:label "Initial release." - ] - ] + rdfs:label "Initial release." ; + ] ; + ] ; ] ; doap:developer , ; 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 @@ a doap:Project , lv2:Specification , owl:Ontology ; lv2:minorVersion 6 ; - lv2:microVersion 5 ; + lv2:microVersion 7 ; rdfs:seeAlso , . \ 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' -- cgit v1.2.1