From 34f7d467c90243e0d7adb05f4c3f9c15c4e50e23 Mon Sep 17 00:00:00 2001 From: Anthony Nicholls Date: Wed, 11 Dec 2024 11:48:13 +0000 Subject: [PATCH] VST2 Client: Fix compilation issue when compiling with JUCE_VST3_CAN_REPLACE_VST2 --- .../detail/juce_PluginUtilities.h | 21 -------------- .../juce_audio_plugin_client_VST2.cpp | 28 +++++++++++++++++-- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/modules/juce_audio_plugin_client/detail/juce_PluginUtilities.h b/modules/juce_audio_plugin_client/detail/juce_PluginUtilities.h index ca2193dd96..ca1b9ab142 100644 --- a/modules/juce_audio_plugin_client/detail/juce_PluginUtilities.h +++ b/modules/juce_audio_plugin_client/detail/juce_PluginUtilities.h @@ -65,27 +65,6 @@ struct PluginUtilities static PluginHostType hostType; return hostType; } - - #if JucePlugin_Build_VST - static bool handleManufacturerSpecificVST2Opcode ([[maybe_unused]] int32 index, - [[maybe_unused]] pointer_sized_int value, - [[maybe_unused]] void* ptr, - float) - { - #if JUCE_VST3_CAN_REPLACE_VST2 - if ((index == (int32) ByteOrder::bigEndianInt ("stCA") || index == (int32) ByteOrder::bigEndianInt ("stCa")) - && value == (int32) ByteOrder::bigEndianInt ("FUID") && ptr != nullptr) - { - const auto uidString = VST3ClientExtensions::convertVST2PluginId (JucePlugin_VSTUniqueID, JucePlugin_Name, VST3ClientExtensions::InterfaceType::component); - MemoryBlock uidValue; - uidValue.loadFromHexString (uidString); - uidValue.copyTo (ptr, 0, uidValue.getSize()); - return true; - } - #endif - return false; - } - #endif }; } // namespace juce::detail diff --git a/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST2.cpp b/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST2.cpp index 629185e1b6..065247a3b3 100644 --- a/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST2.cpp +++ b/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST2.cpp @@ -1798,10 +1798,34 @@ private: return convertHexVersionToDecimal (JucePlugin_VersionCode); } + static std::optional handleVST3Compatibility ([[maybe_unused]] VstOpCodeArguments args) + { + #if ! JUCE_VST3_CAN_REPLACE_VST2 + return {}; + #else + if (args.index != (int32) ByteOrder::bigEndianInt ("stCA") + && args.index != (int32) ByteOrder::bigEndianInt ("stCa")) + return {}; + + if (args.value != (int32) ByteOrder::bigEndianInt ("FUID")) + return {}; + + if (args.ptr == nullptr) + return 0; + + const auto uid = VST3ClientExtensions::convertVST2PluginId (JucePlugin_VSTUniqueID, JucePlugin_Name, VST3ClientExtensions::InterfaceType::component); + const auto uidString = String ((const char *) uid.data(), uid.size()); + MemoryBlock uidValue; + uidValue.loadFromHexString (uidString); + uidValue.copyTo (args.ptr, 0, uidValue.getSize()); + return 1; + #endif + } + pointer_sized_int handleManufacturerSpecific (VstOpCodeArguments args) { - if (detail::PluginUtilities::handleManufacturerSpecificVST2Opcode (args.index, args.value, args.ptr, args.opt)) - return 1; + if (const auto result = handleVST3Compatibility (args)) + return *result; if (args.index == (int32) ByteOrder::bigEndianInt ("PreS") && args.value == (int32) ByteOrder::bigEndianInt ("AeCs"))