aboutsummaryrefslogtreecommitdiffstats
path: root/lvz/wrapper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lvz/wrapper.cpp')
-rw-r--r--lvz/wrapper.cpp57
1 files changed, 36 insertions, 21 deletions
diff --git a/lvz/wrapper.cpp b/lvz/wrapper.cpp
index 0877053..a7fbc7c 100644
--- a/lvz/wrapper.cpp
+++ b/lvz/wrapper.cpp
@@ -37,24 +37,37 @@ extern "C" {
typedef struct {
PLUGIN_CLASS* effect;
- float** buffers;
float* controls;
+ float** control_buffers;
+ float** inputs;
+ float** outputs;
} MDAPlugin;
-static void mda_cleanup(LV2_Handle instance)
+static void
+mda_cleanup(LV2_Handle instance)
{
free(instance);
}
-static void mda_connect_port(LV2_Handle instance, uint32_t port, void* data)
+static void
+mda_connect_port(LV2_Handle instance, uint32_t port, void* data)
{
MDAPlugin* plugin = (MDAPlugin*)instance;
- plugin->buffers[port] = (float*)data;
+
+ uint32_t num_params = plugin->effect->getNumParameters();
+ uint32_t num_inputs = plugin->effect->getNumInputs();
- if (data != NULL && port < plugin->effect->getNumParameters())
- plugin->controls[port] = *(float*)data;
+ if (port < num_params) {
+ plugin->control_buffers[port] = (float*)data;
+ if (data != NULL)
+ plugin->controls[port] = *(float*)data;
+ } else if (port < num_params + num_inputs) {
+ plugin->inputs[port - num_params] = (float*)data;
+ } else {
+ plugin->outputs[port - num_params - num_inputs] = (float*)data;
+ }
}
@@ -71,14 +84,21 @@ mda_instantiate(const LV2_Descriptor* descriptor,
MDAPlugin* plugin = (MDAPlugin*)malloc(sizeof(MDAPlugin));
plugin->effect = effect;
- uint32_t num_ports = effect->getNumParameters()
- + effect->getNumInputs()
- + effect->getNumOutputs();
-
- plugin->buffers = (float**)malloc(sizeof(float*) * num_ports);
plugin->controls = (float*)malloc(sizeof(float) * effect->getNumParameters());
- memset(plugin->controls, '\0', sizeof(float) * effect->getNumParameters());
+ plugin->control_buffers = (float**)malloc(sizeof(float*) * effect->getNumParameters());
+ for (int32_t i = 0; i < effect->getNumParameters(); ++i) {
+ plugin->controls[i] = effect->getParameter(i);
+ plugin->control_buffers[i] = NULL;
+ }
+ plugin->inputs = (float**)malloc(sizeof(float*) * effect->getNumInputs());
+ for (int32_t i = 0; i < effect->getNumInputs(); ++i)
+ plugin->inputs[i] = NULL;
+
+ plugin->outputs = (float**)malloc(sizeof(float*) * effect->getNumOutputs());
+ for (int32_t i = 0; i < effect->getNumOutputs(); ++i)
+ plugin->outputs[i] = NULL;
+
return (LV2_Handle)plugin;
}
@@ -88,20 +108,15 @@ mda_run(LV2_Handle instance, uint32_t sample_count)
{
MDAPlugin* plugin = (MDAPlugin*)instance;
- uint32_t num_params = plugin->effect->getNumParameters();
- uint32_t num_inputs = plugin->effect->getNumInputs();
-
- for (uint32_t i = 0; i < num_params; ++i) {
- float val = plugin->buffers[i][0];
+ for (int32_t i = 0; i < plugin->effect->getNumParameters(); ++i) {
+ float val = plugin->control_buffers[i][0];
if (val != plugin->controls[i]) {
plugin->effect->setParameter(i, val);
plugin->controls[i] = val;
}
}
-
- plugin->effect->process(plugin->buffers + num_params,
- plugin->buffers + num_params + num_inputs,
- sample_count);
+
+ plugin->effect->process(plugin->inputs, plugin->outputs, sample_count);
}