File zynaddsubfx-DPF.patch of Package zynaddsubfx

Index: DPF/distrho/src/DistrhoPluginInternal.hpp
===================================================================
--- DPF/distrho/src/DistrhoPluginInternal.hpp.orig	2016-08-01 00:51:33.000000000 +0200
+++ DPF/distrho/src/DistrhoPluginInternal.hpp	2017-05-10 17:05:02.037419388 +0200
@@ -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);
Index: DPF/distrho/src/DistrhoPluginLADSPA+DSSI.cpp
===================================================================
--- DPF/distrho/src/DistrhoPluginLADSPA+DSSI.cpp.orig	2016-08-01 00:51:33.000000000 +0200
+++ DPF/distrho/src/DistrhoPluginLADSPA+DSSI.cpp	2017-05-10 17:05:02.117414864 +0200
@@ -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;
Index: DPF/distrho/src/DistrhoPluginLV2export.cpp
===================================================================
--- DPF/distrho/src/DistrhoPluginLV2export.cpp.orig	2016-11-20 18:28:11.000000000 +0200
+++ DPF/distrho/src/DistrhoPluginLV2export.cpp	2017-05-10 17:05:02.117414864 +0200
@@ -1,6 +1,6 @@
 /*
  * DISTRHO Plugin Framework (DPF)
- * Copyright (C) 2012-2016 Filipe Coelho <falktx@falktx.com>
+ * Copyright (C) 2012-2017 Filipe Coelho <falktx@falktx.com>
  *
  * Permission to use, copy, modify, and/or distribute this software for any purpose with
  * or without fee is hereby granted, provided that the above copyright notice and this
@@ -608,7 +608,18 @@ void lv2_generate_ttl(const char* const
 
             plugin.loadProgram(i);
 
-            presetString  = "<" DISTRHO_PLUGIN_URI + presetSeparator + "preset" + strBuf + ">\n";
+            presetString = "<" DISTRHO_PLUGIN_URI + presetSeparator + "preset" + strBuf + ">\n";
+
+# if DISTRHO_PLUGIN_WANT_FULL_STATE
+            if (numParameters == 0 && numStates == 0)
+#else
+            if (numParameters == 0)
+#endif
+            {
+                presetString += "    .";
+                presetsString += presetString;
+                continue;
+            }
 
 # if DISTRHO_PLUGIN_WANT_FULL_STATE
             presetString += "    state:state [\n";
@@ -631,12 +642,22 @@ void lv2_generate_ttl(const char* const
                 presetString += "    ] .\n\n";
 # endif
 
+            bool firstParameter = true;
+
             for (uint32_t j=0; j <numParameters; ++j)
             {
-                if (j == 0)
+                if (plugin.isParameterOutput(j))
+                    continue;
+
+                if (firstParameter)
+                {
                     presetString += "    lv2:port [\n";
+                    firstParameter = false;
+                }
                 else
+                {
                     presetString += "    [\n";
+                }
 
                 presetString += "        lv2:symbol \"" + plugin.getParameterSymbol(j) + "\" ;\n";
 
@@ -645,7 +666,7 @@ void lv2_generate_ttl(const char* const
                 else
                     presetString += "        pset:value " + String(plugin.getParameterValue(j)) + " ;\n";
 
-                if (j+1 == numParameters)
+                if (j+1 == numParameters || (j+2 == numParameters && plugin.isParameterOutput(j+1)))
                     presetString += "    ] .\n\n";
                 else
                     presetString += "    ] ,\n";
openSUSE Build Service is sponsored by