From e417a0f26c43293b92e5086129d41b29560f8daa Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 22 Jul 2011 20:55:44 +0000 Subject: Add urid extension from Gabriel M. Beddingfield. --- Doxyfile | 1 + ext/urid.lv2/manifest.ttl | 9 +++++ ext/urid.lv2/urid.h | 99 +++++++++++++++++++++++++++++++++++++++++++++++ ext/urid.lv2/urid.ttl | 57 +++++++++++++++++++++++++++ wscript | 1 + 5 files changed, 167 insertions(+) create mode 100644 ext/urid.lv2/manifest.ttl create mode 100644 ext/urid.lv2/urid.h create mode 100644 ext/urid.lv2/urid.ttl diff --git a/Doxyfile b/Doxyfile index 9244400..01b5104 100644 --- a/Doxyfile +++ b/Doxyfile @@ -585,6 +585,7 @@ INPUT = \ ext/pui-gtk.lv2/pui-gtk.h \ ext/uri-map.lv2/uri-map.h \ ext/uri-unmap.lv2/uri-unmap.h \ + ext/urid.lv2/urid.h \ extensions/ui.lv2/ui.h # This tag can be used to specify the character encoding of the source files diff --git a/ext/urid.lv2/manifest.ttl b/ext/urid.lv2/manifest.ttl new file mode 100644 index 0000000..28b54e2 --- /dev/null +++ b/ext/urid.lv2/manifest.ttl @@ -0,0 +1,9 @@ +@prefix lv2: . +@prefix rdfs: . +@prefix urid: . + + + a lv2:Specification ; + lv2:minorVersion 0 ; + lv2:microVersion 1 ; + rdfs:seeAlso . diff --git a/ext/urid.lv2/urid.h b/ext/urid.lv2/urid.h new file mode 100644 index 0000000..cc444b2 --- /dev/null +++ b/ext/urid.lv2/urid.h @@ -0,0 +1,99 @@ +/* + Copyright 2011 Gabriel M. Beddingfield + Copyright 2008-2011 David Robillard + + 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. +*/ + +/** + @file + C header for the LV2 URID extension +*/ + +#ifndef LV2_URID_H +#define LV2_URID_H + +#define LV2_URID_URI "http://lv2plug.in/ns/ext/urid" + +#include + +/** + Opaque pointer to host data. +*/ +typedef void* LV2_URID_Callback_Data; + +/** + URI mapped to an integer. +*/ +typedef uint32_t LV2_URID; + +/** + URID Feature. + + To support this feature the host must pass an LV2_Feature struct to the + plugin's instantiate method with URI "http://lv2plug.in/ns/ext/urid#URIMap" + and data pointed to an instance of this struct. +*/ +typedef struct { + + /** + Opaque pointer to host data. + + The plugin MUST pass this to any call to functions in this struct. + Otherwise, it must not be interpreted in any way. + */ + LV2_URID_Callback_Data callback_data; + + /** + Get the numeric ID of a URI from the host. + + If the ID does not already exist, it will be created. + + @param callback_data Must be the callback_data member of this struct. + @param uri The URI to be mapped to an integer ID. + + This function is referentially transparent; any number of calls with the + same arguments is guaranteed to return the same value over the life of a + plugin instance. However, this function is not necessarily very + fast or RT-safe: plugins SHOULD cache any IDs they might need in + performance critical situations. + + The return value 0 is reserved and indicates that an ID for that URI + could not be created for whatever reason. However, hosts SHOULD NOT + return 0 from this function in non-exceptional circumstances (i.e. the + URI map SHOULD be dynamic). + */ + LV2_URID (*map_uri)(LV2_URID_Callback_Data callback_data, + const char* uri); + + /** + Get the URI for a given numeric ID from the host. + + @param callback_data Must be the callback_data member of this struct. + @param id The ID to be mapped back to the URI string. + + Returns NULL if @c id is not yet mapped. Otherwise, the corresponding + URI is returned in a canonical form. This may not be the exact same + string that was originally passed to map_uri(), but it will be an + identical URI according to the URI spec. A non-NULL return for a given + @c id will always be the same for the life of the plugin. Plugins that + intend to perform string comparison on unmapped URIs should first + canonicalise URI strings with a call to map_uri() followed by a call to + unmap_uri(). + */ + const char* (*unmap_uri)(LV2_URID_Callback_Data callback_data, + LV2_URID urid); + +} LV2_URID_Feature; + +#endif /* LV2_URID_H */ diff --git a/ext/urid.lv2/urid.ttl b/ext/urid.lv2/urid.ttl new file mode 100644 index 0000000..f32ed99 --- /dev/null +++ b/ext/urid.lv2/urid.ttl @@ -0,0 +1,57 @@ +# LV2 URID Extension +# Copyright 2011 Gabriel M. Beddingfield +# Copyright 2008-2011 David Robillard +# +# 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. + +@prefix doap: . +@prefix foaf: . +@prefix lv2: . +@prefix rdfs: . +@prefix urid: . + + + a lv2:Specification ; + doap:license ; + doap:name "LV2 URID" ; + doap:release [ + doap:revision "0.1" ; + doap:created "2011-07-20" + ] ; + doap:maintainer [ + a foaf:Person ; + foaf:name "Gabriel M. Beddingfield" ; + foaf:homepage + ] ; + lv2:documentation """ +This extension defines a simple mechanism for plugins to map URIs to and from +integers, usually for performance reasons (e.g. processing events typed by URIs +in real time). Typically, plugins map URIs to integers for things they +"understand" at instantiation time, and store those values for use in the audio +thread without doing any string comparison. This allows for the extensibility +of RDF but with the performance of integers. + +This extension is intended as an improved and simpler replacement for the +uri-map extension, since the +map context parameter has been found problematic. +""" . + +urid:URIMap + a lv2:Feature ; + lv2:documentation """ +An lv2:Feature which provides URI mapping and unmapping capability. To support +this feature, the host must pass an LV2_Feature to +LV2_Descriptor::instantiate with URI +http://lv2plug.in/ns/ext/urid#URIMap and data pointed to an instance of +LV2_URID_Feature. +""" . diff --git a/wscript b/wscript index 6f0302a..7cebf45 100644 --- a/wscript +++ b/wscript @@ -69,6 +69,7 @@ def build(bld): string-port uri-map uri-unmap + urid ''' for e in ext.split(): build_extension(bld, e, 'ext') -- cgit v1.2.1