From e360047054117d63fb579ec9231e9dc77c99f12a Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 8 Aug 2008 22:45:58 +0000 Subject: Add preliminary (library side only) LV2 port of MDA (open-sourced VST plugins). git-svn-id: http://svn.drobilla.net/lad/mda-lv2@1321 a436a847-0d15-0410-975c-d299462d15a1 --- lvz/wrapper.cpp | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 lvz/wrapper.cpp (limited to 'lvz/wrapper.cpp') diff --git a/lvz/wrapper.cpp b/lvz/wrapper.cpp new file mode 100644 index 0000000..5916b13 --- /dev/null +++ b/lvz/wrapper.cpp @@ -0,0 +1,115 @@ +/* LVZ - A C++ interface for writing LV2 plugins. + * Copyright (C) 2008 Dave Robillard + * + * This library is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * This library is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef PLUGIN_URI +#error "This file requires PLUGIN_URI to be defined" +#endif + +#ifndef PLUGIN_CLASS +#error "This file requires PLUGIN_CLASS to be defined" +#endif + +#include +#include "audioeffectx.h" +#include "lv2.h" +#include PLUGIN_HEADER + +extern "C" { + +/* Plugin */ + +typedef struct { + PLUGIN_CLASS* effect; + float** inputs; + float** outputs; +} MDAPlugin; + + +static void mda_cleanup(LV2_Handle instance) +{ + free(instance); +} + + +static void mda_connect_port(LV2_Handle instance, uint32_t port, void* data) +{ + MDAPlugin* plugin = (MDAPlugin*)instance; + plugin->effect->setParameter(port, *(float*)data); +} + + +static LV2_Handle +mda_instantiate(const LV2_Descriptor* descriptor, + double rate, + const char* bundle_path, + const LV2_Feature*const* features) +{ + PLUGIN_CLASS* effect = new PLUGIN_CLASS(NULL); + effect->setSampleRate(rate); + + MDAPlugin* plugin = (MDAPlugin*)malloc(sizeof(MDAPlugin)); + plugin->effect = effect; + plugin->inputs = (float**)malloc(sizeof(float*) * effect->getNumInputs()); + plugin->outputs = (float**)malloc(sizeof(float*) * effect->getNumOutputs()); + + return (LV2_Handle)plugin; +} + + +static void +mda_run(LV2_Handle instance, uint32_t sample_count) +{ + MDAPlugin* plugin = (MDAPlugin*)instance; + plugin->effect->process(plugin->inputs, plugin->outputs, sample_count); +} + +/* Library */ + +static LV2_Descriptor *mda_descriptor = NULL; + +static void +init_descriptor() +{ + mda_descriptor = (LV2_Descriptor*)malloc(sizeof(LV2_Descriptor)); + + mda_descriptor->URI = PLUGIN_URI; + mda_descriptor->activate = NULL; + mda_descriptor->cleanup = mda_cleanup; + mda_descriptor->connect_port = mda_connect_port; + mda_descriptor->deactivate = NULL; + mda_descriptor->instantiate = mda_instantiate; + mda_descriptor->run = mda_run; +} + + +LV2_SYMBOL_EXPORT +const LV2_Descriptor* +lv2_descriptor(uint32_t index) +{ + if (!mda_descriptor) + init_descriptor(); + + switch (index) { + case 0: + return mda_descriptor; + default: + return NULL; + } +} + +} // extern "C" -- cgit v1.2.1