aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Eilertsen <haraldei@anduin.net>2020-07-16 23:35:07 +0200
committerHarald Eilertsen <haraldei@anduin.net>2020-07-16 23:35:07 +0200
commitd5a5c482c42bd6069bf7f130fe2c3f8de71fad5e (patch)
treeef814c07ca189afebb4c853830b241406f5ca0a4
parented1c33f8a60b2e34c78473c2c1392fb3b809e524 (diff)
downloadairwindows-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.cpp155
-rw-r--r--plugins/LV2/src/Acceleration/Acceleration.h21
-rw-r--r--plugins/LV2/src/Acceleration/lv2wrapper.cpp70
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;
+}