diff options
| author | David Robillard <d@drobilla.net> | 2012-03-15 21:45:54 +0000 | 
|---|---|---|
| committer | David Robillard <d@drobilla.net> | 2012-03-15 21:45:54 +0000 | 
| commit | f07778a13c7cad74d7e9d2f404253fe67d3cd2c6 (patch) | |
| tree | b8633cb12d72ef77655415543af0af1a79ef2370 | |
| parent | e5600d750ffd32b3f5760616a197240acdfc1f46 (diff) | |
| download | lv2-f07778a13c7cad74d7e9d2f404253fe67d3cd2c6.tar.xz | |
Add new discovery API.
| -rw-r--r-- | lv2/lv2plug.in/ns/lv2core/lv2.h | 70 | ||||
| -rw-r--r-- | lv2/lv2plug.in/ns/lv2core/lv2core.doap.ttl | 75 | ||||
| -rw-r--r-- | lv2/lv2plug.in/ns/lv2core/manifest.ttl | 2 | ||||
| -rw-r--r-- | 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 <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'  |