summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfalkTX <falktx@gmail.com>2017-05-09 21:02:56 +0100
committerfalkTX <falktx@gmail.com>2017-05-09 21:02:56 +0100
commitf644f303c55966ae7f32d8eeeef9c7c4648dbdb4 (patch)
tree5a1cbf1265c5d0e199ffe80792613803ee7f2154
parentbb29962a512a8911860de2b9b1da468b3f771538 (diff)
Fix dssi_get_midi_controller_for_port (needs port offset)
-rw-r--r--distrho/src/DistrhoPluginInternal.hpp25
-rw-r--r--distrho/src/DistrhoPluginLADSPA+DSSI.cpp7
2 files changed, 31 insertions, 1 deletions
diff --git a/distrho/src/DistrhoPluginInternal.hpp b/distrho/src/DistrhoPluginInternal.hpp
index bbb10791..d9677c14 100644
--- a/distrho/src/DistrhoPluginInternal.hpp
+++ b/distrho/src/DistrhoPluginInternal.hpp
@@ -43,6 +43,7 @@ struct Plugin::PrivateData {
#endif
uint32_t parameterCount;
+ uint32_t parameterOffset;
Parameter* parameters;
#if DISTRHO_PLUGIN_WANT_PROGRAMS
@@ -73,6 +74,7 @@ struct Plugin::PrivateData {
audioPorts(nullptr),
#endif
parameterCount(0),
+ parameterOffset(0),
parameters(nullptr),
#if DISTRHO_PLUGIN_WANT_PROGRAMS
programCount(0),
@@ -91,6 +93,22 @@ struct Plugin::PrivateData {
{
DISTRHO_SAFE_ASSERT(bufferSize != 0);
DISTRHO_SAFE_ASSERT(d_isNotZero(sampleRate));
+
+#if defined(DISTRHO_PLUGIN_TARGET_DSSI) || defined(DISTRHO_PLUGIN_TARGET_LV2)
+ parameterOffset += DISTRHO_PLUGIN_NUM_INPUTS + DISTRHO_PLUGIN_NUM_OUTPUTS;
+# if DISTRHO_PLUGIN_WANT_LATENCY
+ parameterOffset += 1;
+# endif
+#endif
+
+#ifdef DISTRHO_PLUGIN_TARGET_LV2
+# if (DISTRHO_PLUGIN_IS_SYNTH || DISTRHO_PLUGIN_WANT_TIMEPOS || DISTRHO_PLUGIN_WANT_STATE)
+ parameterOffset += 1;
+# if DISTRHO_PLUGIN_WANT_STATE
+ parameterOffset += 1;
+# endif
+# endif
+#endif
}
~PrivateData() noexcept
@@ -283,6 +301,13 @@ public:
return fData->parameterCount;
}
+ uint32_t getParameterOffset() const noexcept
+ {
+ DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr, 0);
+
+ return fData->parameterOffset;
+ }
+
uint32_t getParameterHints(const uint32_t index) const noexcept
{
DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr && index < fData->parameterCount, 0x0);
diff --git a/distrho/src/DistrhoPluginLADSPA+DSSI.cpp b/distrho/src/DistrhoPluginLADSPA+DSSI.cpp
index 2e2091c7..01bb19d7 100644
--- a/distrho/src/DistrhoPluginLADSPA+DSSI.cpp
+++ b/distrho/src/DistrhoPluginLADSPA+DSSI.cpp
@@ -331,7 +331,12 @@ public:
int dssi_get_midi_controller_for_port(const ulong port) noexcept
{
- const uint8_t midiCC = fPlugin.getParameterMidiCC(port);
+ const uint32_t parameterOffset = fPlugin.getParameterOffset();
+
+ if (port > parameterOffset)
+ return DSSI_NONE;
+
+ const uint8_t midiCC = fPlugin.getParameterMidiCC(port-parameterOffset);
if (midiCC == 0 || midiCC == 32 || midiCC >= 0x78)
return DSSI_NONE;