diff options
author | Harald Eilertsen <haraldei@anduin.net> | 2020-07-16 23:35:07 +0200 |
---|---|---|
committer | Harald Eilertsen <haraldei@anduin.net> | 2020-07-16 23:35:07 +0200 |
commit | d5a5c482c42bd6069bf7f130fe2c3f8de71fad5e (patch) | |
tree | ef814c07ca189afebb4c853830b241406f5ca0a4 | |
parent | ed1c33f8a60b2e34c78473c2c1392fb3b809e524 (diff) | |
download | airwindows-lv2-port-d5a5c482c42bd6069bf7f130fe2c3f8de71fad5e.tar.gz airwindows-lv2-port-d5a5c482c42bd6069bf7f130fe2c3f8de71fad5e.tar.bz2 airwindows-lv2-port-d5a5c482c42bd6069bf7f130fe2c3f8de71fad5e.zip |
LV2: Split lv2 interface code and actual plugin.
Let's keep the LV2 interfacing and the actual plugin separate. For now
the actual plugin is completely independent of the plugin system, and
the wrapper code just forwards everything that's plugin specific to the
plugin proper.
-rw-r--r-- | plugins/LV2/src/Acceleration/Acceleration.cpp | 155 | ||||
-rw-r--r-- | plugins/LV2/src/Acceleration/Acceleration.h | 21 | ||||
-rw-r--r-- | plugins/LV2/src/Acceleration/lv2wrapper.cpp | 70 |
3 files changed, 131 insertions, 115 deletions
diff --git a/plugins/LV2/src/Acceleration/Acceleration.cpp b/plugins/LV2/src/Acceleration/Acceleration.cpp index 9be24cd..dcc8734 100644 --- a/plugins/LV2/src/Acceleration/Acceleration.cpp +++ b/plugins/LV2/src/Acceleration/Acceleration.cpp @@ -1,135 +1,60 @@ -#include "lv2/core/lv2.h" - +#include "Acceleration.h" #include <iostream> namespace { -const char * ACCELERATION_URI = "https://www.airwindows.com/acceleration"; - -enum PortIndex { - ACCELERATION_LIMIT, - ACCELERATION_DRYWET, - ACCELERATION_IN_L, - ACCELERATION_IN_R, - ACCELERATION_OUT_L, - ACCELERATION_OUT_R, +enum class PortIndex : uint32_t { + LIMIT, + DRYWET, + IN_L, + IN_R, + OUT_L, + OUT_R, }; -class Acceleration { -public: - Acceleration(double rate) - : rate(rate) - { - } - - void connect_port(uint32_t port, void * data) - { - switch (port) { - case ACCELERATION_LIMIT: - limit = (const float *) data; - break; - - case ACCELERATION_DRYWET: - drywet = (const float *) data; - break; - - case ACCELERATION_IN_L: - in[0] = (const float *) data; - break; - - case ACCELERATION_IN_R: - in[1] = (const float *) data; - break; - - case ACCELERATION_OUT_L: - out[0] = (float *) data; - break; - - case ACCELERATION_OUT_R: - out[1] = (float *) data; - break; - - default: - std::cerr << "Invalid port " << port << ": ignoring." << std::endl; - } - } - - void run(uint32_t num_samples) - { - for (auto i = 0u; i < num_samples; i++) { - *out[0]++ = *in[0]++ * *limit; - *out[1]++ = *in[1]++ * *limit; - } - } - -private: - double rate; - const float * limit; - const float * drywet; - const float * in[2]; - float * out[2]; -}; - -LV2_Handle instantiate( - const LV2_Descriptor * d, - double rate, - const char * path, - const LV2_Feature * const * features) -{ - return new Acceleration{rate}; -} +} // anon namespace -void connect_port( - LV2_Handle instance, - uint32_t port, - void * data) +Acceleration::Acceleration(double rate) + : rate(rate) { - auto accel = static_cast<Acceleration *>(instance); - accel->connect_port(port, data); } -void activate(LV2_Handle instance) +void Acceleration::connect_port(uint32_t port, void * data) { -} + switch (static_cast<PortIndex>(port)) { + case PortIndex::LIMIT: + limit = (const float *) data; + break; -void run(LV2_Handle instance, uint32_t num_samples) -{ - auto accel = static_cast<Acceleration *>(instance); - accel->run(num_samples); -} + case PortIndex::DRYWET: + drywet = (const float *) data; + break; -void deactivate(LV2_Handle) -{ -} + case PortIndex::IN_L: + in[0] = (const float *) data; + break; -void destroy(LV2_Handle instance) -{ - delete static_cast<Acceleration *>(instance); -} + case PortIndex::IN_R: + in[1] = (const float *) data; + break; -const void * extension_data(const char * uri) -{ - return nullptr; -} + case PortIndex::OUT_L: + out[0] = (float *) data; + break; -const LV2_Descriptor descriptor = { - ACCELERATION_URI, - instantiate, - connect_port, - activate, - run, - deactivate, - destroy, - extension_data -}; + case PortIndex::OUT_R: + out[1] = (float *) data; + break; -} // anon namespace + default: + std::cerr << "Invalid port " << port << ": ignoring." << std::endl; + } +} -LV2_SYMBOL_EXPORT -const LV2_Descriptor * lv2_descriptor(uint32_t idx) +void Acceleration::run(uint32_t num_samples) { - if (idx == 0) - return &descriptor; - - return nullptr; + for (auto i = 0u; i < num_samples; i++) { + *out[0]++ = *in[0]++ * *limit; + *out[1]++ = *in[1]++ * *limit; + } } diff --git a/plugins/LV2/src/Acceleration/Acceleration.h b/plugins/LV2/src/Acceleration/Acceleration.h new file mode 100644 index 0000000..c277cb9 --- /dev/null +++ b/plugins/LV2/src/Acceleration/Acceleration.h @@ -0,0 +1,21 @@ +#ifndef __Acceleration_h +#define __Acceleration_h + +#include <cstdint> + +class Acceleration { +public: + Acceleration(double rate); + + void connect_port(uint32_t port, void * data); + void run(uint32_t num_samples); + +private: + double rate; + const float * limit; + const float * drywet; + const float * in[2]; + float * out[2]; +}; + +#endif diff --git a/plugins/LV2/src/Acceleration/lv2wrapper.cpp b/plugins/LV2/src/Acceleration/lv2wrapper.cpp new file mode 100644 index 0000000..3b1c04c --- /dev/null +++ b/plugins/LV2/src/Acceleration/lv2wrapper.cpp @@ -0,0 +1,70 @@ +#include "lv2/core/lv2.h" +#include "Acceleration.h" + +namespace { + +const char * ACCELERATION_URI = "https://www.airwindows.com/acceleration"; + +LV2_Handle instantiate( + const LV2_Descriptor * d, + double rate, + const char * path, + const LV2_Feature * const * features) +{ + return new Acceleration{rate}; +} + +void connect_port( + LV2_Handle instance, + uint32_t port, + void * data) +{ + auto accel = static_cast<Acceleration *>(instance); + accel->connect_port(port, data); +} + +void activate(LV2_Handle instance) +{ +} + +void run(LV2_Handle instance, uint32_t num_samples) +{ + auto accel = static_cast<Acceleration *>(instance); + accel->run(num_samples); +} + +void deactivate(LV2_Handle) +{ +} + +void destroy(LV2_Handle instance) +{ + delete static_cast<Acceleration *>(instance); +} + +const void * extension_data(const char * uri) +{ + return nullptr; +} + +const LV2_Descriptor descriptor = { + ACCELERATION_URI, + instantiate, + connect_port, + activate, + run, + deactivate, + destroy, + extension_data +}; + +} // anon namespace + +LV2_SYMBOL_EXPORT +const LV2_Descriptor * lv2_descriptor(uint32_t idx) +{ + if (idx == 0) + return &descriptor; + + return nullptr; +} |