Browse Source

Update lv2 headers a bit, same version as for carla

Signed-off-by: falkTX <falktx@falktx.com>
pull/375/head
parent
commit
2d58e840be
27 changed files with 991 additions and 718 deletions
  1. +34
    -71
      distrho/src/lv2/atom-forge.h
  2. +101
    -29
      distrho/src/lv2/atom-util.h
  3. +49
    -39
      distrho/src/lv2/atom.h
  4. +23
    -10
      distrho/src/lv2/buf-size.h
  5. +12
    -7
      distrho/src/lv2/data-access.h
  6. +12
    -5
      distrho/src/lv2/dynmanifest.h
  7. +16
    -17
      distrho/src/lv2/event-helpers.h
  8. +26
    -28
      distrho/src/lv2/event.h
  9. +14
    -15
      distrho/src/lv2/instance-access.h
  10. +23
    -13
      distrho/src/lv2/log.h
  11. +34
    -20
      distrho/src/lv2/logger.h
  12. +115
    -99
      distrho/src/lv2/lv2.h
  13. +57
    -49
      distrho/src/lv2/midi.h
  14. +21
    -13
      distrho/src/lv2/morph.h
  15. +21
    -8
      distrho/src/lv2/options.h
  16. +42
    -29
      distrho/src/lv2/parameters.h
  17. +42
    -32
      distrho/src/lv2/patch.h
  18. +47
    -40
      distrho/src/lv2/port-groups.h
  19. +25
    -19
      distrho/src/lv2/port-props.h
  20. +16
    -9
      distrho/src/lv2/presets.h
  21. +25
    -11
      distrho/src/lv2/resize-port.h
  22. +92
    -56
      distrho/src/lv2/state.h
  23. +30
    -26
      distrho/src/lv2/time.h
  24. +46
    -39
      distrho/src/lv2/units.h
  25. +12
    -4
      distrho/src/lv2/uri-map.h
  26. +19
    -12
      distrho/src/lv2/urid.h
  27. +37
    -18
      distrho/src/lv2/worker.h

+ 34
- 71
distrho/src/lv2/atom-forge.h View File

@@ -1,5 +1,5 @@
/*
Copyright 2008-2013 David Robillard <http://drobilla.net>
Copyright 2008-2016 David Robillard <http://drobilla.net>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -39,6 +39,12 @@
This header is non-normative, it is provided for convenience.
*/

/**
@defgroup forge Forge
@ingroup atom
@{
*/

#ifndef LV2_ATOM_FORGE_H
#define LV2_ATOM_FORGE_H

@@ -48,7 +54,7 @@
#include "atom-util.h"
#include "urid.h"

#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
#if defined(__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
# define LV2_ATOM_FORGE_DEPRECATED __attribute__((__deprecated__))
#else
# define LV2_ATOM_FORGE_DEPRECATED
@@ -60,6 +66,15 @@ extern "C" {
# include <stdbool.h>
#endif

// Disable deprecation warnings for Blank and Resource
#if defined(__clang__)
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif

/** Handle for LV2_Atom_Forge_Sink. */
typedef void* LV2_Atom_Forge_Sink_Handle;

@@ -119,21 +134,14 @@ static inline void
lv2_atom_forge_set_buffer(LV2_Atom_Forge* forge, uint8_t* buf, size_t size);

/**
Initialise @p forge.
Initialise `forge`.

URIs will be mapped using @p map and stored, a reference to @p map itself is
URIs will be mapped using `map` and stored, a reference to `map` itself is
not held.
*/
static inline void
lv2_atom_forge_init(LV2_Atom_Forge* forge, const LV2_URID_Map* map)
{
#if defined(__clang__)
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif
lv2_atom_forge_set_buffer(forge, NULL, 0);
forge->Blank = map->map(map->handle, LV2_ATOM__Blank);
forge->Bool = map->map(map->handle, LV2_ATOM__Bool);
@@ -153,13 +161,9 @@ lv2_atom_forge_init(LV2_Atom_Forge* forge, const LV2_URID_Map* map)
forge->URI = map->map(map->handle, LV2_ATOM__URI);
forge->URID = map->map(map->handle, LV2_ATOM__URID);
forge->Vector = map->map(map->handle, LV2_ATOM__Vector);
#if defined(__clang__)
# pragma clang diagnostic pop
#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
# pragma GCC diagnostic pop
#endif
}

/** Access the Atom pointed to by a reference. */
static inline LV2_Atom*
lv2_atom_forge_deref(LV2_Atom_Forge* forge, LV2_Atom_Forge_Ref ref)
{
@@ -208,47 +212,23 @@ lv2_atom_forge_top_is(LV2_Atom_Forge* forge, uint32_t type)
(lv2_atom_forge_deref(forge, forge->stack->ref)->type == type);
}

/** Return true iff @p type is an atom:Object. */
/** Return true iff `type` is an atom:Object. */
static inline bool
lv2_atom_forge_is_object_type(const LV2_Atom_Forge* forge, uint32_t type)
{
#if defined(__clang__)
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif
return (type == forge->Object ||
type == forge->Blank ||
type == forge->Resource);
#if defined(__clang__)
# pragma clang diagnostic pop
#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
# pragma GCC diagnostic pop
#endif
}

/** Return true iff @p type is an atom:Object with a blank ID. */
/** Return true iff `type` is an atom:Object with a blank ID. */
static inline bool
lv2_atom_forge_is_blank(const LV2_Atom_Forge* forge,
uint32_t type,
const LV2_Atom_Object_Body* body)
{
#if defined(__clang__)
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif
return (type == forge->Blank ||
(type == forge->Object && body->id == 0));
#if defined(__clang__)
# pragma clang diagnostic pop
#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
# pragma GCC diagnostic pop
#endif
}

/**
@@ -257,7 +237,7 @@ lv2_atom_forge_is_blank(const LV2_Atom_Forge* forge,
@{
*/

/** Set the output buffer where @p forge will write atoms. */
/** Set the output buffer where `forge` will write atoms. */
static inline void
lv2_atom_forge_set_buffer(LV2_Atom_Forge* forge, uint8_t* buf, size_t size)
{
@@ -271,7 +251,7 @@ lv2_atom_forge_set_buffer(LV2_Atom_Forge* forge, uint8_t* buf, size_t size)
}

/**
Set the sink function where @p forge will write output.
Set the sink function where `forge` will write output.

The return value of forge functions is an LV2_Atom_Forge_Ref which is an
integer type safe to use as a pointer but is otherwise opaque. The sink
@@ -456,7 +436,7 @@ lv2_atom_forge_typed_string(LV2_Atom_Forge* forge,
return out;
}

/** Write an atom:String. Note that @p str need not be NULL terminated. */
/** Write an atom:String. Note that `str` need not be NULL terminated. */
static inline LV2_Atom_Forge_Ref
lv2_atom_forge_string(LV2_Atom_Forge* forge, const char* str, uint32_t len)
{
@@ -464,7 +444,7 @@ lv2_atom_forge_string(LV2_Atom_Forge* forge, const char* str, uint32_t len)
}

/**
Write an atom:URI. Note that @p uri need not be NULL terminated.
Write an atom:URI. Note that `uri` need not be NULL terminated.
This does not map the URI, but writes the complete URI string. To write
a mapped URI, use lv2_atom_forge_urid().
*/
@@ -474,7 +454,7 @@ lv2_atom_forge_uri(LV2_Atom_Forge* forge, const char* uri, uint32_t len)
return lv2_atom_forge_typed_string(forge, forge->URI, uri, len);
}

/** Write an atom:Path. Note that @p path need not be NULL terminated. */
/** Write an atom:Path. Note that `path` need not be NULL terminated. */
static inline LV2_Atom_Forge_Ref
lv2_atom_forge_path(LV2_Atom_Forge* forge, const char* path, uint32_t len)
{
@@ -617,24 +597,12 @@ lv2_atom_forge_resource(LV2_Atom_Forge* forge,
LV2_URID id,
LV2_URID otype)
{
#if defined(__clang__)
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif
const LV2_Atom_Object a = {
{ (uint32_t)sizeof(LV2_Atom_Object_Body), forge->Resource },
{ id, otype }
};
return lv2_atom_forge_push(
forge, frame, lv2_atom_forge_write(forge, &a, sizeof(a)));
#if defined(__clang__)
# pragma clang diagnostic pop
#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
# pragma GCC diagnostic pop
#endif
}

/**
@@ -650,24 +618,12 @@ lv2_atom_forge_blank(LV2_Atom_Forge* forge,
uint32_t id,
LV2_URID otype)
{
#if defined(__clang__)
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif
const LV2_Atom_Object a = {
{ (uint32_t)sizeof(LV2_Atom_Object_Body), forge->Blank },
{ id, otype }
};
return lv2_atom_forge_push(
forge, frame, lv2_atom_forge_write(forge, &a, sizeof(a)));
#if defined(__clang__)
# pragma clang diagnostic pop
#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
# pragma GCC diagnostic pop
#endif
}

/**
@@ -738,8 +694,15 @@ lv2_atom_forge_beat_time(LV2_Atom_Forge* forge, double beats)

/**
@}
@}
*/

#if defined(__clang__)
# pragma clang diagnostic pop
#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
# pragma GCC diagnostic pop
#endif

#ifdef __cplusplus
} /* extern "C" */
#endif


+ 101
- 29
distrho/src/lv2/atom-util.h View File

@@ -1,5 +1,5 @@
/*
Copyright 2008-2013 David Robillard <http://drobilla.net>
Copyright 2008-2015 David Robillard <http://drobilla.net>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -22,6 +22,12 @@
This header is non-normative, it is provided for convenience.
*/

/**
@defgroup util Utilities
@ingroup atom
@{
*/

#ifndef LV2_ATOM_UTIL_H
#define LV2_ATOM_UTIL_H

@@ -44,21 +50,21 @@ lv2_atom_pad_size(uint32_t size)
return (size + 7U) & (~7U);
}

/** Return the total size of @p atom, including the header. */
/** Return the total size of `atom`, including the header. */
static inline uint32_t
lv2_atom_total_size(const LV2_Atom* atom)
{
return (uint32_t)sizeof(LV2_Atom) + atom->size;
}

/** Return true iff @p atom is null. */
/** Return true iff `atom` is null. */
static inline bool
lv2_atom_is_null(const LV2_Atom* atom)
{
return !atom || (atom->type == 0 && atom->size == 0);
}

/** Return true iff @p a is equal to @p b. */
/** Return true iff `a` is equal to `b`. */
static inline bool
lv2_atom_equals(const LV2_Atom* a, const LV2_Atom* b)
{
@@ -79,14 +85,21 @@ lv2_atom_sequence_begin(const LV2_Atom_Sequence_Body* body)
return (const LV2_Atom_Event*)(body + 1);
}

/** Get an iterator pointing to the end of a Sequence body. */
static inline const LV2_Atom_Event*
lv2_atom_sequence_end(const LV2_Atom_Sequence_Body* body, uint32_t size)
{
return (const LV2_Atom_Event*)((const uint8_t*)body + lv2_atom_pad_size(size));
}

/** Get an iterator pointing to the end of a Sequence body. */
static inline LV2_Atom_Event*
lv2_atom_sequence_end(LV2_Atom_Sequence_Body* body, uint32_t size)
lv2_atom_sequence_end2(LV2_Atom_Sequence_Body* body, uint32_t size)
{
return (LV2_Atom_Event*)((uint8_t*)body + lv2_atom_pad_size(size));
}

/** Return true iff @p i has reached the end of @p body. */
/** Return true iff `i` has reached the end of `body`. */
static inline bool
lv2_atom_sequence_is_end(const LV2_Atom_Sequence_Body* body,
uint32_t size,
@@ -95,7 +108,7 @@ lv2_atom_sequence_is_end(const LV2_Atom_Sequence_Body* body,
return (const uint8_t*)i >= ((const uint8_t*)body + size);
}

/** Return an iterator to the element following @p i. */
/** Return an iterator to the element following `i`. */
static inline const LV2_Atom_Event*
lv2_atom_sequence_next(const LV2_Atom_Event* i)
{
@@ -119,13 +132,13 @@ lv2_atom_sequence_next(const LV2_Atom_Event* i)
#define LV2_ATOM_SEQUENCE_FOREACH(seq, iter) \
for (const LV2_Atom_Event* iter = lv2_atom_sequence_begin(&(seq)->body); \
!lv2_atom_sequence_is_end(&(seq)->body, (seq)->atom.size, (iter)); \
(iter) = lv2_atom_sequence_next(iter))
iter = lv2_atom_sequence_next(iter))

/** Like LV2_ATOM_SEQUENCE_FOREACH but for a headerless sequence body. */
#define LV2_ATOM_SEQUENCE_BODY_FOREACH(body, size, iter) \
for (const LV2_Atom_Event* iter = lv2_atom_sequence_begin(body); \
!lv2_atom_sequence_is_end(body, size, (iter)); \
(iter) = lv2_atom_sequence_next(iter))
iter = lv2_atom_sequence_next(iter))

/**
@}
@@ -134,7 +147,7 @@ lv2_atom_sequence_next(const LV2_Atom_Event* i)
*/

/**
Clear all events from @p sequence.
Clear all events from `sequence`.

This simply resets the size field, the other fields are left untouched.
*/
@@ -145,14 +158,14 @@ lv2_atom_sequence_clear(LV2_Atom_Sequence* seq)
}

/**
Append an event at the end of @p sequence.
Append an event at the end of `sequence`.

@param seq Sequence to append to.
@param capacity Total capacity of the sequence atom
(e.g. as set by the host for sequence output ports).
@param event Event to write.

@return A pointer to the newly written event in @p seq,
@return A pointer to the newly written event in `seq`,
or NULL on failure (insufficient space).
*/
static inline LV2_Atom_Event*
@@ -165,7 +178,7 @@ lv2_atom_sequence_append_event(LV2_Atom_Sequence* seq,
return NULL;
}

LV2_Atom_Event* e = lv2_atom_sequence_end(&seq->body, seq->atom.size);
LV2_Atom_Event* e = lv2_atom_sequence_end2(&seq->body, seq->atom.size);
memcpy(e, event, total_size);

seq->atom.size += lv2_atom_pad_size(total_size);
@@ -179,21 +192,21 @@ lv2_atom_sequence_append_event(LV2_Atom_Sequence* seq,
@{
*/

/** Get an iterator pointing to the first element in @p tup. */
/** Get an iterator pointing to the first element in `tup`. */
static inline const LV2_Atom*
lv2_atom_tuple_begin(const LV2_Atom_Tuple* tup)
{
return (const LV2_Atom*)(LV2_ATOM_BODY_CONST(tup));
}

/** Return true iff @p i has reached the end of @p body. */
/** Return true iff `i` has reached the end of `body`. */
static inline bool
lv2_atom_tuple_is_end(const void* body, uint32_t size, const LV2_Atom* i)
{
return (const uint8_t*)i >= ((const uint8_t*)body + size);
}

/** Return an iterator to the element following @p i. */
/** Return an iterator to the element following `i`. */
static inline const LV2_Atom*
lv2_atom_tuple_next(const LV2_Atom* i)
{
@@ -208,21 +221,21 @@ lv2_atom_tuple_next(const LV2_Atom* i)

This macro is used similarly to a for loop (which it expands to), e.g.:
@code
LV2_ATOMO_TUPLE_FOREACH(tuple, elem) {
LV2_ATOM_TUPLE_FOREACH(tuple, elem) {
// Do something with elem (an LV2_Atom*) here...
}
@endcode
*/
#define LV2_ATOM_TUPLE_FOREACH(tuple, iter) \
for (const LV2_Atom* iter = lv2_atom_tuple_begin(tuple); \
!lv2_atom_tuple_is_end(LV2_ATOM_BODY_CONST(tuple), (tuple)->size, (iter)); \
(iter) = lv2_atom_tuple_next(iter))
!lv2_atom_tuple_is_end(LV2_ATOM_BODY_CONST(tuple), (tuple)->atom.size, (iter)); \
iter = lv2_atom_tuple_next(iter))

/** Like LV2_ATOM_TUPLE_FOREACH but for a headerless tuple body. */
#define LV2_ATOM_TUPLE_BODY_FOREACH(body, size, iter) \
for (const LV2_Atom* iter = (const LV2_Atom*)body; \
!lv2_atom_tuple_is_end(body, size, (iter)); \
(iter) = lv2_atom_tuple_next(iter))
iter = lv2_atom_tuple_next(iter))

/**
@}
@@ -230,14 +243,14 @@ lv2_atom_tuple_next(const LV2_Atom* i)
@{
*/

/** Return a pointer to the first property in @p body. */
/** Return a pointer to the first property in `body`. */
static inline const LV2_Atom_Property_Body*
lv2_atom_object_begin(const LV2_Atom_Object_Body* body)
{
return (const LV2_Atom_Property_Body*)(body + 1);
}

/** Return true iff @p i has reached the end of @p obj. */
/** Return true iff `i` has reached the end of `obj`. */
static inline bool
lv2_atom_object_is_end(const LV2_Atom_Object_Body* body,
uint32_t size,
@@ -246,7 +259,7 @@ lv2_atom_object_is_end(const LV2_Atom_Object_Body* body,
return (const uint8_t*)i >= ((const uint8_t*)body + size);
}

/** Return an iterator to the property following @p i. */
/** Return an iterator to the property following `i`. */
static inline const LV2_Atom_Property_Body*
lv2_atom_object_next(const LV2_Atom_Property_Body* i)
{
@@ -272,13 +285,13 @@ lv2_atom_object_next(const LV2_Atom_Property_Body* i)
#define LV2_ATOM_OBJECT_FOREACH(obj, iter) \
for (const LV2_Atom_Property_Body* iter = lv2_atom_object_begin(&(obj)->body); \
!lv2_atom_object_is_end(&(obj)->body, (obj)->atom.size, (iter)); \
(iter) = lv2_atom_object_next(iter))
iter = lv2_atom_object_next(iter))

/** Like LV2_ATOM_OBJECT_FOREACH but for a headerless object body. */
#define LV2_ATOM_OBJECT_BODY_FOREACH(body, size, iter) \
for (const LV2_Atom_Property_Body* iter = lv2_atom_object_begin(body); \
!lv2_atom_object_is_end(body, size, (iter)); \
(iter) = lv2_atom_object_next(iter))
iter = lv2_atom_object_next(iter))

/**
@}
@@ -297,10 +310,10 @@ static const LV2_Atom_Object_Query LV2_ATOM_OBJECT_QUERY_END = { 0, NULL };
/**
Get an object's values for various keys.

The value pointer of each item in @p query will be set to the location of
the corresponding value in @p object. Every value pointer in @p query MUST
be initialised to NULL. This function reads @p object in a single linear
sweep. By allocating @p query on the stack, objects can be "queried"
The value pointer of each item in `query` will be set to the location of
the corresponding value in `object`. Every value pointer in `query` MUST
be initialised to NULL. This function reads `object` in a single linear
sweep. By allocating `query` on the stack, objects can be "queried"
quickly without allocating any memory. This function is realtime safe.

This function can only do "flat" queries, it is not smart enough to match
@@ -359,6 +372,7 @@ lv2_atom_object_body_get(uint32_t size, const LV2_Atom_Object_Body* body, ...)
va_start(args, body);
for (n_queries = 0; va_arg(args, uint32_t); ++n_queries) {
if (!va_arg(args, const LV2_Atom**)) {
va_end(args);
return -1;
}
}
@@ -372,6 +386,7 @@ lv2_atom_object_body_get(uint32_t size, const LV2_Atom_Object_Body* body, ...)
if (qkey == prop->key && !*qval) {
*qval = &prop->value;
if (++matches == n_queries) {
va_end(args);
return matches;
}
break;
@@ -436,6 +451,63 @@ lv2_atom_object_get(const LV2_Atom_Object* object, ...)
}

/**
Variable argument version of lv2_atom_object_query() with types.

This is like lv2_atom_object_get(), but each entry has an additional
parameter to specify the required type. Only atoms with a matching type
will be selected.

The arguments should be a series of uint32_t key, const LV2_Atom**, uint32_t
type triples, terminated by a zero key. The value pointers MUST be
initialized to NULL. For example:

@code
const LV2_Atom_String* name = NULL;
const LV2_Atom_Int* age = NULL;
lv2_atom_object_get(obj,
uris.name_key, &name, uris.atom_String,
uris.age_key, &age, uris.atom_Int
0);
@endcode
*/
static inline int
lv2_atom_object_get_typed(const LV2_Atom_Object* object, ...)
{
int matches = 0;
int n_queries = 0;

/* Count number of keys so we can short-circuit when done */
va_list args;
va_start(args, object);
for (n_queries = 0; va_arg(args, uint32_t); ++n_queries) {
if (!va_arg(args, const LV2_Atom**) ||
!va_arg(args, uint32_t)) {
return -1;
}
}
va_end(args);

LV2_ATOM_OBJECT_FOREACH(object, prop) {
va_start(args, object);
for (int i = 0; i < n_queries; ++i) {
const uint32_t qkey = va_arg(args, uint32_t);
const LV2_Atom** qval = va_arg(args, const LV2_Atom**);
const uint32_t qtype = va_arg(args, uint32_t);
if (!*qval && qkey == prop->key && qtype == prop->value.type) {
*qval = &prop->value;
if (++matches == n_queries) {
return matches;
}
break;
}
}
va_end(args);
}
return matches;
}

/**
@}
@}
*/



+ 49
- 39
distrho/src/lv2/atom.h View File

@@ -1,5 +1,5 @@
/*
Copyright 2008-2012 David Robillard <http://drobilla.net>
Copyright 2008-2016 David Robillard <http://drobilla.net>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -15,8 +15,12 @@
*/

/**
@file atom.h C header for the LV2 Atom extension
<http://lv2plug.in/ns/ext/atom>.
@defgroup atom Atom

A generic value container and several data types, see
<http://lv2plug.in/ns/ext/atom> for details.

@{
*/

#ifndef LV2_ATOM_H
@@ -25,50 +29,52 @@
#include <stdint.h>
#include <stddef.h>

#define LV2_ATOM_URI "http://lv2plug.in/ns/ext/atom"
#define LV2_ATOM_PREFIX LV2_ATOM_URI "#"
#define LV2_ATOM__Atom LV2_ATOM_PREFIX "Atom"
#define LV2_ATOM__AtomPort LV2_ATOM_PREFIX "AtomPort"
#define LV2_ATOM__Blank LV2_ATOM_PREFIX "Blank"
#define LV2_ATOM__Bool LV2_ATOM_PREFIX "Bool"
#define LV2_ATOM__Chunk LV2_ATOM_PREFIX "Chunk"
#define LV2_ATOM__Double LV2_ATOM_PREFIX "Double"
#define LV2_ATOM__Event LV2_ATOM_PREFIX "Event"
#define LV2_ATOM__Float LV2_ATOM_PREFIX "Float"
#define LV2_ATOM__Int LV2_ATOM_PREFIX "Int"
#define LV2_ATOM__Literal LV2_ATOM_PREFIX "Literal"
#define LV2_ATOM__Long LV2_ATOM_PREFIX "Long"
#define LV2_ATOM__Number LV2_ATOM_PREFIX "Number"
#define LV2_ATOM__Object LV2_ATOM_PREFIX "Object"
#define LV2_ATOM__Path LV2_ATOM_PREFIX "Path"
#define LV2_ATOM__Property LV2_ATOM_PREFIX "Property"
#define LV2_ATOM__Resource LV2_ATOM_PREFIX "Resource"
#define LV2_ATOM__Sequence LV2_ATOM_PREFIX "Sequence"
#define LV2_ATOM__Sound LV2_ATOM_PREFIX "Sound"
#define LV2_ATOM__String LV2_ATOM_PREFIX "String"
#define LV2_ATOM__Tuple LV2_ATOM_PREFIX "Tuple"
#define LV2_ATOM__URI LV2_ATOM_PREFIX "URI"
#define LV2_ATOM__URID LV2_ATOM_PREFIX "URID"
#define LV2_ATOM__Vector LV2_ATOM_PREFIX "Vector"
#define LV2_ATOM__atomTransfer LV2_ATOM_PREFIX "atomTransfer"
#define LV2_ATOM__beatTime LV2_ATOM_PREFIX "beatTime"
#define LV2_ATOM__bufferType LV2_ATOM_PREFIX "bufferType"
#define LV2_ATOM__childType LV2_ATOM_PREFIX "childType"
#define LV2_ATOM__eventTransfer LV2_ATOM_PREFIX "eventTransfer"
#define LV2_ATOM__frameTime LV2_ATOM_PREFIX "frameTime"
#define LV2_ATOM__supports LV2_ATOM_PREFIX "supports"
#define LV2_ATOM__timeUnit LV2_ATOM_PREFIX "timeUnit"
#define LV2_ATOM_REFERENCE_TYPE 0
#define LV2_ATOM_URI "http://lv2plug.in/ns/ext/atom" ///< http://lv2plug.in/ns/ext/atom
#define LV2_ATOM_PREFIX LV2_ATOM_URI "#" ///< http://lv2plug.in/ns/ext/atom#
#define LV2_ATOM__Atom LV2_ATOM_PREFIX "Atom" ///< http://lv2plug.in/ns/ext/atom#Atom
#define LV2_ATOM__AtomPort LV2_ATOM_PREFIX "AtomPort" ///< http://lv2plug.in/ns/ext/atom#AtomPort
#define LV2_ATOM__Blank LV2_ATOM_PREFIX "Blank" ///< http://lv2plug.in/ns/ext/atom#Blank
#define LV2_ATOM__Bool LV2_ATOM_PREFIX "Bool" ///< http://lv2plug.in/ns/ext/atom#Bool
#define LV2_ATOM__Chunk LV2_ATOM_PREFIX "Chunk" ///< http://lv2plug.in/ns/ext/atom#Chunk
#define LV2_ATOM__Double LV2_ATOM_PREFIX "Double" ///< http://lv2plug.in/ns/ext/atom#Double
#define LV2_ATOM__Event LV2_ATOM_PREFIX "Event" ///< http://lv2plug.in/ns/ext/atom#Event
#define LV2_ATOM__Float LV2_ATOM_PREFIX "Float" ///< http://lv2plug.in/ns/ext/atom#Float
#define LV2_ATOM__Int LV2_ATOM_PREFIX "Int" ///< http://lv2plug.in/ns/ext/atom#Int
#define LV2_ATOM__Literal LV2_ATOM_PREFIX "Literal" ///< http://lv2plug.in/ns/ext/atom#Literal
#define LV2_ATOM__Long LV2_ATOM_PREFIX "Long" ///< http://lv2plug.in/ns/ext/atom#Long
#define LV2_ATOM__Number LV2_ATOM_PREFIX "Number" ///< http://lv2plug.in/ns/ext/atom#Number
#define LV2_ATOM__Object LV2_ATOM_PREFIX "Object" ///< http://lv2plug.in/ns/ext/atom#Object
#define LV2_ATOM__Path LV2_ATOM_PREFIX "Path" ///< http://lv2plug.in/ns/ext/atom#Path
#define LV2_ATOM__Property LV2_ATOM_PREFIX "Property" ///< http://lv2plug.in/ns/ext/atom#Property
#define LV2_ATOM__Resource LV2_ATOM_PREFIX "Resource" ///< http://lv2plug.in/ns/ext/atom#Resource
#define LV2_ATOM__Sequence LV2_ATOM_PREFIX "Sequence" ///< http://lv2plug.in/ns/ext/atom#Sequence
#define LV2_ATOM__Sound LV2_ATOM_PREFIX "Sound" ///< http://lv2plug.in/ns/ext/atom#Sound
#define LV2_ATOM__String LV2_ATOM_PREFIX "String" ///< http://lv2plug.in/ns/ext/atom#String
#define LV2_ATOM__Tuple LV2_ATOM_PREFIX "Tuple" ///< http://lv2plug.in/ns/ext/atom#Tuple
#define LV2_ATOM__URI LV2_ATOM_PREFIX "URI" ///< http://lv2plug.in/ns/ext/atom#URI
#define LV2_ATOM__URID LV2_ATOM_PREFIX "URID" ///< http://lv2plug.in/ns/ext/atom#URID
#define LV2_ATOM__Vector LV2_ATOM_PREFIX "Vector" ///< http://lv2plug.in/ns/ext/atom#Vector
#define LV2_ATOM__atomTransfer LV2_ATOM_PREFIX "atomTransfer" ///< http://lv2plug.in/ns/ext/atom#atomTransfer
#define LV2_ATOM__beatTime LV2_ATOM_PREFIX "beatTime" ///< http://lv2plug.in/ns/ext/atom#beatTime
#define LV2_ATOM__bufferType LV2_ATOM_PREFIX "bufferType" ///< http://lv2plug.in/ns/ext/atom#bufferType
#define LV2_ATOM__childType LV2_ATOM_PREFIX "childType" ///< http://lv2plug.in/ns/ext/atom#childType
#define LV2_ATOM__eventTransfer LV2_ATOM_PREFIX "eventTransfer" ///< http://lv2plug.in/ns/ext/atom#eventTransfer
#define LV2_ATOM__frameTime LV2_ATOM_PREFIX "frameTime" ///< http://lv2plug.in/ns/ext/atom#frameTime
#define LV2_ATOM__supports LV2_ATOM_PREFIX "supports" ///< http://lv2plug.in/ns/ext/atom#supports
#define LV2_ATOM__timeUnit LV2_ATOM_PREFIX "timeUnit" ///< http://lv2plug.in/ns/ext/atom#timeUnit
#define LV2_ATOM_REFERENCE_TYPE 0 ///< The special type for a reference atom

#ifdef __cplusplus
extern "C" {
#endif

/** @cond */
/** This expression will fail to compile if double does not fit in 64 bits. */
typedef char lv2_atom_assert_double_fits_in_64_bits[
((sizeof(double) <= sizeof(uint64_t)) * 2) - 1];
/** @endcond */

/**
Return a pointer to the contents of an Atom. The "contents" of an atom
@@ -239,6 +245,10 @@ typedef struct {
LV2_Atom_Sequence_Body body; /**< Body. */
} LV2_Atom_Sequence;

/**
@}
*/

#ifdef __cplusplus
} /* extern "C" */
#endif


+ 23
- 10
distrho/src/lv2/buf-size.h View File

@@ -1,5 +1,5 @@
/*
Copyright 2007-2012 David Robillard <http://drobilla.net>
Copyright 2007-2016 David Robillard <http://drobilla.net>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -17,15 +17,28 @@
#ifndef LV2_BUF_SIZE_H
#define LV2_BUF_SIZE_H

#define LV2_BUF_SIZE_URI "http://lv2plug.in/ns/ext/buf-size"
#define LV2_BUF_SIZE_PREFIX LV2_BUF_SIZE_URI "#"
/**
@defgroup buf-size Buffer Size

#define LV2_BUF_SIZE__boundedBlockLength LV2_BUF_SIZE_PREFIX "boundedBlockLength"
#define LV2_BUF_SIZE__fixedBlockLength LV2_BUF_SIZE_PREFIX "fixedBlockLength"
#define LV2_BUF_SIZE__maxBlockLength LV2_BUF_SIZE_PREFIX "maxBlockLength"
#define LV2_BUF_SIZE__minBlockLength LV2_BUF_SIZE_PREFIX "minBlockLength"
#define LV2_BUF_SIZE__nominalBlockLength LV2_BUF_SIZE_PREFIX "nominalBlockLength"
#define LV2_BUF_SIZE__powerOf2BlockLength LV2_BUF_SIZE_PREFIX "powerOf2BlockLength"
#define LV2_BUF_SIZE__sequenceSize LV2_BUF_SIZE_PREFIX "sequenceSize"
Access to, and restrictions on, buffer sizes; see
<http://lv2plug.in/ns/ext/buf-size> for details.

@{
*/

#define LV2_BUF_SIZE_URI "http://lv2plug.in/ns/ext/buf-size" ///< http://lv2plug.in/ns/ext/buf-size
#define LV2_BUF_SIZE_PREFIX LV2_BUF_SIZE_URI "#" ///< http://lv2plug.in/ns/ext/buf-size#

#define LV2_BUF_SIZE__boundedBlockLength LV2_BUF_SIZE_PREFIX "boundedBlockLength" ///< http://lv2plug.in/ns/ext/buf-size#boundedBlockLength
#define LV2_BUF_SIZE__fixedBlockLength LV2_BUF_SIZE_PREFIX "fixedBlockLength" ///< http://lv2plug.in/ns/ext/buf-size#fixedBlockLength
#define LV2_BUF_SIZE__maxBlockLength LV2_BUF_SIZE_PREFIX "maxBlockLength" ///< http://lv2plug.in/ns/ext/buf-size#maxBlockLength
#define LV2_BUF_SIZE__minBlockLength LV2_BUF_SIZE_PREFIX "minBlockLength" ///< http://lv2plug.in/ns/ext/buf-size#minBlockLength
#define LV2_BUF_SIZE__nominalBlockLength LV2_BUF_SIZE_PREFIX "nominalBlockLength" ///< http://lv2plug.in/ns/ext/buf-size#nominalBlockLength
#define LV2_BUF_SIZE__powerOf2BlockLength LV2_BUF_SIZE_PREFIX "powerOf2BlockLength" ///< http://lv2plug.in/ns/ext/buf-size#powerOf2BlockLength
#define LV2_BUF_SIZE__sequenceSize LV2_BUF_SIZE_PREFIX "sequenceSize" ///< http://lv2plug.in/ns/ext/buf-size#sequenceSize

/**
@}
*/

#endif /* LV2_BUF_SIZE_H */

+ 12
- 7
distrho/src/lv2/data-access.h View File

@@ -1,6 +1,6 @@
/*
LV2 Data Access Extension
Copyright 2008-2011 David Robillard <http://drobilla.net>
Copyright 2008-2016 David Robillard <http://drobilla.net>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -16,18 +16,19 @@
*/

/**
@file data-access.h
C header for the LV2 Extension Data extension
<http://lv2plug.in/ns/ext/data-access>.
@defgroup data-access Data Access

This extension defines a method for (e.g.) plugin UIs to have (possibly
marshalled) access to the extension_data function on a plugin instance.
Access to plugin extension_data() for UIs, see
<http://lv2plug.in/ns/ext/data-acess> for details.

@{
*/

#ifndef LV2_DATA_ACCESS_H
#define LV2_DATA_ACCESS_H

#define LV2_DATA_ACCESS_URI "http://lv2plug.in/ns/ext/data-access"
#define LV2_DATA_ACCESS_URI "http://lv2plug.in/ns/ext/data-access" ///< http://lv2plug.in/ns/ext/data-access
#define LV2_DATA_ACCESS_PREFIX LV2_DATA_ACCESS_URI "#" ///< http://lv2plug.in/ns/ext/data-access#

#ifdef __cplusplus
extern "C" {
@@ -61,3 +62,7 @@ typedef struct {
#endif

#endif /* LV2_DATA_ACCESS_H */

/**
@}
*/

+ 12
- 5
distrho/src/lv2/dynmanifest.h View File

@@ -16,10 +16,12 @@
*/

/**
@file dynmanifest.h
C header for the LV2 Dynamic Manifest extension
<http://lv2plug.in/ns/ext/dynmanifest>.
Revision: 1.2
@defgroup dynmanifest Dynamic Manifest

Support for dynamic data generation, see
<http://lv2plug.in/ns/ext/dynmanifest> for details.

@{
*/

#ifndef LV2_DYN_MANIFEST_H_INCLUDED
@@ -29,7 +31,8 @@

#include "lv2.h"

#define LV2_DYN_MANIFEST_URI "http://lv2plug.in/ns/ext/dynmanifest"
#define LV2_DYN_MANIFEST_URI "http://lv2plug.in/ns/ext/dynmanifest" ///< http://lv2plug.in/ns/ext/dynmanifest
#define LV2_DYN_MANIFEST_PREFIX LV2_DYN_MANIFEST_URI "#" ///< http://lv2plug.in/ns/ext/dynmanifest#

#ifdef __cplusplus
extern "C" {
@@ -142,3 +145,7 @@ void lv2_dyn_manifest_close(LV2_Dyn_Manifest_Handle handle);
#endif

#endif /* LV2_DYN_MANIFEST_H_INCLUDED */

/**
@}
*/

+ 16
- 17
distrho/src/lv2/event-helpers.h View File

@@ -1,5 +1,5 @@
/*
Copyright 2008-2012 David Robillard <http://drobilla.net>
Copyright 2008-2015 David Robillard <http://drobilla.net>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -96,8 +96,8 @@ typedef struct {
} LV2_Event_Iterator;


/** Reset an iterator to point to the start of @a buf.
* @return True if @a iter is valid, otherwise false (buffer is empty) */
/** Reset an iterator to point to the start of `buf`.
* @return True if `iter` is valid, otherwise false (buffer is empty) */
static inline bool
lv2_event_begin(LV2_Event_Iterator* iter,
LV2_Event_Buffer* buf)
@@ -108,8 +108,8 @@ lv2_event_begin(LV2_Event_Iterator* iter,
}


/** Check if @a iter is valid.
* @return True if @a iter is valid, otherwise false (past end of buffer) */
/** Check if `iter` is valid.
* @return True if `iter` is valid, otherwise false (past end of buffer) */
static inline bool
lv2_event_is_valid(LV2_Event_Iterator* iter)
{
@@ -117,9 +117,9 @@ lv2_event_is_valid(LV2_Event_Iterator* iter)
}


/** Advance @a iter forward one event.
* @a iter must be valid.
* @return True if @a iter is valid, otherwise false (reached end of buffer) */
/** Advance `iter` forward one event.
* `iter` must be valid.
* @return True if `iter` is valid, otherwise false (reached end of buffer) */
static inline bool
lv2_event_increment(LV2_Event_Iterator* iter)
{
@@ -138,11 +138,11 @@ lv2_event_increment(LV2_Event_Iterator* iter)


/** Dereference an event iterator (get the event currently pointed at).
* @a iter must be valid.
* @a data if non-NULL, will be set to point to the contents of the event
* `iter` must be valid.
* `data` if non-NULL, will be set to point to the contents of the event
* returned.
* @return A Pointer to the event @a iter is currently pointing at, or NULL
* if the end of the buffer is reached (in which case @a data is
* @return A Pointer to the event `iter` is currently pointing at, or NULL
* if the end of the buffer is reached (in which case `data` is
* also set to NULL). */
static inline LV2_Event*
lv2_event_get(LV2_Event_Iterator* iter,
@@ -162,8 +162,8 @@ lv2_event_get(LV2_Event_Iterator* iter,
}


/** Write an event at @a iter.
* The event (if any) pointed to by @a iter will be overwritten, and @a iter
/** Write an event at `iter`.
* The event (if any) pointed to by `iter` will be overwritten, and `iter`
* incremented to point to the following event (i.e. several calls to this
* function can be done in sequence without twiddling iter in-between).
* @return True if event was written, otherwise false (buffer is full). */
@@ -230,8 +230,8 @@ lv2_event_reserve(LV2_Event_Iterator* iter,
}


/** Write an event at @a iter.
* The event (if any) pointed to by @a iter will be overwritten, and @a iter
/** Write an event at `iter`.
* The event (if any) pointed to by `iter` will be overwritten, and `iter`
* incremented to point to the following event (i.e. several calls to this
* function can be done in sequence without twiddling iter in-between).
* @return True if event was written, otherwise false (buffer is full). */
@@ -263,4 +263,3 @@ lv2_event_write_event(LV2_Event_Iterator* iter,
#endif

#endif /* LV2_EVENT_HELPERS_H */


+ 26
- 28
distrho/src/lv2/event.h View File

@@ -1,5 +1,5 @@
/*
Copyright 2008-2011 David Robillard <http://drobilla.net>
Copyright 2008-2016 David Robillard <http://drobilla.net>
Copyright 2006-2007 Lars Luthman <lars.luthman@gmail.com>

Permission to use, copy, modify, and/or distribute this software for any
@@ -16,38 +16,32 @@
*/

/**
@file event.h
C API for the LV2 Event extension <http://lv2plug.in/ns/ext/event>.

This extension is a generic transport mechanism for time stamped events
of any type (e.g. MIDI, OSC, ramps, etc). Each port can transport mixed
events of any type; the type of events and timestamps are defined by a URI
which is mapped to an integer by the host for performance reasons.

This extension requires the host to support the LV2 URI Map extension.
Any host which supports this extension MUST guarantee that any call to
the LV2 URI Map uri_to_id function with the URI of this extension as the
'map' argument returns a value within the range of uint16_t.
@defgroup event Event

Generic time-stamped events, see <http://lv2plug.in/ns/ext/event> for
details.

@{
*/

#ifndef LV2_EVENT_H
#define LV2_EVENT_H

#define LV2_EVENT_URI "http://lv2plug.in/ns/ext/event"
#define LV2_EVENT_PREFIX LV2_EVENT_URI "#"
#define LV2_EVENT_URI "http://lv2plug.in/ns/ext/event" ///< http://lv2plug.in/ns/ext/event
#define LV2_EVENT_PREFIX LV2_EVENT_URI "#" ///< http://lv2plug.in/ns/ext/event#

#define LV2_EVENT__Event LV2_EVENT_PREFIX "Event"
#define LV2_EVENT__EventPort LV2_EVENT_PREFIX "EventPort"
#define LV2_EVENT__FrameStamp LV2_EVENT_PREFIX "FrameStamp"
#define LV2_EVENT__TimeStamp LV2_EVENT_PREFIX "TimeStamp"
#define LV2_EVENT__generatesTimeStamp LV2_EVENT_PREFIX "generatesTimeStamp"
#define LV2_EVENT__generic LV2_EVENT_PREFIX "generic"
#define LV2_EVENT__inheritsEvent LV2_EVENT_PREFIX "inheritsEvent"
#define LV2_EVENT__inheritsTimeStamp LV2_EVENT_PREFIX "inheritsTimeStamp"
#define LV2_EVENT__supportsEvent LV2_EVENT_PREFIX "supportsEvent"
#define LV2_EVENT__supportsTimeStamp LV2_EVENT_PREFIX "supportsTimeStamp"
#define LV2_EVENT__Event LV2_EVENT_PREFIX "Event" ///< http://lv2plug.in/ns/ext/event#Event
#define LV2_EVENT__EventPort LV2_EVENT_PREFIX "EventPort" ///< http://lv2plug.in/ns/ext/event#EventPort
#define LV2_EVENT__FrameStamp LV2_EVENT_PREFIX "FrameStamp" ///< http://lv2plug.in/ns/ext/event#FrameStamp
#define LV2_EVENT__TimeStamp LV2_EVENT_PREFIX "TimeStamp" ///< http://lv2plug.in/ns/ext/event#TimeStamp
#define LV2_EVENT__generatesTimeStamp LV2_EVENT_PREFIX "generatesTimeStamp" ///< http://lv2plug.in/ns/ext/event#generatesTimeStamp
#define LV2_EVENT__generic LV2_EVENT_PREFIX "generic" ///< http://lv2plug.in/ns/ext/event#generic
#define LV2_EVENT__inheritsEvent LV2_EVENT_PREFIX "inheritsEvent" ///< http://lv2plug.in/ns/ext/event#inheritsEvent
#define LV2_EVENT__inheritsTimeStamp LV2_EVENT_PREFIX "inheritsTimeStamp" ///< http://lv2plug.in/ns/ext/event#inheritsTimeStamp
#define LV2_EVENT__supportsEvent LV2_EVENT_PREFIX "supportsEvent" ///< http://lv2plug.in/ns/ext/event#supportsEvent
#define LV2_EVENT__supportsTimeStamp LV2_EVENT_PREFIX "supportsTimeStamp" ///< http://lv2plug.in/ns/ext/event#supportsTimeStamp

#define LV2_EVENT_AUDIO_STAMP 0
#define LV2_EVENT_AUDIO_STAMP 0 ///< Special timestamp type for audio frames

#include <stdint.h>

@@ -255,7 +249,7 @@ typedef struct {
@param context The calling context. Like event types, this is a mapped
URI, see lv2_context.h. Simple plugin with just a run() method should
pass 0 here (the ID of the 'standard' LV2 run context). The host
guarantees that this function is realtime safe iff @a context is
guarantees that this function is realtime safe iff the context is
realtime safe.

PLUGINS THAT VIOLATE THESE RULES MAY CAUSE CRASHES AND MEMORY LEAKS.
@@ -278,7 +272,7 @@ typedef struct {
@param context The calling context. Like event types, this is a mapped
URI, see lv2_context.h. Simple plugin with just a run() method should
pass 0 here (the ID of the 'standard' LV2 run context). The host
guarantees that this function is realtime safe iff @a context is
guarantees that this function is realtime safe iff the context is
realtime safe.

PLUGINS THAT VIOLATE THESE RULES MAY CAUSE CRASHES AND MEMORY LEAKS.
@@ -292,3 +286,7 @@ typedef struct {
#endif

#endif /* LV2_EVENT_H */

/**
@}
*/

+ 14
- 15
distrho/src/lv2/instance-access.h View File

@@ -1,6 +1,6 @@
/*
LV2 Instance Access Extension
Copyright 2008-2012 David Robillard <http://drobilla.net>
Copyright 2008-2016 David Robillard <http://drobilla.net>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -15,23 +15,22 @@
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/

#ifndef LV2_INSTANCE_ACCESS_H
#define LV2_INSTANCE_ACCESS_H
/**
@defgroup instance-access Instance Access

#define LV2_INSTANCE_ACCESS_URI "http://lv2plug.in/ns/ext/instance-access"
Access to the LV2_Handle of a plugin for UIs; see
<http://lv2plug.in/ns/ext/instance-access> for details.

/**
@file instance-access.h
C header for the LV2 Instance Access extension
<http://lv2plug.in/ns/ext/instance-access>.
This extension defines a method for (e.g.) plugin UIs to get a direct
handle to an LV2 plugin instance (LV2_Handle), if possible.
To support this feature the host must pass an LV2_Feature struct to the
UI instantiate method with URI "http://lv2plug.in/ns/ext/instance-access"
and data pointed directly to the LV2_Handle of the plugin instance.
@{
*/

#ifndef LV2_INSTANCE_ACCESS_H
#define LV2_INSTANCE_ACCESS_H

#define LV2_INSTANCE_ACCESS_URI "http://lv2plug.in/ns/ext/instance-access" ///< http://lv2plug.in/ns/ext/instance-access

#endif /* LV2_INSTANCE_ACCESS_H */

/**
@}
*/

+ 23
- 13
distrho/src/lv2/log.h View File

@@ -1,5 +1,5 @@
/*
Copyright 2012 David Robillard <http://drobilla.net>
Copyright 2012-2016 David Robillard <http://drobilla.net>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -15,22 +15,26 @@
*/

/**
@file log.h C header for the LV2 Log extension
<http://lv2plug.in/ns/ext/log>.
@defgroup log Log

Interface for plugins to log via the host; see
<http://lv2plug.in/ns/ext/log> for details.

@{
*/

#ifndef LV2_LOG_H
#define LV2_LOG_H

#define LV2_LOG_URI "http://lv2plug.in/ns/ext/log"
#define LV2_LOG_PREFIX LV2_LOG_URI "#"
#define LV2_LOG_URI "http://lv2plug.in/ns/ext/log" ///< http://lv2plug.in/ns/ext/log
#define LV2_LOG_PREFIX LV2_LOG_URI "#" ///< http://lv2plug.in/ns/ext/log#

#define LV2_LOG__Entry LV2_LOG_PREFIX "Entry"
#define LV2_LOG__Error LV2_LOG_PREFIX "Error"
#define LV2_LOG__Note LV2_LOG_PREFIX "Note"
#define LV2_LOG__Trace LV2_LOG_PREFIX "Trace"
#define LV2_LOG__Warning LV2_LOG_PREFIX "Warning"
#define LV2_LOG__log LV2_LOG_PREFIX "log"
#define LV2_LOG__Entry LV2_LOG_PREFIX "Entry" ///< http://lv2plug.in/ns/ext/log#Entry
#define LV2_LOG__Error LV2_LOG_PREFIX "Error" ///< http://lv2plug.in/ns/ext/log#Error
#define LV2_LOG__Note LV2_LOG_PREFIX "Note" ///< http://lv2plug.in/ns/ext/log#Note
#define LV2_LOG__Trace LV2_LOG_PREFIX "Trace" ///< http://lv2plug.in/ns/ext/log#Trace
#define LV2_LOG__Warning LV2_LOG_PREFIX "Warning" ///< http://lv2plug.in/ns/ext/log#Warning
#define LV2_LOG__log LV2_LOG_PREFIX "log" ///< http://lv2plug.in/ns/ext/log#log

#include <stdarg.h>

@@ -40,12 +44,14 @@
extern "C" {
#endif

/** @cond */
#ifdef __GNUC__
/** Allow type checking of printf-like functions. */
# define LV2_LOG_FUNC(fmt, arg1) __attribute__((format(printf, fmt, arg1)))
#else
# define LV2_LOG_FUNC(fmt, arg1)
#endif
/** @endcond */

/**
Opaque data to host data for LV2_Log_Log.
@@ -69,7 +75,7 @@ typedef struct _LV2_Log {

The API of this function matches that of the standard C printf function,
except for the addition of the first two parameters. This function may
be called from any non-realtime context, or from any context if @p type
be called from any non-realtime context, or from any context if `type`
is @ref LV2_LOG__Trace.
*/
LV2_LOG_FUNC(3, 4)
@@ -83,7 +89,7 @@ typedef struct _LV2_Log {
The API of this function matches that of the standard C vprintf
function, except for the addition of the first two parameters. This
function may be called from any non-realtime context, or from any
context if @p type is @ref LV2_LOG__Trace.
context if `type` is @ref LV2_LOG__Trace.
*/
LV2_LOG_FUNC(3, 0)
int (*vprintf)(LV2_Log_Handle handle,
@@ -97,3 +103,7 @@ typedef struct _LV2_Log {
#endif

#endif /* LV2_LOG_H */

/**
@}
*/

+ 34
- 20
distrho/src/lv2/logger.h View File

@@ -1,5 +1,5 @@
/*
Copyright 2012-2013 David Robillard <http://drobilla.net>
Copyright 2012-2016 David Robillard <http://drobilla.net>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -15,13 +15,14 @@
*/

/**
@file logger.h Convenience API for easy logging in plugin code.
@defgroup logger Logger
@ingroup log

This file provides simple wrappers for the most common log operations for
use in plugin implementations. If host support for logging is not
available, then these functions will print to stderr instead.
Convenience API for easy logging in plugin code. This API provides simple
wrappers for logging from a plugin, which automatically fall back to
printing to stderr if host support is unavailabe.

This header is non-normative, it is provided for convenience.
@{
*/

#ifndef LV2_ATOM_LOGGER_H
@@ -49,27 +50,40 @@ typedef struct {
} LV2_Log_Logger;

/**
Initialise @p logger.
Set `map` as the URI map for `logger`.

URIs will be mapped using @p map and stored, a reference to @p map itself is
not held. Both @p map and @p log may be NULL when unsupported by the host,
in which case the implementation will fall back to printing to stderr.
This affects the message type URIDs (Error, Warning, etc) which are passed
to the log's print functions.
*/
static inline void
lv2_log_logger_init(LV2_Log_Logger* logger,
LV2_URID_Map* map,
LV2_Log_Log* log)
lv2_log_logger_set_map(LV2_Log_Logger* logger, LV2_URID_Map* map)
{
memset(logger, 0, sizeof(LV2_Log_Logger));
logger->log = log;
if (map) {
logger->Error = map->map(map->handle, LV2_LOG__Error);
logger->Note = map->map(map->handle, LV2_LOG__Note);
logger->Trace = map->map(map->handle, LV2_LOG__Trace);
logger->Warning = map->map(map->handle, LV2_LOG__Warning);
} else {
logger->Error = logger->Note = logger->Trace = logger->Warning = 0;
}
}

/**
Initialise `logger`.

URIs will be mapped using `map` and stored, a reference to `map` itself is
not held. Both `map` and `log` may be NULL when unsupported by the host,
in which case the implementation will fall back to printing to stderr.
*/
static inline void
lv2_log_logger_init(LV2_Log_Logger* logger,
LV2_URID_Map* map,
LV2_Log_Log* log)
{
logger->log = log;
lv2_log_logger_set_map(logger, map);
}

/**
Log a message to the host, or stderr if support is unavailable.
*/
@@ -80,7 +94,7 @@ lv2_log_vprintf(LV2_Log_Logger* logger,
const char* fmt,
va_list args)
{
if (logger->log) {
if (logger && logger->log) {
return logger->log->vprintf(logger->log->handle, type, fmt, args);
} else {
return vfprintf(stderr, fmt, args);
@@ -135,12 +149,12 @@ lv2_log_warning(LV2_Log_Logger* logger, const char* fmt, ...)
return ret;
}

/**
@}
*/

#ifdef __cplusplus
} /* extern "C" */
#endif

#endif /* LV2_LOG_LOGGER_H */

/**
@}
*/

+ 115
- 99
distrho/src/lv2/lv2.h View File

@@ -19,9 +19,11 @@
*/

/**
@file lv2.h
API for the LV2 specification <http://lv2plug.in/ns/lv2core>.
Revision: 12.0
@defgroup lv2core LV2 Core

Core LV2 specification, see <http://lv2plug.in/ns/lv2core> for details.

@{
*/

#ifndef LV2_H_INCLUDED
@@ -29,93 +31,93 @@

#include <stdint.h>

#define LV2_CORE_URI "http://lv2plug.in/ns/lv2core"
#define LV2_CORE_PREFIX LV2_CORE_URI "#"
#define LV2_CORE__AllpassPlugin LV2_CORE_PREFIX "AllpassPlugin"
#define LV2_CORE__AmplifierPlugin LV2_CORE_PREFIX "AmplifierPlugin"
#define LV2_CORE__AnalyserPlugin LV2_CORE_PREFIX "AnalyserPlugin"
#define LV2_CORE__AudioPort LV2_CORE_PREFIX "AudioPort"
#define LV2_CORE__BandpassPlugin LV2_CORE_PREFIX "BandpassPlugin"
#define LV2_CORE__CVPort LV2_CORE_PREFIX "CVPort"
#define LV2_CORE__ChorusPlugin LV2_CORE_PREFIX "ChorusPlugin"
#define LV2_CORE__CombPlugin LV2_CORE_PREFIX "CombPlugin"
#define LV2_CORE__CompressorPlugin LV2_CORE_PREFIX "CompressorPlugin"
#define LV2_CORE__ConstantPlugin LV2_CORE_PREFIX "ConstantPlugin"
#define LV2_CORE__ControlPort LV2_CORE_PREFIX "ControlPort"
#define LV2_CORE__ConverterPlugin LV2_CORE_PREFIX "ConverterPlugin"
#define LV2_CORE__DelayPlugin LV2_CORE_PREFIX "DelayPlugin"
#define LV2_CORE__DistortionPlugin LV2_CORE_PREFIX "DistortionPlugin"
#define LV2_CORE__DynamicsPlugin LV2_CORE_PREFIX "DynamicsPlugin"
#define LV2_CORE__EQPlugin LV2_CORE_PREFIX "EQPlugin"
#define LV2_CORE__EnvelopePlugin LV2_CORE_PREFIX "EnvelopePlugin"
#define LV2_CORE__ExpanderPlugin LV2_CORE_PREFIX "ExpanderPlugin"
#define LV2_CORE__ExtensionData LV2_CORE_PREFIX "ExtensionData"
#define LV2_CORE__Feature LV2_CORE_PREFIX "Feature"
#define LV2_CORE__FilterPlugin LV2_CORE_PREFIX "FilterPlugin"
#define LV2_CORE__FlangerPlugin LV2_CORE_PREFIX "FlangerPlugin"
#define LV2_CORE__FunctionPlugin LV2_CORE_PREFIX "FunctionPlugin"
#define LV2_CORE__GatePlugin LV2_CORE_PREFIX "GatePlugin"
#define LV2_CORE__GeneratorPlugin LV2_CORE_PREFIX "GeneratorPlugin"
#define LV2_CORE__HighpassPlugin LV2_CORE_PREFIX "HighpassPlugin"
#define LV2_CORE__InputPort LV2_CORE_PREFIX "InputPort"
#define LV2_CORE__InstrumentPlugin LV2_CORE_PREFIX "InstrumentPlugin"
#define LV2_CORE__LimiterPlugin LV2_CORE_PREFIX "LimiterPlugin"
#define LV2_CORE__LowpassPlugin LV2_CORE_PREFIX "LowpassPlugin"
#define LV2_CORE__MixerPlugin LV2_CORE_PREFIX "MixerPlugin"
#define LV2_CORE__ModulatorPlugin LV2_CORE_PREFIX "ModulatorPlugin"
#define LV2_CORE__MultiEQPlugin LV2_CORE_PREFIX "MultiEQPlugin"
#define LV2_CORE__OscillatorPlugin LV2_CORE_PREFIX "OscillatorPlugin"
#define LV2_CORE__OutputPort LV2_CORE_PREFIX "OutputPort"
#define LV2_CORE__ParaEQPlugin LV2_CORE_PREFIX "ParaEQPlugin"
#define LV2_CORE__PhaserPlugin LV2_CORE_PREFIX "PhaserPlugin"
#define LV2_CORE__PitchPlugin LV2_CORE_PREFIX "PitchPlugin"
#define LV2_CORE__Plugin LV2_CORE_PREFIX "Plugin"
#define LV2_CORE__PluginBase LV2_CORE_PREFIX "PluginBase"
#define LV2_CORE__Point LV2_CORE_PREFIX "Point"
#define LV2_CORE__Port LV2_CORE_PREFIX "Port"
#define LV2_CORE__PortProperty LV2_CORE_PREFIX "PortProperty"
#define LV2_CORE__Resource LV2_CORE_PREFIX "Resource"
#define LV2_CORE__ReverbPlugin LV2_CORE_PREFIX "ReverbPlugin"
#define LV2_CORE__ScalePoint LV2_CORE_PREFIX "ScalePoint"
#define LV2_CORE__SimulatorPlugin LV2_CORE_PREFIX "SimulatorPlugin"
#define LV2_CORE__SpatialPlugin LV2_CORE_PREFIX "SpatialPlugin"
#define LV2_CORE__Specification LV2_CORE_PREFIX "Specification"
#define LV2_CORE__SpectralPlugin LV2_CORE_PREFIX "SpectralPlugin"
#define LV2_CORE__UtilityPlugin LV2_CORE_PREFIX "UtilityPlugin"
#define LV2_CORE__WaveshaperPlugin LV2_CORE_PREFIX "WaveshaperPlugin"
#define LV2_CORE__appliesTo LV2_CORE_PREFIX "appliesTo"
#define LV2_CORE__binary LV2_CORE_PREFIX "binary"
#define LV2_CORE__connectionOptional LV2_CORE_PREFIX "connectionOptional"
#define LV2_CORE__control LV2_CORE_PREFIX "control"
#define LV2_CORE__default LV2_CORE_PREFIX "default"
#define LV2_CORE__designation LV2_CORE_PREFIX "designation"
#define LV2_CORE__documentation LV2_CORE_PREFIX "documentation"
#define LV2_CORE__enumeration LV2_CORE_PREFIX "enumeration"
#define LV2_CORE__extensionData LV2_CORE_PREFIX "extensionData"
#define LV2_CORE__freeWheeling LV2_CORE_PREFIX "freeWheeling"
#define LV2_CORE__hardRTCapable LV2_CORE_PREFIX "hardRTCapable"
#define LV2_CORE__inPlaceBroken LV2_CORE_PREFIX "inPlaceBroken"
#define LV2_CORE__index LV2_CORE_PREFIX "index"
#define LV2_CORE__integer LV2_CORE_PREFIX "integer"
#define LV2_CORE__isLive LV2_CORE_PREFIX "isLive"
#define LV2_CORE__latency LV2_CORE_PREFIX "latency"
#define LV2_CORE__maximum LV2_CORE_PREFIX "maximum"
#define LV2_CORE__microVersion LV2_CORE_PREFIX "microVersion"
#define LV2_CORE__minimum LV2_CORE_PREFIX "minimum"
#define LV2_CORE__minorVersion LV2_CORE_PREFIX "minorVersion"
#define LV2_CORE__name LV2_CORE_PREFIX "name"
#define LV2_CORE__optionalFeature LV2_CORE_PREFIX "optionalFeature"
#define LV2_CORE__port LV2_CORE_PREFIX "port"
#define LV2_CORE__portProperty LV2_CORE_PREFIX "portProperty"
#define LV2_CORE__project LV2_CORE_PREFIX "project"
#define LV2_CORE__prototype LV2_CORE_PREFIX "prototype"
#define LV2_CORE__reportsLatency LV2_CORE_PREFIX "reportsLatency"
#define LV2_CORE__requiredFeature LV2_CORE_PREFIX "requiredFeature"
#define LV2_CORE__sampleRate LV2_CORE_PREFIX "sampleRate"
#define LV2_CORE__scalePoint LV2_CORE_PREFIX "scalePoint"
#define LV2_CORE__symbol LV2_CORE_PREFIX "symbol"
#define LV2_CORE__toggled LV2_CORE_PREFIX "toggled"
#define LV2_CORE_URI "http://lv2plug.in/ns/lv2core" ///< http://lv2plug.in/ns/lv2core
#define LV2_CORE_PREFIX LV2_CORE_URI "#" ///< http://lv2plug.in/ns/lv2core#
#define LV2_CORE__AllpassPlugin LV2_CORE_PREFIX "AllpassPlugin" ///< http://lv2plug.in/ns/lv2core#AllpassPlugin
#define LV2_CORE__AmplifierPlugin LV2_CORE_PREFIX "AmplifierPlugin" ///< http://lv2plug.in/ns/lv2core#AmplifierPlugin
#define LV2_CORE__AnalyserPlugin LV2_CORE_PREFIX "AnalyserPlugin" ///< http://lv2plug.in/ns/lv2core#AnalyserPlugin
#define LV2_CORE__AudioPort LV2_CORE_PREFIX "AudioPort" ///< http://lv2plug.in/ns/lv2core#AudioPort
#define LV2_CORE__BandpassPlugin LV2_CORE_PREFIX "BandpassPlugin" ///< http://lv2plug.in/ns/lv2core#BandpassPlugin
#define LV2_CORE__CVPort LV2_CORE_PREFIX "CVPort" ///< http://lv2plug.in/ns/lv2core#CVPort
#define LV2_CORE__ChorusPlugin LV2_CORE_PREFIX "ChorusPlugin" ///< http://lv2plug.in/ns/lv2core#ChorusPlugin
#define LV2_CORE__CombPlugin LV2_CORE_PREFIX "CombPlugin" ///< http://lv2plug.in/ns/lv2core#CombPlugin
#define LV2_CORE__CompressorPlugin LV2_CORE_PREFIX "CompressorPlugin" ///< http://lv2plug.in/ns/lv2core#CompressorPlugin
#define LV2_CORE__ConstantPlugin LV2_CORE_PREFIX "ConstantPlugin" ///< http://lv2plug.in/ns/lv2core#ConstantPlugin
#define LV2_CORE__ControlPort LV2_CORE_PREFIX "ControlPort" ///< http://lv2plug.in/ns/lv2core#ControlPort
#define LV2_CORE__ConverterPlugin LV2_CORE_PREFIX "ConverterPlugin" ///< http://lv2plug.in/ns/lv2core#ConverterPlugin
#define LV2_CORE__DelayPlugin LV2_CORE_PREFIX "DelayPlugin" ///< http://lv2plug.in/ns/lv2core#DelayPlugin
#define LV2_CORE__DistortionPlugin LV2_CORE_PREFIX "DistortionPlugin" ///< http://lv2plug.in/ns/lv2core#DistortionPlugin
#define LV2_CORE__DynamicsPlugin LV2_CORE_PREFIX "DynamicsPlugin" ///< http://lv2plug.in/ns/lv2core#DynamicsPlugin
#define LV2_CORE__EQPlugin LV2_CORE_PREFIX "EQPlugin" ///< http://lv2plug.in/ns/lv2core#EQPlugin
#define LV2_CORE__EnvelopePlugin LV2_CORE_PREFIX "EnvelopePlugin" ///< http://lv2plug.in/ns/lv2core#EnvelopePlugin
#define LV2_CORE__ExpanderPlugin LV2_CORE_PREFIX "ExpanderPlugin" ///< http://lv2plug.in/ns/lv2core#ExpanderPlugin
#define LV2_CORE__ExtensionData LV2_CORE_PREFIX "ExtensionData" ///< http://lv2plug.in/ns/lv2core#ExtensionData
#define LV2_CORE__Feature LV2_CORE_PREFIX "Feature" ///< http://lv2plug.in/ns/lv2core#Feature
#define LV2_CORE__FilterPlugin LV2_CORE_PREFIX "FilterPlugin" ///< http://lv2plug.in/ns/lv2core#FilterPlugin
#define LV2_CORE__FlangerPlugin LV2_CORE_PREFIX "FlangerPlugin" ///< http://lv2plug.in/ns/lv2core#FlangerPlugin
#define LV2_CORE__FunctionPlugin LV2_CORE_PREFIX "FunctionPlugin" ///< http://lv2plug.in/ns/lv2core#FunctionPlugin
#define LV2_CORE__GatePlugin LV2_CORE_PREFIX "GatePlugin" ///< http://lv2plug.in/ns/lv2core#GatePlugin
#define LV2_CORE__GeneratorPlugin LV2_CORE_PREFIX "GeneratorPlugin" ///< http://lv2plug.in/ns/lv2core#GeneratorPlugin
#define LV2_CORE__HighpassPlugin LV2_CORE_PREFIX "HighpassPlugin" ///< http://lv2plug.in/ns/lv2core#HighpassPlugin
#define LV2_CORE__InputPort LV2_CORE_PREFIX "InputPort" ///< http://lv2plug.in/ns/lv2core#InputPort
#define LV2_CORE__InstrumentPlugin LV2_CORE_PREFIX "InstrumentPlugin" ///< http://lv2plug.in/ns/lv2core#InstrumentPlugin
#define LV2_CORE__LimiterPlugin LV2_CORE_PREFIX "LimiterPlugin" ///< http://lv2plug.in/ns/lv2core#LimiterPlugin
#define LV2_CORE__LowpassPlugin LV2_CORE_PREFIX "LowpassPlugin" ///< http://lv2plug.in/ns/lv2core#LowpassPlugin
#define LV2_CORE__MixerPlugin LV2_CORE_PREFIX "MixerPlugin" ///< http://lv2plug.in/ns/lv2core#MixerPlugin
#define LV2_CORE__ModulatorPlugin LV2_CORE_PREFIX "ModulatorPlugin" ///< http://lv2plug.in/ns/lv2core#ModulatorPlugin
#define LV2_CORE__MultiEQPlugin LV2_CORE_PREFIX "MultiEQPlugin" ///< http://lv2plug.in/ns/lv2core#MultiEQPlugin
#define LV2_CORE__OscillatorPlugin LV2_CORE_PREFIX "OscillatorPlugin" ///< http://lv2plug.in/ns/lv2core#OscillatorPlugin
#define LV2_CORE__OutputPort LV2_CORE_PREFIX "OutputPort" ///< http://lv2plug.in/ns/lv2core#OutputPort
#define LV2_CORE__ParaEQPlugin LV2_CORE_PREFIX "ParaEQPlugin" ///< http://lv2plug.in/ns/lv2core#ParaEQPlugin
#define LV2_CORE__PhaserPlugin LV2_CORE_PREFIX "PhaserPlugin" ///< http://lv2plug.in/ns/lv2core#PhaserPlugin
#define LV2_CORE__PitchPlugin LV2_CORE_PREFIX "PitchPlugin" ///< http://lv2plug.in/ns/lv2core#PitchPlugin
#define LV2_CORE__Plugin LV2_CORE_PREFIX "Plugin" ///< http://lv2plug.in/ns/lv2core#Plugin
#define LV2_CORE__PluginBase LV2_CORE_PREFIX "PluginBase" ///< http://lv2plug.in/ns/lv2core#PluginBase
#define LV2_CORE__Point LV2_CORE_PREFIX "Point" ///< http://lv2plug.in/ns/lv2core#Point
#define LV2_CORE__Port LV2_CORE_PREFIX "Port" ///< http://lv2plug.in/ns/lv2core#Port
#define LV2_CORE__PortProperty LV2_CORE_PREFIX "PortProperty" ///< http://lv2plug.in/ns/lv2core#PortProperty
#define LV2_CORE__Resource LV2_CORE_PREFIX "Resource" ///< http://lv2plug.in/ns/lv2core#Resource
#define LV2_CORE__ReverbPlugin LV2_CORE_PREFIX "ReverbPlugin" ///< http://lv2plug.in/ns/lv2core#ReverbPlugin
#define LV2_CORE__ScalePoint LV2_CORE_PREFIX "ScalePoint" ///< http://lv2plug.in/ns/lv2core#ScalePoint
#define LV2_CORE__SimulatorPlugin LV2_CORE_PREFIX "SimulatorPlugin" ///< http://lv2plug.in/ns/lv2core#SimulatorPlugin
#define LV2_CORE__SpatialPlugin LV2_CORE_PREFIX "SpatialPlugin" ///< http://lv2plug.in/ns/lv2core#SpatialPlugin
#define LV2_CORE__Specification LV2_CORE_PREFIX "Specification" ///< http://lv2plug.in/ns/lv2core#Specification
#define LV2_CORE__SpectralPlugin LV2_CORE_PREFIX "SpectralPlugin" ///< http://lv2plug.in/ns/lv2core#SpectralPlugin
#define LV2_CORE__UtilityPlugin LV2_CORE_PREFIX "UtilityPlugin" ///< http://lv2plug.in/ns/lv2core#UtilityPlugin
#define LV2_CORE__WaveshaperPlugin LV2_CORE_PREFIX "WaveshaperPlugin" ///< http://lv2plug.in/ns/lv2core#WaveshaperPlugin
#define LV2_CORE__appliesTo LV2_CORE_PREFIX "appliesTo" ///< http://lv2plug.in/ns/lv2core#appliesTo
#define LV2_CORE__binary LV2_CORE_PREFIX "binary" ///< http://lv2plug.in/ns/lv2core#binary
#define LV2_CORE__connectionOptional LV2_CORE_PREFIX "connectionOptional" ///< http://lv2plug.in/ns/lv2core#connectionOptional
#define LV2_CORE__control LV2_CORE_PREFIX "control" ///< http://lv2plug.in/ns/lv2core#control
#define LV2_CORE__default LV2_CORE_PREFIX "default" ///< http://lv2plug.in/ns/lv2core#default
#define LV2_CORE__designation LV2_CORE_PREFIX "designation" ///< http://lv2plug.in/ns/lv2core#designation
#define LV2_CORE__documentation LV2_CORE_PREFIX "documentation" ///< http://lv2plug.in/ns/lv2core#documentation
#define LV2_CORE__enumeration LV2_CORE_PREFIX "enumeration" ///< http://lv2plug.in/ns/lv2core#enumeration
#define LV2_CORE__extensionData LV2_CORE_PREFIX "extensionData" ///< http://lv2plug.in/ns/lv2core#extensionData
#define LV2_CORE__freeWheeling LV2_CORE_PREFIX "freeWheeling" ///< http://lv2plug.in/ns/lv2core#freeWheeling
#define LV2_CORE__hardRTCapable LV2_CORE_PREFIX "hardRTCapable" ///< http://lv2plug.in/ns/lv2core#hardRTCapable
#define LV2_CORE__inPlaceBroken LV2_CORE_PREFIX "inPlaceBroken" ///< http://lv2plug.in/ns/lv2core#inPlaceBroken
#define LV2_CORE__index LV2_CORE_PREFIX "index" ///< http://lv2plug.in/ns/lv2core#index
#define LV2_CORE__integer LV2_CORE_PREFIX "integer" ///< http://lv2plug.in/ns/lv2core#integer
#define LV2_CORE__isLive LV2_CORE_PREFIX "isLive" ///< http://lv2plug.in/ns/lv2core#isLive
#define LV2_CORE__latency LV2_CORE_PREFIX "latency" ///< http://lv2plug.in/ns/lv2core#latency
#define LV2_CORE__maximum LV2_CORE_PREFIX "maximum" ///< http://lv2plug.in/ns/lv2core#maximum
#define LV2_CORE__microVersion LV2_CORE_PREFIX "microVersion" ///< http://lv2plug.in/ns/lv2core#microVersion
#define LV2_CORE__minimum LV2_CORE_PREFIX "minimum" ///< http://lv2plug.in/ns/lv2core#minimum
#define LV2_CORE__minorVersion LV2_CORE_PREFIX "minorVersion" ///< http://lv2plug.in/ns/lv2core#minorVersion
#define LV2_CORE__name LV2_CORE_PREFIX "name" ///< http://lv2plug.in/ns/lv2core#name
#define LV2_CORE__optionalFeature LV2_CORE_PREFIX "optionalFeature" ///< http://lv2plug.in/ns/lv2core#optionalFeature
#define LV2_CORE__port LV2_CORE_PREFIX "port" ///< http://lv2plug.in/ns/lv2core#port
#define LV2_CORE__portProperty LV2_CORE_PREFIX "portProperty" ///< http://lv2plug.in/ns/lv2core#portProperty
#define LV2_CORE__project LV2_CORE_PREFIX "project" ///< http://lv2plug.in/ns/lv2core#project
#define LV2_CORE__prototype LV2_CORE_PREFIX "prototype" ///< http://lv2plug.in/ns/lv2core#prototype
#define LV2_CORE__reportsLatency LV2_CORE_PREFIX "reportsLatency" ///< http://lv2plug.in/ns/lv2core#reportsLatency
#define LV2_CORE__requiredFeature LV2_CORE_PREFIX "requiredFeature" ///< http://lv2plug.in/ns/lv2core#requiredFeature
#define LV2_CORE__sampleRate LV2_CORE_PREFIX "sampleRate" ///< http://lv2plug.in/ns/lv2core#sampleRate
#define LV2_CORE__scalePoint LV2_CORE_PREFIX "scalePoint" ///< http://lv2plug.in/ns/lv2core#scalePoint
#define LV2_CORE__symbol LV2_CORE_PREFIX "symbol" ///< http://lv2plug.in/ns/lv2core#symbol
#define LV2_CORE__toggled LV2_CORE_PREFIX "toggled" ///< http://lv2plug.in/ns/lv2core#toggled

#ifdef __cplusplus
extern "C" {
@@ -135,7 +137,7 @@ typedef void * LV2_Handle;

Features allow hosts to make additional functionality available to plugins
without requiring modification to the LV2 API. Extensions may define new
features and specify the @ref URI and @ref data to be used if necessary.
features and specify the `URI` and `data` to be used if necessary.
Some features, such as lv2:isLive, do not require the host to pass data.
*/
typedef struct _LV2_Feature {
@@ -150,7 +152,7 @@ typedef struct _LV2_Feature {
Pointer to arbitrary data.

The format of this data is defined by the extension which describes the
feature with the given @ref URI.
feature with the given `URI`.
*/
void * data;
} LV2_Feature;
@@ -276,12 +278,12 @@ typedef struct _LV2_Descriptor {
things that the plugin MUST NOT do within the run() function (see
lv2core.ttl for details).

As a special case, when @p sample_count == 0, the plugin should update
As a special case, when `sample_count` is 0, the plugin should update
any output ports that represent a single instant in time (e.g. control
ports, but not audio ports). This is particularly useful for latent
plugins, which should update their latency output port so hosts can
pre-roll plugins to compute latency. Plugins MUST NOT crash when
@p sample_count == 0.
`sample_count` is 0.

@param instance Instance to be run.

@@ -340,14 +342,23 @@ typedef struct _LV2_Descriptor {
const void * (*extension_data)(const char * uri);
} LV2_Descriptor;

/**
Helper macro needed for LV2_SYMBOL_EXPORT when using C++.
*/
#ifdef __cplusplus
# define LV2_SYMBOL_EXTERN extern "C"
#else
# define LV2_SYMBOL_EXTERN
#endif

/**
Put this (LV2_SYMBOL_EXPORT) before any functions that are to be loaded
by the host as a symbol from the dynamic library.
*/
#ifdef _WIN32
# define LV2_SYMBOL_EXPORT __declspec(dllexport)
# define LV2_SYMBOL_EXPORT LV2_SYMBOL_EXTERN __declspec(dllexport)
#else
# define LV2_SYMBOL_EXPORT
# define LV2_SYMBOL_EXPORT LV2_SYMBOL_EXTERN __attribute__((visibility("default")))
#endif

/**
@@ -368,9 +379,9 @@ typedef struct _LV2_Descriptor {
function to find the LV2_Descriptor for the desired plugin. Plugins are
accessed by index using values from 0 upwards. This function MUST return
NULL for out of range indices, so the host can enumerate plugins by
increasing @p index until NULL is returned.
increasing `index` until NULL is returned.

Note that @p index has no meaning, hosts MUST NOT depend on it remaining
Note that `index` has no meaning, hosts MUST NOT depend on it remaining
consistent between loads of the plugin library.
*/
LV2_SYMBOL_EXPORT
@@ -418,7 +429,7 @@ typedef struct {

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.
enumerate plugins by increasing `index` until NULL is returned.
*/
const LV2_Descriptor * (*get_plugin)(LV2_Lib_Handle handle,
uint32_t index);
@@ -440,6 +451,7 @@ typedef struct {
be destroyed (using LV2_Lib_Descriptor::cleanup()) until all plugins loaded
from that library have been destroyed.
*/
LV2_SYMBOL_EXPORT
const LV2_Lib_Descriptor *
lv2_lib_descriptor(const char * bundle_path,
const LV2_Feature *const * features);
@@ -456,3 +468,7 @@ typedef const LV2_Lib_Descriptor *
#endif

#endif /* LV2_H_INCLUDED */

/**
@}
*/

+ 57
- 49
distrho/src/lv2/midi.h View File

@@ -1,5 +1,5 @@
/*
Copyright 2012 David Robillard <http://drobilla.net>
Copyright 2012-2016 David Robillard <http://drobilla.net>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -15,8 +15,12 @@
*/

/**
@file midi.h
C definitions for the LV2 MIDI extension <http://lv2plug.in/ns/ext/midi>.
@defgroup midi MIDI

Definitions of standard MIDI messages, see <http://lv2plug.in/ns/ext/midi>
for details.

@{
*/

#ifndef LV2_MIDI_H
@@ -30,50 +34,50 @@ extern "C" {
# include <stdbool.h>
#endif

#define LV2_MIDI_URI "http://lv2plug.in/ns/ext/midi"
#define LV2_MIDI_PREFIX LV2_MIDI_URI "#"
#define LV2_MIDI__ActiveSense LV2_MIDI_PREFIX "ActiveSense"
#define LV2_MIDI__Aftertouch LV2_MIDI_PREFIX "Aftertouch"
#define LV2_MIDI__Bender LV2_MIDI_PREFIX "Bender"
#define LV2_MIDI__ChannelPressure LV2_MIDI_PREFIX "ChannelPressure"
#define LV2_MIDI__Chunk LV2_MIDI_PREFIX "Chunk"
#define LV2_MIDI__Clock LV2_MIDI_PREFIX "Clock"
#define LV2_MIDI__Continue LV2_MIDI_PREFIX "Continue"
#define LV2_MIDI__Controller LV2_MIDI_PREFIX "Controller"
#define LV2_MIDI__MidiEvent LV2_MIDI_PREFIX "MidiEvent"
#define LV2_MIDI__NoteOff LV2_MIDI_PREFIX "NoteOff"
#define LV2_MIDI__NoteOn LV2_MIDI_PREFIX "NoteOn"
#define LV2_MIDI__ProgramChange LV2_MIDI_PREFIX "ProgramChange"
#define LV2_MIDI__QuarterFrame LV2_MIDI_PREFIX "QuarterFrame"
#define LV2_MIDI__Reset LV2_MIDI_PREFIX "Reset"
#define LV2_MIDI__SongPosition LV2_MIDI_PREFIX "SongPosition"
#define LV2_MIDI__SongSelect LV2_MIDI_PREFIX "SongSelect"
#define LV2_MIDI__Start LV2_MIDI_PREFIX "Start"
#define LV2_MIDI__Stop LV2_MIDI_PREFIX "Stop"
#define LV2_MIDI__SystemCommon LV2_MIDI_PREFIX "SystemCommon"
#define LV2_MIDI__SystemExclusive LV2_MIDI_PREFIX "SystemExclusive"
#define LV2_MIDI__SystemMessage LV2_MIDI_PREFIX "SystemMessage"
#define LV2_MIDI__SystemRealtime LV2_MIDI_PREFIX "SystemRealtime"
#define LV2_MIDI__Tick LV2_MIDI_PREFIX "Tick"
#define LV2_MIDI__TuneRequest LV2_MIDI_PREFIX "TuneRequest"
#define LV2_MIDI__VoiceMessage LV2_MIDI_PREFIX "VoiceMessage"
#define LV2_MIDI__benderValue LV2_MIDI_PREFIX "benderValue"
#define LV2_MIDI__binding LV2_MIDI_PREFIX "binding"
#define LV2_MIDI__byteNumber LV2_MIDI_PREFIX "byteNumber"
#define LV2_MIDI__channel LV2_MIDI_PREFIX "channel"
#define LV2_MIDI__chunk LV2_MIDI_PREFIX "chunk"
#define LV2_MIDI__controllerNumber LV2_MIDI_PREFIX "controllerNumber"
#define LV2_MIDI__controllerValue LV2_MIDI_PREFIX "controllerValue"
#define LV2_MIDI__noteNumber LV2_MIDI_PREFIX "noteNumber"
#define LV2_MIDI__pressure LV2_MIDI_PREFIX "pressure"
#define LV2_MIDI__programNumber LV2_MIDI_PREFIX "programNumber"
#define LV2_MIDI__property LV2_MIDI_PREFIX "property"
#define LV2_MIDI__songNumber LV2_MIDI_PREFIX "songNumber"
#define LV2_MIDI__songPosition LV2_MIDI_PREFIX "songPosition"
#define LV2_MIDI__status LV2_MIDI_PREFIX "status"
#define LV2_MIDI__statusMask LV2_MIDI_PREFIX "statusMask"
#define LV2_MIDI__velocity LV2_MIDI_PREFIX "velocity"
#define LV2_MIDI_URI "http://lv2plug.in/ns/ext/midi" ///< http://lv2plug.in/ns/ext/midi
#define LV2_MIDI_PREFIX LV2_MIDI_URI "#" ///< http://lv2plug.in/ns/ext/midi#
#define LV2_MIDI__ActiveSense LV2_MIDI_PREFIX "ActiveSense" ///< http://lv2plug.in/ns/ext/midi#ActiveSense
#define LV2_MIDI__Aftertouch LV2_MIDI_PREFIX "Aftertouch" ///< http://lv2plug.in/ns/ext/midi#Aftertouch
#define LV2_MIDI__Bender LV2_MIDI_PREFIX "Bender" ///< http://lv2plug.in/ns/ext/midi#Bender
#define LV2_MIDI__ChannelPressure LV2_MIDI_PREFIX "ChannelPressure" ///< http://lv2plug.in/ns/ext/midi#ChannelPressure
#define LV2_MIDI__Chunk LV2_MIDI_PREFIX "Chunk" ///< http://lv2plug.in/ns/ext/midi#Chunk
#define LV2_MIDI__Clock LV2_MIDI_PREFIX "Clock" ///< http://lv2plug.in/ns/ext/midi#Clock
#define LV2_MIDI__Continue LV2_MIDI_PREFIX "Continue" ///< http://lv2plug.in/ns/ext/midi#Continue
#define LV2_MIDI__Controller LV2_MIDI_PREFIX "Controller" ///< http://lv2plug.in/ns/ext/midi#Controller
#define LV2_MIDI__MidiEvent LV2_MIDI_PREFIX "MidiEvent" ///< http://lv2plug.in/ns/ext/midi#MidiEvent
#define LV2_MIDI__NoteOff LV2_MIDI_PREFIX "NoteOff" ///< http://lv2plug.in/ns/ext/midi#NoteOff
#define LV2_MIDI__NoteOn LV2_MIDI_PREFIX "NoteOn" ///< http://lv2plug.in/ns/ext/midi#NoteOn
#define LV2_MIDI__ProgramChange LV2_MIDI_PREFIX "ProgramChange" ///< http://lv2plug.in/ns/ext/midi#ProgramChange
#define LV2_MIDI__QuarterFrame LV2_MIDI_PREFIX "QuarterFrame" ///< http://lv2plug.in/ns/ext/midi#QuarterFrame
#define LV2_MIDI__Reset LV2_MIDI_PREFIX "Reset" ///< http://lv2plug.in/ns/ext/midi#Reset
#define LV2_MIDI__SongPosition LV2_MIDI_PREFIX "SongPosition" ///< http://lv2plug.in/ns/ext/midi#SongPosition
#define LV2_MIDI__SongSelect LV2_MIDI_PREFIX "SongSelect" ///< http://lv2plug.in/ns/ext/midi#SongSelect
#define LV2_MIDI__Start LV2_MIDI_PREFIX "Start" ///< http://lv2plug.in/ns/ext/midi#Start
#define LV2_MIDI__Stop LV2_MIDI_PREFIX "Stop" ///< http://lv2plug.in/ns/ext/midi#Stop
#define LV2_MIDI__SystemCommon LV2_MIDI_PREFIX "SystemCommon" ///< http://lv2plug.in/ns/ext/midi#SystemCommon
#define LV2_MIDI__SystemExclusive LV2_MIDI_PREFIX "SystemExclusive" ///< http://lv2plug.in/ns/ext/midi#SystemExclusive
#define LV2_MIDI__SystemMessage LV2_MIDI_PREFIX "SystemMessage" ///< http://lv2plug.in/ns/ext/midi#SystemMessage
#define LV2_MIDI__SystemRealtime LV2_MIDI_PREFIX "SystemRealtime" ///< http://lv2plug.in/ns/ext/midi#SystemRealtime
#define LV2_MIDI__Tick LV2_MIDI_PREFIX "Tick" ///< http://lv2plug.in/ns/ext/midi#Tick
#define LV2_MIDI__TuneRequest LV2_MIDI_PREFIX "TuneRequest" ///< http://lv2plug.in/ns/ext/midi#TuneRequest
#define LV2_MIDI__VoiceMessage LV2_MIDI_PREFIX "VoiceMessage" ///< http://lv2plug.in/ns/ext/midi#VoiceMessage
#define LV2_MIDI__benderValue LV2_MIDI_PREFIX "benderValue" ///< http://lv2plug.in/ns/ext/midi#benderValue
#define LV2_MIDI__binding LV2_MIDI_PREFIX "binding" ///< http://lv2plug.in/ns/ext/midi#binding
#define LV2_MIDI__byteNumber LV2_MIDI_PREFIX "byteNumber" ///< http://lv2plug.in/ns/ext/midi#byteNumber
#define LV2_MIDI__channel LV2_MIDI_PREFIX "channel" ///< http://lv2plug.in/ns/ext/midi#channel
#define LV2_MIDI__chunk LV2_MIDI_PREFIX "chunk" ///< http://lv2plug.in/ns/ext/midi#chunk
#define LV2_MIDI__controllerNumber LV2_MIDI_PREFIX "controllerNumber" ///< http://lv2plug.in/ns/ext/midi#controllerNumber
#define LV2_MIDI__controllerValue LV2_MIDI_PREFIX "controllerValue" ///< http://lv2plug.in/ns/ext/midi#controllerValue
#define LV2_MIDI__noteNumber LV2_MIDI_PREFIX "noteNumber" ///< http://lv2plug.in/ns/ext/midi#noteNumber
#define LV2_MIDI__pressure LV2_MIDI_PREFIX "pressure" ///< http://lv2plug.in/ns/ext/midi#pressure
#define LV2_MIDI__programNumber LV2_MIDI_PREFIX "programNumber" ///< http://lv2plug.in/ns/ext/midi#programNumber
#define LV2_MIDI__property LV2_MIDI_PREFIX "property" ///< http://lv2plug.in/ns/ext/midi#property
#define LV2_MIDI__songNumber LV2_MIDI_PREFIX "songNumber" ///< http://lv2plug.in/ns/ext/midi#songNumber
#define LV2_MIDI__songPosition LV2_MIDI_PREFIX "songPosition" ///< http://lv2plug.in/ns/ext/midi#songPosition
#define LV2_MIDI__status LV2_MIDI_PREFIX "status" ///< http://lv2plug.in/ns/ext/midi#status
#define LV2_MIDI__statusMask LV2_MIDI_PREFIX "statusMask" ///< http://lv2plug.in/ns/ext/midi#statusMask
#define LV2_MIDI__velocity LV2_MIDI_PREFIX "velocity" ///< http://lv2plug.in/ns/ext/midi#velocity

/**
MIDI Message Type.
@@ -184,7 +188,7 @@ typedef enum {
} LV2_Midi_Controller;

/**
Return true iff @p msg is a MIDI voice message (which has a channel).
Return true iff `msg` is a MIDI voice message (which has a channel).
*/
static inline bool
lv2_midi_is_voice_message(const uint8_t* msg) {
@@ -192,7 +196,7 @@ lv2_midi_is_voice_message(const uint8_t* msg) {
}

/**
Return true iff @p msg is a MIDI system message (which has no channel).
Return true iff `msg` is a MIDI system message (which has no channel).
*/
static inline bool
lv2_midi_is_system_message(const uint8_t* msg) {
@@ -224,3 +228,7 @@ lv2_midi_message_type(const uint8_t* msg) {
#endif

#endif /* LV2_MIDI_H */

/**
@}
*/

+ 21
- 13
distrho/src/lv2/morph.h View File

@@ -1,5 +1,5 @@
/*
Copyright 2012 David Robillard <http://drobilla.net>
Copyright 2012-2016 David Robillard <http://drobilla.net>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -14,21 +14,29 @@
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/

#ifndef LV2_MORPH_H
#define LV2_MORPH_H
/**
@defgroup morph Morph

#include <stdint.h>
Ports that can dynamically change type, see <http://lv2plug.in/ns/ext/morph>
for details.

@{
*/

#include "lv2.h"
#include "urid.h"
#ifndef LV2_MORPH_H
#define LV2_MORPH_H

#define LV2_MORPH_URI "http://lv2plug.in/ns/ext/morph"
#define LV2_MORPH_PREFIX LV2_MORPH_URI "#"
#define LV2_MORPH_URI "http://lv2plug.in/ns/ext/morph" ///< http://lv2plug.in/ns/ext/morph
#define LV2_MORPH_PREFIX LV2_MORPH_URI "#" ///< http://lv2plug.in/ns/ext/morph#

#define LV2_MORPH__AutoMorphPort LV2_MORPH_PREFIX "AutoMorphPort"
#define LV2_MORPH__MorphPort LV2_MORPH_PREFIX "MorphPort"
#define LV2_MORPH__interface LV2_MORPH_PREFIX "interface"
#define LV2_MORPH__supportsType LV2_MORPH_PREFIX "supportsType"
#define LV2_MORPH__currentType LV2_MORPH_PREFIX "currentType"
#define LV2_MORPH__AutoMorphPort LV2_MORPH_PREFIX "AutoMorphPort" ///< http://lv2plug.in/ns/ext/morph#AutoMorphPort
#define LV2_MORPH__MorphPort LV2_MORPH_PREFIX "MorphPort" ///< http://lv2plug.in/ns/ext/morph#MorphPort
#define LV2_MORPH__interface LV2_MORPH_PREFIX "interface" ///< http://lv2plug.in/ns/ext/morph#interface
#define LV2_MORPH__supportsType LV2_MORPH_PREFIX "supportsType" ///< http://lv2plug.in/ns/ext/morph#supportsType
#define LV2_MORPH__currentType LV2_MORPH_PREFIX "currentType" ///< http://lv2plug.in/ns/ext/morph#currentType

#endif /* LV2_MORPH_H */

/**
@}
*/

+ 21
- 8
distrho/src/lv2/options.h View File

@@ -1,5 +1,5 @@
/*
Copyright 2012 David Robillard <http://drobilla.net>
Copyright 2012-2016 David Robillard <http://drobilla.net>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -14,6 +14,15 @@
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/

/**
@defgroup options Options

Instantiation time options, see <http://lv2plug.in/ns/ext/options> for
details.

@{
*/

#ifndef LV2_OPTIONS_H
#define LV2_OPTIONS_H

@@ -22,14 +31,14 @@
#include "urid.h"
#include "lv2.h"

#define LV2_OPTIONS_URI "http://lv2plug.in/ns/ext/options"
#define LV2_OPTIONS_PREFIX LV2_OPTIONS_URI "#"
#define LV2_OPTIONS_URI "http://lv2plug.in/ns/ext/options" ///< http://lv2plug.in/ns/ext/options
#define LV2_OPTIONS_PREFIX LV2_OPTIONS_URI "#" ///< http://lv2plug.in/ns/ext/options#

#define LV2_OPTIONS__Option LV2_OPTIONS_PREFIX "Option"
#define LV2_OPTIONS__interface LV2_OPTIONS_PREFIX "interface"
#define LV2_OPTIONS__options LV2_OPTIONS_PREFIX "options"
#define LV2_OPTIONS__requiredOption LV2_OPTIONS_PREFIX "requiredOption"
#define LV2_OPTIONS__supportedOption LV2_OPTIONS_PREFIX "supportedOption"
#define LV2_OPTIONS__Option LV2_OPTIONS_PREFIX "Option" ///< http://lv2plug.in/ns/ext/options#Option
#define LV2_OPTIONS__interface LV2_OPTIONS_PREFIX "interface" ///< http://lv2plug.in/ns/ext/options#interface
#define LV2_OPTIONS__options LV2_OPTIONS_PREFIX "options" ///< http://lv2plug.in/ns/ext/options#options
#define LV2_OPTIONS__requiredOption LV2_OPTIONS_PREFIX "requiredOption" ///< http://lv2plug.in/ns/ext/options#requiredOption
#define LV2_OPTIONS__supportedOption LV2_OPTIONS_PREFIX "supportedOption" ///< http://lv2plug.in/ns/ext/options#supportedOption

#ifdef __cplusplus
extern "C" {
@@ -130,3 +139,7 @@ typedef struct _LV2_Options_Interface {
#endif

#endif /* LV2_OPTIONS_H */

/**
@}
*/

+ 42
- 29
distrho/src/lv2/parameters.h View File

@@ -1,5 +1,5 @@
/*
Copyright 2012 David Robillard <http://drobilla.net>
Copyright 2012-2016 David Robillard <http://drobilla.net>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -14,36 +14,49 @@
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/

/**
@defgroup parameters Parameters

Common parameters for audio processing, see
<http://lv2plug.in/ns/ext/parameters>.

@{
*/

#ifndef LV2_PARAMETERS_H
#define LV2_PARAMETERS_H

#define LV2_PARAMETERS_URI "http://lv2plug.in/ns/ext/parameters"
#define LV2_PARAMETERS_PREFIX LV2_PARAMETERS_URI "#"

#define LV2_PARAMETERS__CompressorControls LV2_PARAMETERS_PREFIX "CompressorControls"
#define LV2_PARAMETERS__ControlGroup LV2_PARAMETERS_PREFIX "ControlGroup"
#define LV2_PARAMETERS__EnvelopeControls LV2_PARAMETERS_PREFIX "EnvelopeControls"
#define LV2_PARAMETERS__FilterControls LV2_PARAMETERS_PREFIX "FilterControls"
#define LV2_PARAMETERS__OscillatorControls LV2_PARAMETERS_PREFIX "OscillatorControls"
#define LV2_PARAMETERS__amplitude LV2_PARAMETERS_PREFIX "amplitude"
#define LV2_PARAMETERS__attack LV2_PARAMETERS_PREFIX "attack"
#define LV2_PARAMETERS__bypass LV2_PARAMETERS_PREFIX "bypass"
#define LV2_PARAMETERS__cutoffFrequency LV2_PARAMETERS_PREFIX "cutoffFrequency"
#define LV2_PARAMETERS__decay LV2_PARAMETERS_PREFIX "decay"
#define LV2_PARAMETERS__delay LV2_PARAMETERS_PREFIX "delay"
#define LV2_PARAMETERS__dryLevel LV2_PARAMETERS_PREFIX "dryLevel"
#define LV2_PARAMETERS__frequency LV2_PARAMETERS_PREFIX "frequency"
#define LV2_PARAMETERS__gain LV2_PARAMETERS_PREFIX "gain"
#define LV2_PARAMETERS__hold LV2_PARAMETERS_PREFIX "hold"
#define LV2_PARAMETERS__pulseWidth LV2_PARAMETERS_PREFIX "pulseWidth"
#define LV2_PARAMETERS__ratio LV2_PARAMETERS_PREFIX "ratio"
#define LV2_PARAMETERS__release LV2_PARAMETERS_PREFIX "release"
#define LV2_PARAMETERS__resonance LV2_PARAMETERS_PREFIX "resonance"
#define LV2_PARAMETERS__sampleRate LV2_PARAMETERS_PREFIX "sampleRate"
#define LV2_PARAMETERS__sustain LV2_PARAMETERS_PREFIX "sustain"
#define LV2_PARAMETERS__threshold LV2_PARAMETERS_PREFIX "threshold"
#define LV2_PARAMETERS__waveform LV2_PARAMETERS_PREFIX "waveform"
#define LV2_PARAMETERS__wetDryRatio LV2_PARAMETERS_PREFIX "wetDryRatio"
#define LV2_PARAMETERS__wetLevel LV2_PARAMETERS_PREFIX "wetLevel"
#define LV2_PARAMETERS_URI "http://lv2plug.in/ns/ext/parameters" ///< http://lv2plug.in/ns/ext/parameters
#define LV2_PARAMETERS_PREFIX LV2_PARAMETERS_URI "#" ///< http://lv2plug.in/ns/ext/parameters#
#define LV2_PARAMETERS__CompressorControls LV2_PARAMETERS_PREFIX "CompressorControls" ///< http://lv2plug.in/ns/ext/parameters#CompressorControls
#define LV2_PARAMETERS__ControlGroup LV2_PARAMETERS_PREFIX "ControlGroup" ///< http://lv2plug.in/ns/ext/parameters#ControlGroup
#define LV2_PARAMETERS__EnvelopeControls LV2_PARAMETERS_PREFIX "EnvelopeControls" ///< http://lv2plug.in/ns/ext/parameters#EnvelopeControls
#define LV2_PARAMETERS__FilterControls LV2_PARAMETERS_PREFIX "FilterControls" ///< http://lv2plug.in/ns/ext/parameters#FilterControls
#define LV2_PARAMETERS__OscillatorControls LV2_PARAMETERS_PREFIX "OscillatorControls" ///< http://lv2plug.in/ns/ext/parameters#OscillatorControls
#define LV2_PARAMETERS__amplitude LV2_PARAMETERS_PREFIX "amplitude" ///< http://lv2plug.in/ns/ext/parameters#amplitude
#define LV2_PARAMETERS__attack LV2_PARAMETERS_PREFIX "attack" ///< http://lv2plug.in/ns/ext/parameters#attack
#define LV2_PARAMETERS__bypass LV2_PARAMETERS_PREFIX "bypass" ///< http://lv2plug.in/ns/ext/parameters#bypass
#define LV2_PARAMETERS__cutoffFrequency LV2_PARAMETERS_PREFIX "cutoffFrequency" ///< http://lv2plug.in/ns/ext/parameters#cutoffFrequency
#define LV2_PARAMETERS__decay LV2_PARAMETERS_PREFIX "decay" ///< http://lv2plug.in/ns/ext/parameters#decay
#define LV2_PARAMETERS__delay LV2_PARAMETERS_PREFIX "delay" ///< http://lv2plug.in/ns/ext/parameters#delay
#define LV2_PARAMETERS__dryLevel LV2_PARAMETERS_PREFIX "dryLevel" ///< http://lv2plug.in/ns/ext/parameters#dryLevel
#define LV2_PARAMETERS__frequency LV2_PARAMETERS_PREFIX "frequency" ///< http://lv2plug.in/ns/ext/parameters#frequency
#define LV2_PARAMETERS__gain LV2_PARAMETERS_PREFIX "gain" ///< http://lv2plug.in/ns/ext/parameters#gain
#define LV2_PARAMETERS__hold LV2_PARAMETERS_PREFIX "hold" ///< http://lv2plug.in/ns/ext/parameters#hold
#define LV2_PARAMETERS__pulseWidth LV2_PARAMETERS_PREFIX "pulseWidth" ///< http://lv2plug.in/ns/ext/parameters#pulseWidth
#define LV2_PARAMETERS__ratio LV2_PARAMETERS_PREFIX "ratio" ///< http://lv2plug.in/ns/ext/parameters#ratio
#define LV2_PARAMETERS__release LV2_PARAMETERS_PREFIX "release" ///< http://lv2plug.in/ns/ext/parameters#release
#define LV2_PARAMETERS__resonance LV2_PARAMETERS_PREFIX "resonance" ///< http://lv2plug.in/ns/ext/parameters#resonance
#define LV2_PARAMETERS__sampleRate LV2_PARAMETERS_PREFIX "sampleRate" ///< http://lv2plug.in/ns/ext/parameters#sampleRate
#define LV2_PARAMETERS__sustain LV2_PARAMETERS_PREFIX "sustain" ///< http://lv2plug.in/ns/ext/parameters#sustain
#define LV2_PARAMETERS__threshold LV2_PARAMETERS_PREFIX "threshold" ///< http://lv2plug.in/ns/ext/parameters#threshold
#define LV2_PARAMETERS__waveform LV2_PARAMETERS_PREFIX "waveform" ///< http://lv2plug.in/ns/ext/parameters#waveform
#define LV2_PARAMETERS__wetDryRatio LV2_PARAMETERS_PREFIX "wetDryRatio" ///< http://lv2plug.in/ns/ext/parameters#wetDryRatio
#define LV2_PARAMETERS__wetLevel LV2_PARAMETERS_PREFIX "wetLevel" ///< http://lv2plug.in/ns/ext/parameters#wetLevel

#endif /* LV2_PARAMETERS_H */

/**
@}
*/

+ 42
- 32
distrho/src/lv2/patch.h View File

@@ -1,5 +1,5 @@
/*
Copyright 2012 David Robillard <http://drobilla.net>
Copyright 2012-2016 David Robillard <http://drobilla.net>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -15,42 +15,52 @@
*/

/**
@file patch.h C header for the LV2 Patch extension
<http://lv2plug.in/ns/ext/patch>.
@defgroup patch Patch

The patch extension is purely data, this header merely defines URIs
for convenience.
Messages for accessing and manipulating properties, see
<http://lv2plug.in/ns/ext/patch> for details.

Note the patch extension is purely data, this header merely defines URIs for
convenience.

@{
*/

#ifndef LV2_PATCH_H
#define LV2_PATCH_H

#define LV2_PATCH_URI "http://lv2plug.in/ns/ext/patch"
#define LV2_PATCH_PREFIX LV2_PATCH_URI "#"

#define LV2_PATCH__Ack LV2_PATCH_PREFIX "Ack"
#define LV2_PATCH__Delete LV2_PATCH_PREFIX "Delete"
#define LV2_PATCH__Error LV2_PATCH_PREFIX "Error"
#define LV2_PATCH__Get LV2_PATCH_PREFIX "Get"
#define LV2_PATCH__Message LV2_PATCH_PREFIX "Message"
#define LV2_PATCH__Move LV2_PATCH_PREFIX "Move"
#define LV2_PATCH__Patch LV2_PATCH_PREFIX "Patch"
#define LV2_PATCH__Post LV2_PATCH_PREFIX "Post"
#define LV2_PATCH__Put LV2_PATCH_PREFIX "Put"
#define LV2_PATCH__Request LV2_PATCH_PREFIX "Request"
#define LV2_PATCH__Response LV2_PATCH_PREFIX "Response"
#define LV2_PATCH__Set LV2_PATCH_PREFIX "Set"
#define LV2_PATCH__add LV2_PATCH_PREFIX "add"
#define LV2_PATCH__body LV2_PATCH_PREFIX "body"
#define LV2_PATCH__destination LV2_PATCH_PREFIX "destination"
#define LV2_PATCH__property LV2_PATCH_PREFIX "property"
#define LV2_PATCH__readable LV2_PATCH_PREFIX "readable"
#define LV2_PATCH__remove LV2_PATCH_PREFIX "remove"
#define LV2_PATCH__request LV2_PATCH_PREFIX "request"
#define LV2_PATCH__subject LV2_PATCH_PREFIX "subject"
#define LV2_PATCH__sequenceNumber LV2_PATCH_PREFIX "sequenceNumber"
#define LV2_PATCH__value LV2_PATCH_PREFIX "value"
#define LV2_PATCH__wildcard LV2_PATCH_PREFIX "wildcard"
#define LV2_PATCH__writable LV2_PATCH_PREFIX "writable"
#define LV2_PATCH_URI "http://lv2plug.in/ns/ext/patch" ///< http://lv2plug.in/ns/ext/patch
#define LV2_PATCH_PREFIX LV2_PATCH_URI "#" ///< http://lv2plug.in/ns/ext/patch#

#define LV2_PATCH__Ack LV2_PATCH_PREFIX "Ack" ///< http://lv2plug.in/ns/ext/patch#Ack
#define LV2_PATCH__Delete LV2_PATCH_PREFIX "Delete" ///< http://lv2plug.in/ns/ext/patch#Delete
#define LV2_PATCH__Copy LV2_PATCH_PREFIX "Copy" ///< http://lv2plug.in/ns/ext/patch#Copy
#define LV2_PATCH__Error LV2_PATCH_PREFIX "Error" ///< http://lv2plug.in/ns/ext/patch#Error
#define LV2_PATCH__Get LV2_PATCH_PREFIX "Get" ///< http://lv2plug.in/ns/ext/patch#Get
#define LV2_PATCH__Message LV2_PATCH_PREFIX "Message" ///< http://lv2plug.in/ns/ext/patch#Message
#define LV2_PATCH__Move LV2_PATCH_PREFIX "Move" ///< http://lv2plug.in/ns/ext/patch#Move
#define LV2_PATCH__Patch LV2_PATCH_PREFIX "Patch" ///< http://lv2plug.in/ns/ext/patch#Patch
#define LV2_PATCH__Post LV2_PATCH_PREFIX "Post" ///< http://lv2plug.in/ns/ext/patch#Post
#define LV2_PATCH__Put LV2_PATCH_PREFIX "Put" ///< http://lv2plug.in/ns/ext/patch#Put
#define LV2_PATCH__Request LV2_PATCH_PREFIX "Request" ///< http://lv2plug.in/ns/ext/patch#Request
#define LV2_PATCH__Response LV2_PATCH_PREFIX "Response" ///< http://lv2plug.in/ns/ext/patch#Response
#define LV2_PATCH__Set LV2_PATCH_PREFIX "Set" ///< http://lv2plug.in/ns/ext/patch#Set
#define LV2_PATCH__accept LV2_PATCH_PREFIX "accept" ///< http://lv2plug.in/ns/ext/patch#accept
#define LV2_PATCH__add LV2_PATCH_PREFIX "add" ///< http://lv2plug.in/ns/ext/patch#add
#define LV2_PATCH__body LV2_PATCH_PREFIX "body" ///< http://lv2plug.in/ns/ext/patch#body
#define LV2_PATCH__destination LV2_PATCH_PREFIX "destination" ///< http://lv2plug.in/ns/ext/patch#destination
#define LV2_PATCH__property LV2_PATCH_PREFIX "property" ///< http://lv2plug.in/ns/ext/patch#property
#define LV2_PATCH__readable LV2_PATCH_PREFIX "readable" ///< http://lv2plug.in/ns/ext/patch#readable
#define LV2_PATCH__remove LV2_PATCH_PREFIX "remove" ///< http://lv2plug.in/ns/ext/patch#remove
#define LV2_PATCH__request LV2_PATCH_PREFIX "request" ///< http://lv2plug.in/ns/ext/patch#request
#define LV2_PATCH__subject LV2_PATCH_PREFIX "subject" ///< http://lv2plug.in/ns/ext/patch#subject
#define LV2_PATCH__sequenceNumber LV2_PATCH_PREFIX "sequenceNumber" ///< http://lv2plug.in/ns/ext/patch#sequenceNumber
#define LV2_PATCH__value LV2_PATCH_PREFIX "value" ///< http://lv2plug.in/ns/ext/patch#value
#define LV2_PATCH__wildcard LV2_PATCH_PREFIX "wildcard" ///< http://lv2plug.in/ns/ext/patch#wildcard
#define LV2_PATCH__writable LV2_PATCH_PREFIX "writable" ///< http://lv2plug.in/ns/ext/patch#writable

#endif /* LV2_PATCH_H */

/**
@}
*/

+ 47
- 40
distrho/src/lv2/port-groups.h View File

@@ -1,5 +1,5 @@
/*
Copyright 2012 David Robillard <http://drobilla.net>
Copyright 2012-2016 David Robillard <http://drobilla.net>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -15,50 +15,57 @@
*/

/**
@file port-groups.h
C definitions for the LV2 Port Groups extension
<http://lv2plug.in/ns/ext/port-groups>.
@defgroup port-groups Port Groups

Multi-channel groups of LV2 ports, see
<http://lv2plug.in/ns/ext/port-groups> for details.

@{
*/

#ifndef LV2_PORT_GROUPS_H
#define LV2_PORT_GROUPS_H

#define LV2_PORT_GROUPS_URI "http://lv2plug.in/ns/ext/port-groups"
#define LV2_PORT_GROUPS_PREFIX LV2_PORT_GROUPS_URI "#"
#define LV2_PORT_GROUPS_URI "http://lv2plug.in/ns/ext/port-groups" ///< http://lv2plug.in/ns/ext/port-groups
#define LV2_PORT_GROUPS_PREFIX LV2_PORT_GROUPS_URI "#" ///< http://lv2plug.in/ns/ext/port-groups#

#define LV2_PORT_GROUPS__DiscreteGroup LV2_PORT_GROUPS_PREFIX "DiscreteGroup"
#define LV2_PORT_GROUPS__Element LV2_PORT_GROUPS_PREFIX "Element"
#define LV2_PORT_GROUPS__FivePointOneGroup LV2_PORT_GROUPS_PREFIX "FivePointOneGroup"
#define LV2_PORT_GROUPS__FivePointZeroGroup LV2_PORT_GROUPS_PREFIX "FivePointZeroGroup"
#define LV2_PORT_GROUPS__FourPointZeroGroup LV2_PORT_GROUPS_PREFIX "FourPointZeroGroup"
#define LV2_PORT_GROUPS__Group LV2_PORT_GROUPS_PREFIX "Group"
#define LV2_PORT_GROUPS__InputGroup LV2_PORT_GROUPS_PREFIX "InputGroup"
#define LV2_PORT_GROUPS__MidSideGroup LV2_PORT_GROUPS_PREFIX "MidSideGroup"
#define LV2_PORT_GROUPS__MonoGroup LV2_PORT_GROUPS_PREFIX "MonoGroup"
#define LV2_PORT_GROUPS__OutputGroup LV2_PORT_GROUPS_PREFIX "OutputGroup"
#define LV2_PORT_GROUPS__SevenPointOneGroup LV2_PORT_GROUPS_PREFIX "SevenPointOneGroup"
#define LV2_PORT_GROUPS__SevenPointOneWideGroup LV2_PORT_GROUPS_PREFIX "SevenPointOneWideGroup"
#define LV2_PORT_GROUPS__SixPointOneGroup LV2_PORT_GROUPS_PREFIX "SixPointOneGroup"
#define LV2_PORT_GROUPS__StereoGroup LV2_PORT_GROUPS_PREFIX "StereoGroup"
#define LV2_PORT_GROUPS__ThreePointZeroGroup LV2_PORT_GROUPS_PREFIX "ThreePointZeroGroup"
#define LV2_PORT_GROUPS__center LV2_PORT_GROUPS_PREFIX "center"
#define LV2_PORT_GROUPS__centerLeft LV2_PORT_GROUPS_PREFIX "centerLeft"
#define LV2_PORT_GROUPS__centerRight LV2_PORT_GROUPS_PREFIX "centerRight"
#define LV2_PORT_GROUPS__element LV2_PORT_GROUPS_PREFIX "element"
#define LV2_PORT_GROUPS__group LV2_PORT_GROUPS_PREFIX "group"
#define LV2_PORT_GROUPS__left LV2_PORT_GROUPS_PREFIX "left"
#define LV2_PORT_GROUPS__lowFrequencyEffects LV2_PORT_GROUPS_PREFIX "lowFrequencyEffects"
#define LV2_PORT_GROUPS__mainInput LV2_PORT_GROUPS_PREFIX "mainInput"
#define LV2_PORT_GROUPS__mainOutput LV2_PORT_GROUPS_PREFIX "mainOutput"
#define LV2_PORT_GROUPS__rearCenter LV2_PORT_GROUPS_PREFIX "rearCenter"
#define LV2_PORT_GROUPS__rearLeft LV2_PORT_GROUPS_PREFIX "rearLeft"
#define LV2_PORT_GROUPS__rearRight LV2_PORT_GROUPS_PREFIX "rearRight"
#define LV2_PORT_GROUPS__right LV2_PORT_GROUPS_PREFIX "right"
#define LV2_PORT_GROUPS__side LV2_PORT_GROUPS_PREFIX "side"
#define LV2_PORT_GROUPS__sideChainOf LV2_PORT_GROUPS_PREFIX "sideChainOf"
#define LV2_PORT_GROUPS__sideLeft LV2_PORT_GROUPS_PREFIX "sideLeft"
#define LV2_PORT_GROUPS__sideRight LV2_PORT_GROUPS_PREFIX "sideRight"
#define LV2_PORT_GROUPS__source LV2_PORT_GROUPS_PREFIX "source"
#define LV2_PORT_GROUPS__subGroupOf LV2_PORT_GROUPS_PREFIX "subGroupOf"
#define LV2_PORT_GROUPS__DiscreteGroup LV2_PORT_GROUPS_PREFIX "DiscreteGroup" ///< http://lv2plug.in/ns/ext/port-groups#DiscreteGroup
#define LV2_PORT_GROUPS__Element LV2_PORT_GROUPS_PREFIX "Element" ///< http://lv2plug.in/ns/ext/port-groups#Element
#define LV2_PORT_GROUPS__FivePointOneGroup LV2_PORT_GROUPS_PREFIX "FivePointOneGroup" ///< http://lv2plug.in/ns/ext/port-groups#FivePointOneGroup
#define LV2_PORT_GROUPS__FivePointZeroGroup LV2_PORT_GROUPS_PREFIX "FivePointZeroGroup" ///< http://lv2plug.in/ns/ext/port-groups#FivePointZeroGroup
#define LV2_PORT_GROUPS__FourPointZeroGroup LV2_PORT_GROUPS_PREFIX "FourPointZeroGroup" ///< http://lv2plug.in/ns/ext/port-groups#FourPointZeroGroup
#define LV2_PORT_GROUPS__Group LV2_PORT_GROUPS_PREFIX "Group" ///< http://lv2plug.in/ns/ext/port-groups#Group
#define LV2_PORT_GROUPS__InputGroup LV2_PORT_GROUPS_PREFIX "InputGroup" ///< http://lv2plug.in/ns/ext/port-groups#InputGroup
#define LV2_PORT_GROUPS__MidSideGroup LV2_PORT_GROUPS_PREFIX "MidSideGroup" ///< http://lv2plug.in/ns/ext/port-groups#MidSideGroup
#define LV2_PORT_GROUPS__MonoGroup LV2_PORT_GROUPS_PREFIX "MonoGroup" ///< http://lv2plug.in/ns/ext/port-groups#MonoGroup
#define LV2_PORT_GROUPS__OutputGroup LV2_PORT_GROUPS_PREFIX "OutputGroup" ///< http://lv2plug.in/ns/ext/port-groups#OutputGroup
#define LV2_PORT_GROUPS__SevenPointOneGroup LV2_PORT_GROUPS_PREFIX "SevenPointOneGroup" ///< http://lv2plug.in/ns/ext/port-groups#SevenPointOneGroup
#define LV2_PORT_GROUPS__SevenPointOneWideGroup LV2_PORT_GROUPS_PREFIX "SevenPointOneWideGroup" ///< http://lv2plug.in/ns/ext/port-groups#SevenPointOneWideGroup
#define LV2_PORT_GROUPS__SixPointOneGroup LV2_PORT_GROUPS_PREFIX "SixPointOneGroup" ///< http://lv2plug.in/ns/ext/port-groups#SixPointOneGroup
#define LV2_PORT_GROUPS__StereoGroup LV2_PORT_GROUPS_PREFIX "StereoGroup" ///< http://lv2plug.in/ns/ext/port-groups#StereoGroup
#define LV2_PORT_GROUPS__ThreePointZeroGroup LV2_PORT_GROUPS_PREFIX "ThreePointZeroGroup" ///< http://lv2plug.in/ns/ext/port-groups#ThreePointZeroGroup
#define LV2_PORT_GROUPS__center LV2_PORT_GROUPS_PREFIX "center" ///< http://lv2plug.in/ns/ext/port-groups#center
#define LV2_PORT_GROUPS__centerLeft LV2_PORT_GROUPS_PREFIX "centerLeft" ///< http://lv2plug.in/ns/ext/port-groups#centerLeft
#define LV2_PORT_GROUPS__centerRight LV2_PORT_GROUPS_PREFIX "centerRight" ///< http://lv2plug.in/ns/ext/port-groups#centerRight
#define LV2_PORT_GROUPS__element LV2_PORT_GROUPS_PREFIX "element" ///< http://lv2plug.in/ns/ext/port-groups#element
#define LV2_PORT_GROUPS__group LV2_PORT_GROUPS_PREFIX "group" ///< http://lv2plug.in/ns/ext/port-groups#group
#define LV2_PORT_GROUPS__left LV2_PORT_GROUPS_PREFIX "left" ///< http://lv2plug.in/ns/ext/port-groups#left
#define LV2_PORT_GROUPS__lowFrequencyEffects LV2_PORT_GROUPS_PREFIX "lowFrequencyEffects" ///< http://lv2plug.in/ns/ext/port-groups#lowFrequencyEffects
#define LV2_PORT_GROUPS__mainInput LV2_PORT_GROUPS_PREFIX "mainInput" ///< http://lv2plug.in/ns/ext/port-groups#mainInput
#define LV2_PORT_GROUPS__mainOutput LV2_PORT_GROUPS_PREFIX "mainOutput" ///< http://lv2plug.in/ns/ext/port-groups#mainOutput
#define LV2_PORT_GROUPS__rearCenter LV2_PORT_GROUPS_PREFIX "rearCenter" ///< http://lv2plug.in/ns/ext/port-groups#rearCenter
#define LV2_PORT_GROUPS__rearLeft LV2_PORT_GROUPS_PREFIX "rearLeft" ///< http://lv2plug.in/ns/ext/port-groups#rearLeft
#define LV2_PORT_GROUPS__rearRight LV2_PORT_GROUPS_PREFIX "rearRight" ///< http://lv2plug.in/ns/ext/port-groups#rearRight
#define LV2_PORT_GROUPS__right LV2_PORT_GROUPS_PREFIX "right" ///< http://lv2plug.in/ns/ext/port-groups#right
#define LV2_PORT_GROUPS__side LV2_PORT_GROUPS_PREFIX "side" ///< http://lv2plug.in/ns/ext/port-groups#side
#define LV2_PORT_GROUPS__sideChainOf LV2_PORT_GROUPS_PREFIX "sideChainOf" ///< http://lv2plug.in/ns/ext/port-groups#sideChainOf
#define LV2_PORT_GROUPS__sideLeft LV2_PORT_GROUPS_PREFIX "sideLeft" ///< http://lv2plug.in/ns/ext/port-groups#sideLeft
#define LV2_PORT_GROUPS__sideRight LV2_PORT_GROUPS_PREFIX "sideRight" ///< http://lv2plug.in/ns/ext/port-groups#sideRight
#define LV2_PORT_GROUPS__source LV2_PORT_GROUPS_PREFIX "source" ///< http://lv2plug.in/ns/ext/port-groups#source
#define LV2_PORT_GROUPS__subGroupOf LV2_PORT_GROUPS_PREFIX "subGroupOf" ///< http://lv2plug.in/ns/ext/port-groups#subGroupOf

#endif /* LV2_PORT_GROUPS_H */

/**
@}
*/

+ 25
- 19
distrho/src/lv2/port-props.h View File

@@ -1,5 +1,5 @@
/*
Copyright 2012 David Robillard <http://drobilla.net>
Copyright 2012-2016 David Robillard <http://drobilla.net>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -15,28 +15,34 @@
*/

/**
@file port-props.h
C definitions for the LV2 Port Props extension
<http://lv2plug.in/ns/ext/port-props>.
@defgroup port-props Port Properties

Various port properties.

@{
*/

#ifndef LV2_PORT_PROPS_H
#define LV2_PORT_PROPS_H

#define LV2_PORT_PROPS_URI "http://lv2plug.in/ns/ext/port-props"
#define LV2_PORT_PROPS_PREFIX LV2_PORT_PROPS_URI "#"
#define LV2_PORT_PROPS__causesArtifacts LV2_PORT_PROPS_PREFIX "causesArtifacts"
#define LV2_PORT_PROPS__continuousCV LV2_PORT_PROPS_PREFIX "continuousCV"
#define LV2_PORT_PROPS__discreteCV LV2_PORT_PROPS_PREFIX "discreteCV"
#define LV2_PORT_PROPS__displayPriority LV2_PORT_PROPS_PREFIX "displayPriority"
#define LV2_PORT_PROPS__expensive LV2_PORT_PROPS_PREFIX "expensive"
#define LV2_PORT_PROPS__hasStrictBounds LV2_PORT_PROPS_PREFIX "hasStrictBounds"
#define LV2_PORT_PROPS__logarithmic LV2_PORT_PROPS_PREFIX "logarithmic"
#define LV2_PORT_PROPS__notAutomatic LV2_PORT_PROPS_PREFIX "notAutomatic"
#define LV2_PORT_PROPS__notOnGUI LV2_PORT_PROPS_PREFIX "notOnGUI"
#define LV2_PORT_PROPS__rangeSteps LV2_PORT_PROPS_PREFIX "rangeSteps"
#define LV2_PORT_PROPS__supportsStrictBounds LV2_PORT_PROPS_PREFIX "supportsStrictBounds"
#define LV2_PORT_PROPS__trigger LV2_PORT_PROPS_PREFIX "trigger"
#define LV2_PORT_PROPS_URI "http://lv2plug.in/ns/ext/port-props" ///< http://lv2plug.in/ns/ext/port-props
#define LV2_PORT_PROPS_PREFIX LV2_PORT_PROPS_URI "#" ///< http://lv2plug.in/ns/ext/port-props#
#define LV2_PORT_PROPS__causesArtifacts LV2_PORT_PROPS_PREFIX "causesArtifacts" ///< http://lv2plug.in/ns/ext/port-props#causesArtifacts
#define LV2_PORT_PROPS__continuousCV LV2_PORT_PROPS_PREFIX "continuousCV" ///< http://lv2plug.in/ns/ext/port-props#continuousCV
#define LV2_PORT_PROPS__discreteCV LV2_PORT_PROPS_PREFIX "discreteCV" ///< http://lv2plug.in/ns/ext/port-props#discreteCV
#define LV2_PORT_PROPS__displayPriority LV2_PORT_PROPS_PREFIX "displayPriority" ///< http://lv2plug.in/ns/ext/port-props#displayPriority
#define LV2_PORT_PROPS__expensive LV2_PORT_PROPS_PREFIX "expensive" ///< http://lv2plug.in/ns/ext/port-props#expensive
#define LV2_PORT_PROPS__hasStrictBounds LV2_PORT_PROPS_PREFIX "hasStrictBounds" ///< http://lv2plug.in/ns/ext/port-props#hasStrictBounds
#define LV2_PORT_PROPS__logarithmic LV2_PORT_PROPS_PREFIX "logarithmic" ///< http://lv2plug.in/ns/ext/port-props#logarithmic
#define LV2_PORT_PROPS__notAutomatic LV2_PORT_PROPS_PREFIX "notAutomatic" ///< http://lv2plug.in/ns/ext/port-props#notAutomatic
#define LV2_PORT_PROPS__notOnGUI LV2_PORT_PROPS_PREFIX "notOnGUI" ///< http://lv2plug.in/ns/ext/port-props#notOnGUI
#define LV2_PORT_PROPS__rangeSteps LV2_PORT_PROPS_PREFIX "rangeSteps" ///< http://lv2plug.in/ns/ext/port-props#rangeSteps
#define LV2_PORT_PROPS__supportsStrictBounds LV2_PORT_PROPS_PREFIX "supportsStrictBounds" ///< http://lv2plug.in/ns/ext/port-props#supportsStrictBounds
#define LV2_PORT_PROPS__trigger LV2_PORT_PROPS_PREFIX "trigger" ///< http://lv2plug.in/ns/ext/port-props#trigger

#endif /* LV2_PORT_PROPS_H */

/**
@}
*/

+ 16
- 9
distrho/src/lv2/presets.h View File

@@ -1,5 +1,5 @@
/*
Copyright 2012 David Robillard <http://drobilla.net>
Copyright 2012-2016 David Robillard <http://drobilla.net>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -15,20 +15,27 @@
*/

/**
@file presets.h
@defgroup presets Presets

C definitions for the LV2 Presets extension
<http://lv2plug.in/ns/ext/presets>.
Presets for plugins, see <http://lv2plug.in/ns/ext/presets> for details.

@{
*/

#ifndef LV2_PRESETS_H
#define LV2_PRESETS_H

#define LV2_PRESETS_URI "http://lv2plug.in/ns/ext/presets"
#define LV2_PRESETS_PREFIX LV2_PRESETS_URI "#"
#define LV2_PRESETS_URI "http://lv2plug.in/ns/ext/presets" ///< http://lv2plug.in/ns/ext/presets
#define LV2_PRESETS_PREFIX LV2_PRESETS_URI "#" ///< http://lv2plug.in/ns/ext/presets#

#define LV2_PRESETS__Preset LV2_PRESETS_PREFIX "Preset"
#define LV2_PRESETS__preset LV2_PRESETS_PREFIX "preset"
#define LV2_PRESETS__value LV2_PRESETS_PREFIX "value"
#define LV2_PRESETS__Bank LV2_PRESETS_PREFIX "Bank" ///< http://lv2plug.in/ns/ext/presets#Bank
#define LV2_PRESETS__Preset LV2_PRESETS_PREFIX "Preset" ///< http://lv2plug.in/ns/ext/presets#Preset
#define LV2_PRESETS__bank LV2_PRESETS_PREFIX "bank" ///< http://lv2plug.in/ns/ext/presets#bank
#define LV2_PRESETS__preset LV2_PRESETS_PREFIX "preset" ///< http://lv2plug.in/ns/ext/presets#preset
#define LV2_PRESETS__value LV2_PRESETS_PREFIX "value" ///< http://lv2plug.in/ns/ext/presets#value

#endif /* LV2_PRESETS_H */

/**
@}
*/

+ 25
- 11
distrho/src/lv2/resize-port.h View File

@@ -1,5 +1,5 @@
/*
Copyright 2007-2012 David Robillard <http://drobilla.net>
Copyright 2007-2016 David Robillard <http://drobilla.net>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -14,18 +14,26 @@
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/

/**
@defgroup resize-port Resize Port

Dynamically sized LV2 port buffers.

@{
*/

#ifndef LV2_RESIZE_PORT_H
#define LV2_RESIZE_PORT_H

#include <stddef.h>
#include <stdint.h>

#define LV2_RESIZE_PORT_URI "http://lv2plug.in/ns/ext/resize-port"
#define LV2_RESIZE_PORT_PREFIX LV2_RESIZE_PORT_URI "#"
#define LV2_RESIZE_PORT_URI "http://lv2plug.in/ns/ext/resize-port" ///< http://lv2plug.in/ns/ext/resize-port
#define LV2_RESIZE_PORT_PREFIX LV2_RESIZE_PORT_URI "#" ///< http://lv2plug.in/ns/ext/resize-port#

#define LV2_RESIZE_PORT__asLargeAs LV2_RESIZE_PORT_PREFIX "asLargeAs"
#define LV2_RESIZE_PORT__minimumSize LV2_RESIZE_PORT_PREFIX "minimumSize"
#define LV2_RESIZE_PORT__resize LV2_RESIZE_PORT_PREFIX "resize"
#define LV2_RESIZE_PORT__asLargeAs LV2_RESIZE_PORT_PREFIX "asLargeAs" ///< http://lv2plug.in/ns/ext/port#asLargeAs
#define LV2_RESIZE_PORT__minimumSize LV2_RESIZE_PORT_PREFIX "minimumSize" ///< http://lv2plug.in/ns/ext/port#minimumSize
#define LV2_RESIZE_PORT__resize LV2_RESIZE_PORT_PREFIX "resize" ///< http://lv2plug.in/ns/ext/port#resize

#ifdef __cplusplus
extern "C" {
@@ -40,22 +48,25 @@ typedef enum {
LV2_RESIZE_PORT_ERR_NO_SPACE = 2 /**< Insufficient space. */
} LV2_Resize_Port_Status;

/** Opaque data for resize method. */
typedef void* LV2_Resize_Port_Feature_Data;

/** Host feature to allow plugins to resize their port buffers. */
typedef struct {
/** Opaque data for resize method. */
LV2_Resize_Port_Feature_Data data;

/**
Resize a port buffer to at least @a size bytes.
Resize a port buffer to at least `size` bytes.
This function MAY return an error, in which case the port buffer was not
resized and the port is still connected to the same location. Plugins
MUST gracefully handle this situation.
This function is in the audio threading class.
The host MUST preserve the contents of the port buffer when resizing.
Plugins MAY resize a port many times in a single run callback. Hosts
SHOULD make this as inexpensive as possible.
*/
@@ -70,3 +81,6 @@ typedef struct {

#endif /* LV2_RESIZE_PORT_H */

/**
@}
*/

+ 92
- 56
distrho/src/lv2/state.h View File

@@ -1,5 +1,5 @@
/*
Copyright 2010-2012 David Robillard <http://drobilla.net>
Copyright 2010-2016 David Robillard <http://drobilla.net>
Copyright 2010 Leonard Ritter <paniq@paniq.org>

Permission to use, copy, modify, and/or distribute this software for any
@@ -16,37 +16,45 @@
*/

/**
@file state.h
C API for the LV2 State extension <http://lv2plug.in/ns/ext/state>.
@defgroup state State
@ingroup lv2

An interface for LV2 plugins to save and restore state, see
<http://lv2plug.in/ns/ext/state> for details.

@{
*/

#ifndef LV2_STATE_H
#define LV2_STATE_H

#include "lv2.h"

#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>

#include "lv2.h"

#define LV2_STATE_URI "http://lv2plug.in/ns/ext/state"
#define LV2_STATE_PREFIX LV2_STATE_URI "#"
#define LV2_STATE_URI "http://lv2plug.in/ns/ext/state" ///< http://lv2plug.in/ns/ext/state
#define LV2_STATE_PREFIX LV2_STATE_URI "#" ///< http://lv2plug.in/ns/ext/state#

#define LV2_STATE__State LV2_STATE_PREFIX "State"
#define LV2_STATE__interface LV2_STATE_PREFIX "interface"
#define LV2_STATE__loadDefaultState LV2_STATE_PREFIX "loadDefaultState"
#define LV2_STATE__makePath LV2_STATE_PREFIX "makePath"
#define LV2_STATE__mapPath LV2_STATE_PREFIX "mapPath"
#define LV2_STATE__state LV2_STATE_PREFIX "state"
#define LV2_STATE__State LV2_STATE_PREFIX "State" ///< http://lv2plug.in/ns/ext/state#State
#define LV2_STATE__interface LV2_STATE_PREFIX "interface" ///< http://lv2plug.in/ns/ext/state#interface
#define LV2_STATE__loadDefaultState LV2_STATE_PREFIX "loadDefaultState" ///< http://lv2plug.in/ns/ext/state#loadDefaultState
#define LV2_STATE__freePath LV2_STATE_PREFIX "freePath" ///< http://lv2plug.in/ns/ext/state#freePath
#define LV2_STATE__makePath LV2_STATE_PREFIX "makePath" ///< http://lv2plug.in/ns/ext/state#makePath
#define LV2_STATE__mapPath LV2_STATE_PREFIX "mapPath" ///< http://lv2plug.in/ns/ext/state#mapPath
#define LV2_STATE__state LV2_STATE_PREFIX "state" ///< http://lv2plug.in/ns/ext/state#state
#define LV2_STATE__threadSafeRestore LV2_STATE_PREFIX "threadSafeRestore" ///< http://lv2plug.in/ns/ext/state#threadSafeRestore
#define LV2_STATE__StateChanged LV2_STATE_PREFIX "StateChanged" ///< http://lv2plug.in/ns/ext/state#StateChanged

#ifdef __cplusplus
extern "C" {
#else
# include <stdbool.h>
#endif

typedef void* LV2_State_Handle;
typedef void* LV2_State_Map_Path_Handle;
typedef void* LV2_State_Make_Path_Handle;
typedef void* LV2_State_Handle; ///< Opaque handle for state save/restore
typedef void* LV2_State_Free_Path_Handle; ///< Opaque handle for state:freePath feature
typedef void* LV2_State_Map_Path_Handle; ///< Opaque handle for state:mapPath feature
typedef void* LV2_State_Make_Path_Handle; ///< Opaque handle for state:makePath feature

/**
Flags describing value characteristics.
@@ -61,8 +69,8 @@ typedef enum {
Values with this flag contain no pointers or references to other areas
of memory. It is safe to copy POD values with a simple memcpy and store
them for the duration of the process. A POD value is not necessarily
safe to trasmit between processes or machines (e.g. filenames are POD),
see LV2_STATE_IS_PORTABLE for details.
safe to trasmit between processes or machines (for example, filenames
are POD), see LV2_STATE_IS_PORTABLE for details.

Implementations MUST NOT attempt to copy or serialise a non-POD value if
they do not understand its type (and thus know how to correctly do so).
@@ -84,9 +92,9 @@ typedef enum {
Native data.

This flag is used by the host to indicate that the saved data is only
going to be used locally in the currently running process (e.g. for
instance duplication or snapshots), so the plugin should use the most
efficient representation possible and not worry about serialisation
going to be used locally in the currently running process (for things
like instance duplication or snapshots), so the plugin should use the
most efficient representation possible and not worry about serialisation
and portability.
*/
LV2_STATE_IS_NATIVE = 1 << 2
@@ -106,11 +114,11 @@ typedef enum {
/**
A host-provided function to store a property.
@param handle Must be the handle passed to LV2_State_Interface.save().
@param key The key to store @p value under (URID).
@param key The key to store `value` under (URID).
@param value Pointer to the value to be stored.
@param size The size of @p value in bytes.
@param type The type of @p value (URID).
@param flags LV2_State_Flags for @p value.
@param size The size of `value` in bytes.
@param type The type of `value` (URID).
@param flags LV2_State_Flags for `value`.
@return 0 on success, otherwise a non-zero error code.

The host passes a callback of this type to LV2_State_Interface.save(). This
@@ -120,7 +128,7 @@ typedef enum {
DO NOT INVENT NONSENSE URI SCHEMES FOR THE KEY. Best is to use keys from
existing vocabularies. If nothing appropriate is available, use http URIs
that point to somewhere you can host documents so documentation can be made
resolvable (e.g. a child of the plugin or project URI). If this is not
resolvable (typically a child of the plugin or project URI). If this is not
possible, invent a URN scheme, e.g. urn:myproj:whatever. The plugin MUST
NOT pass an invalid URI key.

@@ -130,8 +138,8 @@ typedef enum {
(http://lv2plug.in/ns/ext/atom) wherever possible. The plugin SHOULD
attempt to fall-back and avoid the error if possible.

Note that @p size MUST be > 0, and @p value MUST point to a valid region of
memory @p size bytes long (this is required to make restore unambiguous).
Note that `size` MUST be > 0, and `value` MUST point to a valid region of
memory `size` bytes long (this is required to make restore unambiguous).

The plugin MUST NOT attempt to use this function outside of the
LV2_State_Interface.restore() context.
@@ -152,7 +160,7 @@ typedef LV2_State_Status (*LV2_State_Store_Function)(
@param type (Output) If non-NULL, set to the type of the restored value.
@param flags (Output) If non-NULL, set to the flags for the restored value.
@return A pointer to the restored value (object), or NULL if no value
has been stored under @p key.
has been stored under `key`.

A callback of this type is passed by the host to
LV2_State_Interface.restore(). This callback is called repeatedly by the
@@ -187,14 +195,14 @@ typedef const void* (*LV2_State_Retrieve_Function)(
authors should consider this possibility, and always store sensible data
with meaningful types to avoid such problems in the future.
*/
typedef struct _LV2_State_Interface {
typedef struct {
/**
Save plugin state using a host-provided @p store callback.
Save plugin state using a host-provided `store` callback.

@param instance The instance handle of the plugin.
@param store The host-provided store callback.
@param handle An opaque pointer to host data which MUST be passed as the
handle parameter to @p store if it is called.
handle parameter to `store` if it is called.
@param flags Flags describing desired properties of this save. These
flags may be used to determine the most appropriate values to store.
@param features Extensible parameter for passing any additional
@@ -205,16 +213,16 @@ typedef struct _LV2_State_Interface {
possible, and consider the possibility of state being restored much
later on a different machine.

The @p handle pointer and @p store function MUST NOT be used
The `handle` pointer and `store` function MUST NOT be used
beyond the scope of save().

This function has its own special threading class: it may not be called
concurrently with any "Instantiation" function, but it may be called
concurrently with functions in any other class, unless the definition of
that class prohibits it (e.g. it may not be called concurrently with a
"Discovery" function, but it may be called concurrently with an "Audio"
function. The plugin is responsible for any locking or lock-free
techniques necessary to make this possible.
that class prohibits it (for example, it may not be called concurrently
with a "Discovery" function, but it may be called concurrently with an
"Audio" function. The plugin is responsible for any locking or
lock-free techniques necessary to make this possible.

Note that in the simple case where state is only modified by restore(),
there are no synchronization issues since save() is never called
@@ -231,12 +239,12 @@ typedef struct _LV2_State_Interface {
const LV2_Feature *const * features);

/**
Restore plugin state using a host-provided @p retrieve callback.
Restore plugin state using a host-provided `retrieve` callback.

@param instance The instance handle of the plugin.
@param retrieve The host-provided retrieve callback.
@param handle An opaque pointer to host data which MUST be passed as the
handle parameter to @p retrieve if it is called.
handle parameter to `retrieve` if it is called.
@param flags Currently unused.
@param features Extensible parameter for passing any additional
features to be used for this restore.
@@ -248,7 +256,7 @@ typedef struct _LV2_State_Interface {
not be retrieved. This allows the host to reset the plugin state with
an empty map.

The @p handle pointer and @p store function MUST NOT be used
The `handle` pointer and `store` function MUST NOT be used
beyond the scope of restore().

This function is in the "Instantiation" threading class as defined by
@@ -263,7 +271,7 @@ typedef struct _LV2_State_Interface {
} LV2_State_Interface;

/**
Feature data for state:mapPath (LV2_STATE__mapPath).
Feature data for state:mapPath (@ref LV2_STATE__mapPath).
*/
typedef struct {
/**
@@ -273,38 +281,38 @@ typedef struct {

/**
Map an absolute path to an abstract path for use in plugin state.
@param handle MUST be the @p handle member of this struct.
@param handle MUST be the `handle` member of this struct.
@param absolute_path The absolute path of a file.
@return An abstract path suitable for use in plugin state.

The plugin MUST use this function to map any paths that will be stored
in plugin state. The returned value is an abstract path which MAY not
be an actual file system path; @ref absolute_path() MUST be used to map
be an actual file system path; absolute_path() MUST be used to map
it to an actual path in order to use the file.

Plugins MUST NOT make any assumptions about abstract paths except that
they can be mapped back to the absolute path of the "same" file (though
not necessarily the same original path) using @ref absolute_path().
not necessarily the same original path) using absolute_path().

This function may only be called within the context of
LV2_State_Interface methods. The caller is responsible for freeing the
returned value with free().
LV2_State_Interface methods. The caller must free the returned value
with LV2_State_Free_Path.free_path().
*/
char* (*abstract_path)(LV2_State_Map_Path_Handle handle,
const char* absolute_path);

/**
Map an abstract path from plugin state to an absolute path.
@param handle MUST be the @p handle member of this struct.
@param abstract_path An abstract path (e.g. a path from plugin state).
@param handle MUST be the `handle` member of this struct.
@param abstract_path An abstract path (typically from plugin state).
@return An absolute file system path.

The plugin MUST use this function in order to actually open or otherwise
use any paths loaded from plugin state.

This function may only be called within the context of
LV2_State_Interface methods. The caller is responsible for freeing the
returned value with free().
LV2_State_Interface methods. The caller must free the returned value
with LV2_State_Free_Path.free_path().
*/
char* (*absolute_path)(LV2_State_Map_Path_Handle handle,
const char* abstract_path);
@@ -321,7 +329,7 @@ typedef struct {

/**
Return a path the plugin may use to create a new file.
@param handle MUST be the @p handle member of this struct.
@param handle MUST be the `handle` member of this struct.
@param path The path of the new file within a namespace unique to this
plugin instance.
@return The absolute path to use for the new file.
@@ -332,22 +340,50 @@ typedef struct {
LV2_Descriptor.instantiate()).

The host MUST do whatever is necessary for the plugin to be able to
create a file at the returned path (e.g. using fopen), including
creating any leading directories.
create a file at the returned path (for example, using fopen()),
including creating any leading directories.

If this function is passed to LV2_Descriptor.instantiate(), it may be
called from any non-realtime context. If it is passed to
LV2_State_Interface.save(), it may only be called within the dynamic
scope of that function call.

The caller is responsible for freeing the returned value with free().
The caller must free the returned value with
LV2_State_Free_Path.free_path().
*/
char* (*path)(LV2_State_Make_Path_Handle handle,
const char* path);
} LV2_State_Make_Path;

/**
Feature data for state:freePath (@ref LV2_STATE__freePath).
*/
typedef struct {
/**
Opaque host data.
*/
LV2_State_Free_Path_Handle handle;

/**
Free a path returned by a state feature.

@param handle MUST be the `handle` member of this struct.
@param path The path previously returned by a state feature.

This function can be used by plugins to free paths allocated by the host
and returned by state features (LV2_State_Map_Path.abstract_path(),
LV2_State_Map_Path.absolute_path(), and LV2_State_Make_Path.path()).
*/
void (*free_path)(LV2_State_Free_Path_Handle handle,
char* path);
} LV2_State_Free_Path;

#ifdef __cplusplus
} /* extern "C" */
#endif

#endif /* LV2_STATE_H */

/**
@}
*/

+ 30
- 26
distrho/src/lv2/time.h View File

@@ -1,5 +1,5 @@
/*
Copyright 2011 David Robillard <http://drobilla.net>
Copyright 2011-2016 David Robillard <http://drobilla.net>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -15,35 +15,39 @@
*/

/**
@file time.h C header for the LV2 Time extension
<http://lv2plug.in/ns/ext/time>.
@defgroup time Time

Properties for describing time, see <http://lv2plug.in/ns/ext/time> for
details.

Note the time extension is purely data, this header merely defines URIs for
convenience.

@{
*/

#ifndef LV2_TIME_H
#define LV2_TIME_H

#ifdef __cplusplus
extern "C" {
#endif

#define LV2_TIME_URI "http://lv2plug.in/ns/ext/time"

#define LV2_TIME__Time LV2_TIME_URI "#Time"
#define LV2_TIME__Position LV2_TIME_URI "#Position"
#define LV2_TIME__Rate LV2_TIME_URI "#Rate"
#define LV2_TIME__position LV2_TIME_URI "#position"
#define LV2_TIME__barBeat LV2_TIME_URI "#barBeat"
#define LV2_TIME__bar LV2_TIME_URI "#bar"
#define LV2_TIME__beat LV2_TIME_URI "#beat"
#define LV2_TIME__beatUnit LV2_TIME_URI "#beatUnit"
#define LV2_TIME__beatsPerBar LV2_TIME_URI "#beatsPerBar"
#define LV2_TIME__beatsPerMinute LV2_TIME_URI "#beatsPerMinute"
#define LV2_TIME__frame LV2_TIME_URI "#frame"
#define LV2_TIME__framesPerSecond LV2_TIME_URI "#framesPerSecond"
#define LV2_TIME__speed LV2_TIME_URI "#speed"

#ifdef __cplusplus
} /* extern "C" */
#endif
#define LV2_TIME_URI "http://lv2plug.in/ns/ext/time" ///< http://lv2plug.in/ns/ext/time
#define LV2_TIME_PREFIX LV2_TIME_URI "#" ///< http://lv2plug.in/ns/ext/time#

#define LV2_TIME__Time LV2_TIME_PREFIX "Time" ///< http://lv2plug.in/ns/ext/time#Time
#define LV2_TIME__Position LV2_TIME_PREFIX "Position" ///< http://lv2plug.in/ns/ext/time#Position
#define LV2_TIME__Rate LV2_TIME_PREFIX "Rate" ///< http://lv2plug.in/ns/ext/time#Rate
#define LV2_TIME__position LV2_TIME_PREFIX "position" ///< http://lv2plug.in/ns/ext/time#position
#define LV2_TIME__barBeat LV2_TIME_PREFIX "barBeat" ///< http://lv2plug.in/ns/ext/time#barBeat
#define LV2_TIME__bar LV2_TIME_PREFIX "bar" ///< http://lv2plug.in/ns/ext/time#bar
#define LV2_TIME__beat LV2_TIME_PREFIX "beat" ///< http://lv2plug.in/ns/ext/time#beat
#define LV2_TIME__beatUnit LV2_TIME_PREFIX "beatUnit" ///< http://lv2plug.in/ns/ext/time#beatUnit
#define LV2_TIME__beatsPerBar LV2_TIME_PREFIX "beatsPerBar" ///< http://lv2plug.in/ns/ext/time#beatsPerBar
#define LV2_TIME__beatsPerMinute LV2_TIME_PREFIX "beatsPerMinute" ///< http://lv2plug.in/ns/ext/time#beatsPerMinute
#define LV2_TIME__frame LV2_TIME_PREFIX "frame" ///< http://lv2plug.in/ns/ext/time#frame
#define LV2_TIME__framesPerSecond LV2_TIME_PREFIX "framesPerSecond" ///< http://lv2plug.in/ns/ext/time#framesPerSecond
#define LV2_TIME__speed LV2_TIME_PREFIX "speed" ///< http://lv2plug.in/ns/ext/time#speed

/**
@}
*/

#endif /* LV2_TIME_H */

+ 46
- 39
distrho/src/lv2/units.h View File

@@ -1,5 +1,5 @@
/*
Copyright 2012 David Robillard <http://drobilla.net>
Copyright 2012-2016 David Robillard <http://drobilla.net>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -15,48 +15,55 @@
*/

/**
@file units.h
C definitions for the LV2 Units extension
<http://lv2plug.in/ns/extensions/units>.
@defgroup units Units

Units for LV2 values, see <http://lv2plug.in/ns/extensions/units> for
details.

@{
*/

#ifndef LV2_UNITS_H
#define LV2_UNITS_H

#define LV2_UNITS_URI "http://lv2plug.in/ns/extensions/units"
#define LV2_UNITS_PREFIX LV2_UNITS_URI "#"
#define LV2_UNITS__Conversion LV2_UNITS_PREFIX "Conversion"
#define LV2_UNITS__Unit LV2_UNITS_PREFIX "Unit"
#define LV2_UNITS__bar LV2_UNITS_PREFIX "bar"
#define LV2_UNITS__beat LV2_UNITS_PREFIX "beat"
#define LV2_UNITS__bpm LV2_UNITS_PREFIX "bpm"
#define LV2_UNITS__cent LV2_UNITS_PREFIX "cent"
#define LV2_UNITS__cm LV2_UNITS_PREFIX "cm"
#define LV2_UNITS__coef LV2_UNITS_PREFIX "coef"
#define LV2_UNITS__conversion LV2_UNITS_PREFIX "conversion"
#define LV2_UNITS__db LV2_UNITS_PREFIX "db"
#define LV2_UNITS__degree LV2_UNITS_PREFIX "degree"
#define LV2_UNITS__frame LV2_UNITS_PREFIX "frame"
#define LV2_UNITS__hz LV2_UNITS_PREFIX "hz"
#define LV2_UNITS__inch LV2_UNITS_PREFIX "inch"
#define LV2_UNITS__khz LV2_UNITS_PREFIX "khz"
#define LV2_UNITS__km LV2_UNITS_PREFIX "km"
#define LV2_UNITS__m LV2_UNITS_PREFIX "m"
#define LV2_UNITS__mhz LV2_UNITS_PREFIX "mhz"
#define LV2_UNITS__midiNote LV2_UNITS_PREFIX "midiNote"
#define LV2_UNITS__mile LV2_UNITS_PREFIX "mile"
#define LV2_UNITS__min LV2_UNITS_PREFIX "min"
#define LV2_UNITS__mm LV2_UNITS_PREFIX "mm"
#define LV2_UNITS__ms LV2_UNITS_PREFIX "ms"
#define LV2_UNITS__name LV2_UNITS_PREFIX "name"
#define LV2_UNITS__oct LV2_UNITS_PREFIX "oct"
#define LV2_UNITS__pc LV2_UNITS_PREFIX "pc"
#define LV2_UNITS__prefixConversion LV2_UNITS_PREFIX "prefixConversion"
#define LV2_UNITS__render LV2_UNITS_PREFIX "render"
#define LV2_UNITS__s LV2_UNITS_PREFIX "s"
#define LV2_UNITS__semitone12TET LV2_UNITS_PREFIX "semitone12TET"
#define LV2_UNITS__symbol LV2_UNITS_PREFIX "symbol"
#define LV2_UNITS__unit LV2_UNITS_PREFIX "unit"
#define LV2_UNITS_URI "http://lv2plug.in/ns/extensions/units" ///< http://lv2plug.in/ns/extensions/units
#define LV2_UNITS_PREFIX LV2_UNITS_URI "#" ///< http://lv2plug.in/ns/extensions/units#
#define LV2_UNITS__Conversion LV2_UNITS_PREFIX "Conversion" ///< http://lv2plug.in/ns/ext/units#Conversion
#define LV2_UNITS__Unit LV2_UNITS_PREFIX "Unit" ///< http://lv2plug.in/ns/ext/units#Unit
#define LV2_UNITS__bar LV2_UNITS_PREFIX "bar" ///< http://lv2plug.in/ns/ext/units#bar
#define LV2_UNITS__beat LV2_UNITS_PREFIX "beat" ///< http://lv2plug.in/ns/ext/units#beat
#define LV2_UNITS__bpm LV2_UNITS_PREFIX "bpm" ///< http://lv2plug.in/ns/ext/units#bpm
#define LV2_UNITS__cent LV2_UNITS_PREFIX "cent" ///< http://lv2plug.in/ns/ext/units#cent
#define LV2_UNITS__cm LV2_UNITS_PREFIX "cm" ///< http://lv2plug.in/ns/ext/units#cm
#define LV2_UNITS__coef LV2_UNITS_PREFIX "coef" ///< http://lv2plug.in/ns/ext/units#coef
#define LV2_UNITS__conversion LV2_UNITS_PREFIX "conversion" ///< http://lv2plug.in/ns/ext/units#conversion
#define LV2_UNITS__db LV2_UNITS_PREFIX "db" ///< http://lv2plug.in/ns/ext/units#db
#define LV2_UNITS__degree LV2_UNITS_PREFIX "degree" ///< http://lv2plug.in/ns/ext/units#degree
#define LV2_UNITS__frame LV2_UNITS_PREFIX "frame" ///< http://lv2plug.in/ns/ext/units#frame
#define LV2_UNITS__hz LV2_UNITS_PREFIX "hz" ///< http://lv2plug.in/ns/ext/units#hz
#define LV2_UNITS__inch LV2_UNITS_PREFIX "inch" ///< http://lv2plug.in/ns/ext/units#inch
#define LV2_UNITS__khz LV2_UNITS_PREFIX "khz" ///< http://lv2plug.in/ns/ext/units#khz
#define LV2_UNITS__km LV2_UNITS_PREFIX "km" ///< http://lv2plug.in/ns/ext/units#km
#define LV2_UNITS__m LV2_UNITS_PREFIX "m" ///< http://lv2plug.in/ns/ext/units#m
#define LV2_UNITS__mhz LV2_UNITS_PREFIX "mhz" ///< http://lv2plug.in/ns/ext/units#mhz
#define LV2_UNITS__midiNote LV2_UNITS_PREFIX "midiNote" ///< http://lv2plug.in/ns/ext/units#midiNote
#define LV2_UNITS__mile LV2_UNITS_PREFIX "mile" ///< http://lv2plug.in/ns/ext/units#mile
#define LV2_UNITS__min LV2_UNITS_PREFIX "min" ///< http://lv2plug.in/ns/ext/units#min
#define LV2_UNITS__mm LV2_UNITS_PREFIX "mm" ///< http://lv2plug.in/ns/ext/units#mm
#define LV2_UNITS__ms LV2_UNITS_PREFIX "ms" ///< http://lv2plug.in/ns/ext/units#ms
#define LV2_UNITS__name LV2_UNITS_PREFIX "name" ///< http://lv2plug.in/ns/ext/units#name
#define LV2_UNITS__oct LV2_UNITS_PREFIX "oct" ///< http://lv2plug.in/ns/ext/units#oct
#define LV2_UNITS__pc LV2_UNITS_PREFIX "pc" ///< http://lv2plug.in/ns/ext/units#pc
#define LV2_UNITS__prefixConversion LV2_UNITS_PREFIX "prefixConversion" ///< http://lv2plug.in/ns/ext/units#prefixConversion
#define LV2_UNITS__render LV2_UNITS_PREFIX "render" ///< http://lv2plug.in/ns/ext/units#render
#define LV2_UNITS__s LV2_UNITS_PREFIX "s" ///< http://lv2plug.in/ns/ext/units#s
#define LV2_UNITS__semitone12TET LV2_UNITS_PREFIX "semitone12TET" ///< http://lv2plug.in/ns/ext/units#semitone12TET
#define LV2_UNITS__symbol LV2_UNITS_PREFIX "symbol" ///< http://lv2plug.in/ns/ext/units#symbol
#define LV2_UNITS__unit LV2_UNITS_PREFIX "unit" ///< http://lv2plug.in/ns/ext/units#unit

#endif /* LV2_UNITS_H */

/**
@}
*/

+ 12
- 4
distrho/src/lv2/uri-map.h View File

@@ -1,5 +1,5 @@
/*
Copyright 2008-2011 David Robillard <http://drobilla.net>
Copyright 2008-2016 David Robillard <http://drobilla.net>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -15,8 +15,9 @@
*/

/**
@file
C header for the LV2 URI Map extension <http://lv2plug.in/ns/ext/uri-map>.
@defgroup uri-map URI Map

C API for the LV2 URI Map extension <http://lv2plug.in/ns/ext/uri-map>.

This extension defines a simple mechanism for plugins to map URIs to
integers, usually for performance reasons (e.g. processing events typed by
@@ -25,12 +26,15 @@
values for use in the audio thread without doing any string comparison.
This allows the extensibility of RDF with the performance of integers (or
centrally defined enumerations).

@{
*/

#ifndef LV2_URI_MAP_H
#define LV2_URI_MAP_H

#define LV2_URI_MAP_URI "http://lv2plug.in/ns/ext/uri-map"
#define LV2_URI_MAP_URI "http://lv2plug.in/ns/ext/uri-map" ///< http://lv2plug.in/ns/ext/uri-map
#define LV2_URI_MAP_PREFIX LV2_URI_MAP_URI "#" ///< http://lv2plug.in/ns/ext/uri-map#

#include <stdint.h>

@@ -96,3 +100,7 @@ typedef struct {
#endif

#endif /* LV2_URI_MAP_H */

/**
@}
*/

+ 19
- 12
distrho/src/lv2/urid.h View File

@@ -1,5 +1,5 @@
/*
Copyright 2008-2012 David Robillard <http://drobilla.net>
Copyright 2008-2016 David Robillard <http://drobilla.net>
Copyright 2011 Gabriel M. Beddingfield <gabrbedd@gmail.com>

Permission to use, copy, modify, and/or distribute this software for any
@@ -16,22 +16,25 @@
*/

/**
@file urid.h
C header for the LV2 URID extension <http://lv2plug.in/ns/ext/urid>
@defgroup urid URID

Features for mapping URIs to and from integers, see
<http://lv2plug.in/ns/ext/urid> for details.

@{
*/

#ifndef LV2_URID_H
#define LV2_URID_H

#define LV2_URID_URI "http://lv2plug.in/ns/ext/urid"
#define LV2_URID_PREFIX LV2_URID_URI "#"
#define LV2_URID_URI "http://lv2plug.in/ns/ext/urid" ///< http://lv2plug.in/ns/ext/urid
#define LV2_URID_PREFIX LV2_URID_URI "#" ///< http://lv2plug.in/ns/ext/urid#

#define LV2_URID__map LV2_URID_PREFIX "map"
#define LV2_URID__unmap LV2_URID_PREFIX "unmap"
#define LV2_URID__map LV2_URID_PREFIX "map" ///< http://lv2plug.in/ns/ext/urid#map
#define LV2_URID__unmap LV2_URID_PREFIX "unmap" ///< http://lv2plug.in/ns/ext/urid#unmap

/* Legacy defines */
#define LV2_URID_MAP_URI LV2_URID__map
#define LV2_URID_UNMAP_URI LV2_URID__unmap
#define LV2_URID_MAP_URI LV2_URID__map ///< Legacy
#define LV2_URID_UNMAP_URI LV2_URID__unmap ///< Legacy

#include <stdint.h>

@@ -106,11 +109,11 @@ typedef struct _LV2_URID_Unmap {
/**
Get the URI for a previously mapped numeric ID.

Returns NULL if @p urid is not yet mapped. Otherwise, the corresponding
Returns NULL if `urid` 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 LV2_URID_Map::map(), but it MUST be
an identical URI according to the URI syntax specification (RFC3986). A
non-NULL return for a given @p urid will always be the same for the life
non-NULL return for a given `urid` 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().
@@ -127,3 +130,7 @@ typedef struct _LV2_URID_Unmap {
#endif

#endif /* LV2_URID_H */

/**
@}
*/

+ 37
- 18
distrho/src/lv2/worker.h View File

@@ -1,5 +1,5 @@
/*
Copyright 2012 David Robillard <http://drobilla.net>
Copyright 2012-2016 David Robillard <http://drobilla.net>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -15,8 +15,12 @@
*/

/**
@file worker.h C header for the LV2 Worker extension
<http://lv2plug.in/ns/ext/worker>.
@defgroup worker Worker

Support for non-realtime plugin operations, see
<http://lv2plug.in/ns/ext/worker> for details.

@{
*/

#ifndef LV2_WORKER_H
@@ -26,18 +30,18 @@

#include "lv2.h"

#define LV2_WORKER_URI "http://lv2plug.in/ns/ext/worker"
#define LV2_WORKER_PREFIX LV2_WORKER_URI "#"
#define LV2_WORKER_URI "http://lv2plug.in/ns/ext/worker" ///< http://lv2plug.in/ns/ext/worker
#define LV2_WORKER_PREFIX LV2_WORKER_URI "#" ///< http://lv2plug.in/ns/ext/worker#

#define LV2_WORKER__interface LV2_WORKER_PREFIX "interface"
#define LV2_WORKER__schedule LV2_WORKER_PREFIX "schedule"
#define LV2_WORKER__interface LV2_WORKER_PREFIX "interface" ///< http://lv2plug.in/ns/ext/worker#interface
#define LV2_WORKER__schedule LV2_WORKER_PREFIX "schedule" ///< http://lv2plug.in/ns/ext/worker#schedule

#ifdef __cplusplus
extern "C" {
#endif

/**
A status code for worker functions.
Status code for worker functions.
*/
typedef enum {
LV2_WORKER_SUCCESS = 0, /**< Completed successfully. */
@@ -45,12 +49,13 @@ typedef enum {
LV2_WORKER_ERR_NO_SPACE = 2 /**< Failed due to lack of space. */
} LV2_Worker_Status;

/** Opaque handle for LV2_Worker_Interface::work(). */
typedef void* LV2_Worker_Respond_Handle;

/**
A function to respond to run() from the worker method.

The @p data MUST be safe for the host to copy and later pass to
The `data` MUST be safe for the host to copy and later pass to
work_response(), and the host MUST guarantee that it will be eventually
passed to work_response() if this function returns LV2_WORKER_SUCCESS.
*/
@@ -60,7 +65,7 @@ typedef LV2_Worker_Status (*LV2_Worker_Respond_Function)(
const void* data);

/**
LV2 Plugin Worker Interface.
Plugin Worker Interface.

This is the interface provided by the plugin to implement a worker method.
The plugin's extension_data() method should return an LV2_Worker_Interface
@@ -71,14 +76,17 @@ typedef struct _LV2_Worker_Interface {
The worker method. This is called by the host in a non-realtime context
as requested, possibly with an arbitrary message to handle.

A response can be sent to run() using @p respond. The plugin MUST NOT
make any assumptions about which thread calls this method, other than
the fact that there are no real-time requirements.
A response can be sent to run() using `respond`. The plugin MUST NOT
make any assumptions about which thread calls this method, except that
there are no real-time requirements and only one call may be executed at
a time. That is, the host MAY call this method from any non-real-time
thread, but MUST NOT make concurrent calls to this method from several
threads.

@param instance The LV2 instance this is a method on.
@param respond A function for sending a response to run().
@param handle Must be passed to @p respond if it is called.
@param size The size of @p data.
@param handle Must be passed to `respond` if it is called.
@param size The size of `data`.
@param data Data from run(), or NULL.
*/
LV2_Worker_Status (*work)(LV2_Handle instance,
@@ -92,7 +100,7 @@ typedef struct _LV2_Worker_Interface {
run() context when a response from the worker is ready.

@param instance The LV2 instance this is a method on.
@param size The size of @p body.
@param size The size of `body`.
@param body Message body, or NULL.
*/
LV2_Worker_Status (*work_response)(LV2_Handle instance,
@@ -112,8 +120,15 @@ typedef struct _LV2_Worker_Interface {
LV2_Worker_Status (*end_run)(LV2_Handle instance);
} LV2_Worker_Interface;

/** Opaque handle for LV2_Worker_Schedule. */
typedef void* LV2_Worker_Schedule_Handle;

/**
Schedule Worker Host Feature.

The host passes this feature to provide a schedule_work() function, which
the plugin can use to schedule a worker call from run().
*/
typedef struct _LV2_Worker_Schedule {
/**
Opaque host data.
@@ -138,12 +153,12 @@ typedef struct _LV2_Worker_Schedule {
immediately, and responses from the worker are delivered immediately,
the effect of the work takes place immediately with sample accuracy.

The @p data MUST be safe for the host to copy and later pass to work(),
The `data` MUST be safe for the host to copy and later pass to work(),
and the host MUST guarantee that it will be eventually passed to work()
if this function returns LV2_WORKER_SUCCESS.

@param handle The handle field of this struct.
@param size The size of @p data.
@param size The size of `data`.
@param data Message to pass to work(), or NULL.
*/
LV2_Worker_Status (*schedule_work)(LV2_Worker_Schedule_Handle handle,
@@ -156,3 +171,7 @@ typedef struct _LV2_Worker_Schedule {
#endif

#endif /* LV2_WORKER_H */

/**
@}
*/

Loading…
Cancel
Save