mirror of
https://github.com/cookiengineer/audacity
synced 2025-12-28 15:38:48 +01:00
Update lilv, lv2, serd, sord, sratom, and add suil.
This commit is contained in:
196
lib-src/lv2/lilv/bindings/test/bindings_test_plugin.c
Normal file
196
lib-src/lv2/lilv/bindings/test/bindings_test_plugin.c
Normal file
@@ -0,0 +1,196 @@
|
||||
/*
|
||||
Copyright 2006-2011 David Robillard <d@drobilla.net>
|
||||
Copyright 2006 Steve Harris <steve@plugin.org.uk>
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/** Include standard C headers */
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/**
|
||||
LV2 headers are based on the URI of the specification they come from, so a
|
||||
consistent convention can be used even for unofficial extensions. The URI
|
||||
of the core LV2 specification is <http://lv2plug.in/ns/lv2core>, by
|
||||
replacing `http:/` with `lv2` any header in the specification bundle can be
|
||||
included, in this case `lv2.h`.
|
||||
*/
|
||||
#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
|
||||
|
||||
/**
|
||||
The URI is the identifier for a plugin, and how the host associates this
|
||||
implementation in code with its description in data. In this plugin it is
|
||||
only used once in the code, but defining the plugin URI at the top of the
|
||||
file is a good convention to follow. If this URI does not match that used
|
||||
in the data files, the host will fail to load the plugin.
|
||||
*/
|
||||
#define TEST_URI "http://example.org/lilv-bindings-test-plugin"
|
||||
|
||||
/**
|
||||
In code, ports are referred to by index. An enumeration of port indices
|
||||
should be defined for readability.
|
||||
*/
|
||||
typedef enum {
|
||||
TEST_CONTROL_IN = 0,
|
||||
TEST_CONTROL_OUT = 1,
|
||||
TEST_AUDIO_IN = 2,
|
||||
TEST_AUDIO_OUT = 3
|
||||
} PortIndex;
|
||||
|
||||
/**
|
||||
Every plugin defines a private structure for the plugin instance. All data
|
||||
associated with a plugin instance is stored here, and is available to
|
||||
every instance method. In this simple plugin, only port buffers need to be
|
||||
stored, since there is no additional instance data. */
|
||||
typedef struct {
|
||||
// Port buffers
|
||||
} Test;
|
||||
|
||||
/**
|
||||
The instantiate() function is called by the host to create a new plugin
|
||||
instance. The host passes the plugin descriptor, sample rate, and bundle
|
||||
path for plugins that need to load additional resources (e.g. waveforms).
|
||||
The features parameter contains host-provided features defined in LV2
|
||||
extensions, but this simple plugin does not use any.
|
||||
|
||||
This function is in the ``instantiation'' threading class, so no other
|
||||
methods on this instance will be called concurrently with it.
|
||||
*/
|
||||
static LV2_Handle
|
||||
instantiate(const LV2_Descriptor* descriptor,
|
||||
double rate,
|
||||
const char* bundle_path,
|
||||
const LV2_Feature* const* features)
|
||||
{
|
||||
Test* test = (Test*)malloc(sizeof(Test));
|
||||
|
||||
return (LV2_Handle)test;
|
||||
}
|
||||
|
||||
/**
|
||||
The connect_port() method is called by the host to connect a particular port
|
||||
to a buffer. The plugin must store the data location, but data may not be
|
||||
accessed except in run().
|
||||
|
||||
This method is in the ``audio'' threading class, and is called in the same
|
||||
context as run().
|
||||
*/
|
||||
static void
|
||||
connect_port(LV2_Handle instance,
|
||||
uint32_t port,
|
||||
void* data)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
The activate() method is called by the host to initialise and prepare the
|
||||
plugin instance for running. The plugin must reset all internal state
|
||||
except for buffer locations set by connect_port(). Since this plugin has
|
||||
no other internal state, this method does nothing.
|
||||
|
||||
This method is in the ``instantiation'' threading class, so no other
|
||||
methods on this instance will be called concurrently with it.
|
||||
*/
|
||||
static void
|
||||
activate(LV2_Handle instance)
|
||||
{
|
||||
}
|
||||
|
||||
/** Process a block of audio (audio thread, must be RT safe). */
|
||||
static void
|
||||
run(LV2_Handle instance, uint32_t n_samples)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
The deactivate() method is the counterpart to activate() called by the host
|
||||
after running the plugin. It indicates that the host will not call run()
|
||||
again until another call to activate() and is mainly useful for more
|
||||
advanced plugins with ``live'' characteristics such as those with auxiliary
|
||||
processing threads. As with activate(), this plugin has no use for this
|
||||
information so this method does nothing.
|
||||
|
||||
This method is in the ``instantiation'' threading class, so no other
|
||||
methods on this instance will be called concurrently with it.
|
||||
*/
|
||||
static void
|
||||
deactivate(LV2_Handle instance)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
Destroy a plugin instance (counterpart to instantiate()).
|
||||
|
||||
This method is in the ``instantiation'' threading class, so no other
|
||||
methods on this instance will be called concurrently with it.
|
||||
*/
|
||||
static void
|
||||
cleanup(LV2_Handle instance)
|
||||
{
|
||||
free(instance);
|
||||
}
|
||||
|
||||
/**
|
||||
The extension_data function returns any extension data supported by the
|
||||
plugin. Note that this is not an instance method, but a function on the
|
||||
plugin descriptor. It is usually used by plugins to implement additional
|
||||
interfaces. This plugin does not have any extension data, so this function
|
||||
returns NULL.
|
||||
|
||||
This method is in the ``discovery'' threading class, so no other functions
|
||||
or methods in this plugin library will be called concurrently with it.
|
||||
*/
|
||||
static const void*
|
||||
extension_data(const char* uri)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
Define the LV2_Descriptor for this plugin. It is best to define descriptors
|
||||
statically to avoid leaking memory and non-portable shared library
|
||||
constructors and destructors to clean up properly.
|
||||
*/
|
||||
static const LV2_Descriptor descriptor = {
|
||||
TEST_URI,
|
||||
instantiate,
|
||||
connect_port,
|
||||
activate,
|
||||
run,
|
||||
deactivate,
|
||||
cleanup,
|
||||
extension_data
|
||||
};
|
||||
|
||||
/**
|
||||
The lv2_descriptor() function is the entry point to the plugin library. The
|
||||
host will load the library and call this function repeatedly with increasing
|
||||
indices to find all the plugins defined in the library. The index is not an
|
||||
indentifier, the URI of the returned descriptor is used to determine the
|
||||
identify of the plugin.
|
||||
|
||||
This method is in the ``discovery'' threading class, so no other functions
|
||||
or methods in this plugin library will be called concurrently with it.
|
||||
*/
|
||||
LV2_SYMBOL_EXPORT
|
||||
const LV2_Descriptor*
|
||||
lv2_descriptor(uint32_t index)
|
||||
{
|
||||
switch (index) {
|
||||
case 0:
|
||||
return &descriptor;
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user