From 23a248fe75519c4d721a986384fb2e49965530ac Mon Sep 17 00:00:00 2001 From: jules Date: Tue, 25 Oct 2016 16:11:33 +0100 Subject: [PATCH] Added method VSTPluginFormat::getPluginInstanceFromVstEffectInterface() which can be used for devious purposes to retrieve a plugin's AudioPluginInstance object from an AEffect --- .../format_types/juce_VSTPluginFormat.cpp | 9 +++++++++ .../format_types/juce_VSTPluginFormat.h | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp index 1d96f370df..5c2d360eb6 100644 --- a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp +++ b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp @@ -3037,6 +3037,15 @@ void VSTPluginFormat::setExtraFunctions (AudioPluginInstance* plugin, ExtraFunct vst->extraFunctions = f; } +AudioPluginInstance* VSTPluginFormat::getPluginInstanceFromVstEffectInterface (void* aEffect) +{ + if (VstEffectInterface* vstAEffect = reinterpret_cast (aEffect)) + if (VSTPluginInstance* instanceVST = reinterpret_cast (vstAEffect->hostSpace2)) + return dynamic_cast (instanceVST); + + return nullptr; +} + pointer_sized_int JUCE_CALLTYPE VSTPluginFormat::dispatcher (AudioPluginInstance* plugin, int32 opcode, int32 index, pointer_sized_int value, void* ptr, float opt) { if (VSTPluginInstance* vst = dynamic_cast (plugin)) diff --git a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h index 5bfa58c682..d3b7d9fa82 100644 --- a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h +++ b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h @@ -85,6 +85,11 @@ public: /** This simply calls directly to the VST's AEffect::dispatcher() function. */ static pointer_sized_int JUCE_CALLTYPE dispatcher (AudioPluginInstance*, int32, int32, pointer_sized_int, void*, float); + /** Given a VstEffectInterface* (aka vst::AEffect*), this will return the juce AudioPluginInstance + that is being used to wrap it + */ + static AudioPluginInstance* getPluginInstanceFromVstEffectInterface (void* aEffect); + //============================================================================== String getName() const override { return "VST"; } void findAllTypesForFile (OwnedArray&, const String& fileOrIdentifier) override;