From eb43c8896480114b224755e824fae2e2f7485256 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Mon, 21 Nov 2011 01:36:00 +0000 Subject: Move ns to lv2/ns so repository top level can be used as an include dir directly. --- lv2/ns/ext/reference/ext.pc.in | 1 + lv2/ns/ext/reference/manifest.ttl | 9 +++ lv2/ns/ext/reference/reference.h | 161 +++++++++++++++++++++++++++++++++++++ lv2/ns/ext/reference/reference.ttl | 82 +++++++++++++++++++ lv2/ns/ext/reference/waf | 1 + lv2/ns/ext/reference/wscript | 1 + 6 files changed, 255 insertions(+) create mode 120000 lv2/ns/ext/reference/ext.pc.in create mode 100644 lv2/ns/ext/reference/manifest.ttl create mode 100644 lv2/ns/ext/reference/reference.h create mode 100644 lv2/ns/ext/reference/reference.ttl create mode 120000 lv2/ns/ext/reference/waf create mode 120000 lv2/ns/ext/reference/wscript (limited to 'lv2/ns/ext/reference') diff --git a/lv2/ns/ext/reference/ext.pc.in b/lv2/ns/ext/reference/ext.pc.in new file mode 120000 index 0000000..82b50df --- /dev/null +++ b/lv2/ns/ext/reference/ext.pc.in @@ -0,0 +1 @@ +../../../../ext.pc.in \ No newline at end of file diff --git a/lv2/ns/ext/reference/manifest.ttl b/lv2/ns/ext/reference/manifest.ttl new file mode 100644 index 0000000..e25c54d --- /dev/null +++ b/lv2/ns/ext/reference/manifest.ttl @@ -0,0 +1,9 @@ +@prefix lv2: . +@prefix rdfs: . + + + a lv2:Specification ; + lv2:minorVersion 0 ; + lv2:microVersion 1 ; + rdfs:seeAlso . + diff --git a/lv2/ns/ext/reference/reference.h b/lv2/ns/ext/reference/reference.h new file mode 100644 index 0000000..26ef4c3 --- /dev/null +++ b/lv2/ns/ext/reference/reference.h @@ -0,0 +1,161 @@ +/* + 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 reference.h C header for the LV2 Reference extension + . +*/ + +#ifndef LV2_REFERENCE_H +#define LV2_REFERENCE_H + +#define LV2_REFERENCE_URI "http://lv2plug.in/ns/ext/reference" +#define LV2_REFERENCE_BLOB_SUPPORT_URI LV2_REFERENCE_URI "#blobSupport" + +#include +#include + +#include "lv2/lv2plug.in/ns/ext/atom/atom.h" + +/** + Dynamically Allocated Data. + + This is an opaque piece of data of any type, dynamically allocated in memory. + Unlike an "atom", a "blob" is not necessarily POD. Non-POD data is referred + to by a "reference (a special case of atom with type 0). + + This is a pointer to host data which is opaque to the plugin. Plugins MUST + NOT interpret this data in any way, except via host-provided functions in + LV2_Blob_Support. +*/ +typedef void* LV2_Blob; + +typedef LV2_Atom LV2_Reference; + +typedef void* LV2_Blob_Support_Data; + +typedef void (*LV2_Blob_Destroy)(LV2_Blob* blob); + +/** + The data field of the LV2_Feature for reference:blobSupport. + + A host which supports blobs must pass an LV2_Feature to the plugin's + instantiate method with 'URI' = "http://lv2plug.in/ns/ext/reference#blobSupport" + and 'data' pointing to an instance of this struct. All fields of this struct + MUST be set to non-NULL values by the host, except possibly 'data'. +*/ +typedef struct { + + /** + Pointer to opaque host data. + + The plugin MUST pass this to any call to functions in this struct. + Otherwise, the plugin MUST NOT interpret this value in any way. + */ + LV2_Blob_Support_Data data; + + /** + The size of a reference, in bytes. + + This value is provided by the host so plugins can allocate large enough + chunks of memory to store references. Note a reference is an LV2_Reference + with type reference:Reference, hence ref_size is a uint16, like + LV2_Reference.size. + */ + uint16_t ref_size; + + /** + Return the Blob referred to by @a ref. + + The returned value MUST NOT be used in any way other than by calling + methods defined in LV2_Blob_Support (e.g. it MUST NOT be directly + accessed, copied, or destroyed). The actual payload of the blob can + be accessed with LV2_Blob_Support.blob_get. + */ + LV2_Blob (*ref_get)(LV2_Blob_Support_Data data, + LV2_Reference* ref); + + /** + Copy a reference. + This copies a reference but not the blob it refers to, + i.e. after this call @a dst and @a src refer to the same LV2_Blob. + */ + void (*ref_copy)(LV2_Blob_Support_Data data, + LV2_Reference* dst, + LV2_Reference* src); + + /** + Reset (release) a reference. + After this call, @a ref is invalid. Implementations must be sure to + call this function when necessary, or memory leaks will result. The + specific times this is necessary MUST be defined by any extensions that + define a mechanism for transporting references. The standard semantics are: +
  • Whenever passed a Reference (e.g. via a Port) and run, the + plugin owns that reference.
  • +
  • The plugin owns any reference it creates (e.g. by using blob_new or + ref_copy).
  • +
  • For any reference it owns, the plugin MUST either: +
    • Copy the reference and store it (to be used in future runs and + released later).
    • +
    • Copy the reference to an output port exactly once.
    • +
    • Release it with ref_reset.
  • +
+ */ + void (*ref_reset)(LV2_Blob_Support_Data data, + LV2_Reference* ref); + + /** + Initialize a reference to point to a newly allocated Blob. + + @param data Must be the data member of this struct. + @param ref Pointer to an area of memory at least as large as + the ref_size field of this struct. On return, this will + be the unique reference to the new blob, which is owned by the + caller. Assumed to be uninitialised, i.e. the caller MUST NOT + pass a valid reference since this could cause a memory leak. + @param destroy Function to destroy this blob. This function + MUST clean up any resources contained in the blob, but MUST NOT + attempt to free the memory pointed to by its LV2_Blob* parameter + (since this is allocated by the host). + @param type ID of type of blob to allocate. + @param size Size of blob to allocate in bytes. + */ + void (*blob_new)(LV2_Blob_Support_Data data, + LV2_Reference* ref, + LV2_Blob_Destroy destroy, + uint32_t type, + size_t size); + + /** + Get blob's type as an ID. + + The return value may be any type URI, mapped to an integer with the + URI Map extension with context = NULL. + */ + uint32_t (*blob_type)(LV2_Blob blob); + + /** + Get blob's body. + + Returns a pointer to the start of the blob data. The format of this + data is defined by the return value of the type method. It MUST NOT + be used in any way by code which does not understand that type. + */ + void* (*blob_data)(LV2_Blob blob); + +} LV2_Blob_Support; + +#endif /* LV2_REFERENCE_H */ diff --git a/lv2/ns/ext/reference/reference.ttl b/lv2/ns/ext/reference/reference.ttl new file mode 100644 index 0000000..1e030ee --- /dev/null +++ b/lv2/ns/ext/reference/reference.ttl @@ -0,0 +1,82 @@ +# LV2 Reference Extension +# Copyright 2007-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 atom: . +@prefix doap: . +@prefix foaf: . +@prefix lv2: . +@prefix rdf: . +@prefix rdfs: . +@prefix reference: . + + + a lv2:Specification ; + doap:name "LV2 Reference" ; + doap:shortdesc "A reference data type for using non-POD data." ; + doap:release [ + doap:revision "0.1" ; + doap:created "2011-07-22" + ] ; + doap:maintainer [ + a foaf:Person ; + foaf:name "David Robillard" ; + foaf:homepage ; + rdfs:seeAlso + ] ; + lv2:documentation """ +

This extension defines a mechanism for working with generic/opaque +dynamically allocated memory, called a "Blob", which is +(unlike an Atom) not necessarily POD. Blobs are accessed via a +reference:Reference, which is a special case of Atom that always has type = +0, is not POD, and can only be copied using host provided functions. +This allows plugins and hosts to work with data of any type at all.

+""" . + +reference:Reference a rdfs:Class ; + rdfs:subClassOf atom:Atom ; + rdfs:label "Reference" ; + lv2:documentation """ +

Reference to an lv2:Blob. The actual contents of a Reference are opaque and +host specific, and must not be copied, serialized, or otherwise interpreted by +a plugin, except via functions provided by the host in LV2_Blob_Support.

+ +

A Reference is a special case of Atom with type = 0. +"Null" is the unique Atom with type = 0 and +size = 0.

+""" . + +reference:blobSupport a lv2:Feature ; + rdfs:label "Blob support" ; + lv2:documentation """ +

Support for dynamically allocated blobs. If a host supports this feature, +it MUST pass a LV2_Feature with URI +http://lv2plug.in/ns/ext/atom#blobSupport and data pointing to a +LV2_Blob_Support.

+""" . + +reference:Blob a rdfs:Class ; + rdfs:label "Blob" ; + lv2:documentation """ +

Base class for all dynamically allocated blobs. An LV2_Blob is an opaque +pointer to host data. The type and data of a blob can be accessed via +host-provided functions in LV2_Blob_Support. The type of a blob can be any URI +that describes a data format. Blobs are always allocated by the host, and +unlike atoms are not necessarily POD.

+ +

Blob data MUST NOT be used in any way by an implementation that does not +understand that blob type (unlike Atoms, meaningful type-oblivious use +of a Blob is impossible).

+""" . diff --git a/lv2/ns/ext/reference/waf b/lv2/ns/ext/reference/waf new file mode 120000 index 0000000..b955110 --- /dev/null +++ b/lv2/ns/ext/reference/waf @@ -0,0 +1 @@ +../../../../waf \ No newline at end of file diff --git a/lv2/ns/ext/reference/wscript b/lv2/ns/ext/reference/wscript new file mode 120000 index 0000000..ec20a77 --- /dev/null +++ b/lv2/ns/ext/reference/wscript @@ -0,0 +1 @@ +../../../../ext.wscript \ No newline at end of file -- cgit v1.2.1