diff options
author | falkTX <falktx@gmail.com> | 2017-05-09 21:02:56 +0100 |
---|---|---|
committer | falkTX <falktx@gmail.com> | 2017-05-09 21:02:56 +0100 |
commit | f644f303c55966ae7f32d8eeeef9c7c4648dbdb4 (patch) | |
tree | 5a1cbf1265c5d0e199ffe80792613803ee7f2154 | |
parent | bb29962a512a8911860de2b9b1da468b3f771538 (diff) |
Fix dssi_get_midi_controller_for_port (needs port offset)
-rw-r--r-- | distrho/src/DistrhoPluginInternal.hpp | 25 | ||||
-rw-r--r-- | distrho/src/DistrhoPluginLADSPA+DSSI.cpp | 7 |
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; |