Browse Source

Cleaned up some mistakes in the VST3 COM macros.

tags/2021-05-28
jules 11 years ago
parent
commit
223523f4f5
3 changed files with 44 additions and 52 deletions
  1. +32
    -40
      modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp
  2. +4
    -4
      modules/juce_audio_processors/format_types/juce_VST3Common.h
  3. +8
    -8
      modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp

+ 32
- 40
modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp View File

@@ -109,14 +109,6 @@ private:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceAudioProcessor) JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceAudioProcessor)
}; };
#define TEST_FOR_COMMON_BASE_AND_RETURN_IF_VALID(CommonClassType, SourceClassType) \
if (doUIDsMatch (iid, CommonClassType::iid)) \
{ \
addRef(); \
*obj = (CommonClassType*) static_cast<SourceClassType*> (this); \
return Steinberg::kResultOk; \
}
//============================================================================== //==============================================================================
class JuceVST3EditController : public Vst::EditController, class JuceVST3EditController : public Vst::EditController,
public Vst::IMidiMapping, public Vst::IMidiMapping,
@@ -137,15 +129,15 @@ public:
tresult PLUGIN_API queryInterface (const TUID targetIID, void** obj) override tresult PLUGIN_API queryInterface (const TUID targetIID, void** obj) override
{ {
TEST_FOR_AND_RETURN_IF_VALID (FObject)
TEST_FOR_AND_RETURN_IF_VALID (JuceVST3EditController)
TEST_FOR_AND_RETURN_IF_VALID (Vst::IEditController)
TEST_FOR_AND_RETURN_IF_VALID (Vst::IEditController2)
TEST_FOR_AND_RETURN_IF_VALID (Vst::IConnectionPoint)
TEST_FOR_AND_RETURN_IF_VALID (Vst::IMidiMapping)
TEST_FOR_COMMON_BASE_AND_RETURN_IF_VALID (IPluginBase, Vst::IEditController)
TEST_FOR_COMMON_BASE_AND_RETURN_IF_VALID (IDependent, Vst::IEditController)
TEST_FOR_COMMON_BASE_AND_RETURN_IF_VALID (FUnknown, Vst::IEditController)
TEST_FOR_AND_RETURN_IF_VALID (targetIID, FObject)
TEST_FOR_AND_RETURN_IF_VALID (targetIID, JuceVST3EditController)
TEST_FOR_AND_RETURN_IF_VALID (targetIID, Vst::IEditController)
TEST_FOR_AND_RETURN_IF_VALID (targetIID, Vst::IEditController2)
TEST_FOR_AND_RETURN_IF_VALID (targetIID, Vst::IConnectionPoint)
TEST_FOR_AND_RETURN_IF_VALID (targetIID, Vst::IMidiMapping)
TEST_FOR_COMMON_BASE_AND_RETURN_IF_VALID (targetIID, IPluginBase, Vst::IEditController)
TEST_FOR_COMMON_BASE_AND_RETURN_IF_VALID (targetIID, IDependent, Vst::IEditController)
TEST_FOR_COMMON_BASE_AND_RETURN_IF_VALID (targetIID, FUnknown, Vst::IEditController)
if (doUIDsMatch (targetIID, JuceAudioProcessor::iid)) if (doUIDsMatch (targetIID, JuceAudioProcessor::iid))
{ {
@@ -579,6 +571,8 @@ public:
processSetup.processMode = Vst::kRealtime; processSetup.processMode = Vst::kRealtime;
processSetup.sampleRate = 44100.0; processSetup.sampleRate = 44100.0;
processSetup.symbolicSampleSize = Vst::kSample32; processSetup.symbolicSampleSize = Vst::kSample32;
pluginInstance->setPlayHead (this);
} }
~JuceVST3Component() ~JuceVST3Component()
@@ -603,13 +597,13 @@ public:
tresult PLUGIN_API queryInterface (const TUID targetIID, void** obj) override tresult PLUGIN_API queryInterface (const TUID targetIID, void** obj) override
{ {
TEST_FOR_AND_RETURN_IF_VALID (IPluginBase)
TEST_FOR_AND_RETURN_IF_VALID (JuceVST3Component)
TEST_FOR_AND_RETURN_IF_VALID (Vst::IComponent)
TEST_FOR_AND_RETURN_IF_VALID (Vst::IAudioProcessor)
TEST_FOR_AND_RETURN_IF_VALID (Vst::IUnitInfo)
TEST_FOR_AND_RETURN_IF_VALID (Vst::IConnectionPoint)
TEST_FOR_COMMON_BASE_AND_RETURN_IF_VALID (FUnknown, Vst::IComponent)
TEST_FOR_AND_RETURN_IF_VALID (targetIID, IPluginBase)
TEST_FOR_AND_RETURN_IF_VALID (targetIID, JuceVST3Component)
TEST_FOR_AND_RETURN_IF_VALID (targetIID, Vst::IComponent)
TEST_FOR_AND_RETURN_IF_VALID (targetIID, Vst::IAudioProcessor)
TEST_FOR_AND_RETURN_IF_VALID (targetIID, Vst::IUnitInfo)
TEST_FOR_AND_RETURN_IF_VALID (targetIID, Vst::IConnectionPoint)
TEST_FOR_COMMON_BASE_AND_RETURN_IF_VALID (targetIID, FUnknown, Vst::IComponent)
if (doUIDsMatch (targetIID, JuceAudioProcessor::iid)) if (doUIDsMatch (targetIID, JuceAudioProcessor::iid))
{ {
@@ -1086,6 +1080,9 @@ public:
return kResultFalse; return kResultFalse;
#endif #endif
preparePlugin (getPluginInstance().getSampleRate(),
getPluginInstance().getBlockSize());
return kResultTrue; return kResultTrue;
} }
@@ -1194,15 +1191,6 @@ public:
const int numInputChans = data.inputs != nullptr ? (int) data.inputs[0].numChannels : 0; const int numInputChans = data.inputs != nullptr ? (int) data.inputs[0].numChannels : 0;
const int numOutputChans = data.outputs != nullptr ? (int) data.outputs[0].numChannels : 0; const int numOutputChans = data.outputs != nullptr ? (int) data.outputs[0].numChannels : 0;
if (numInputChans != pluginInstance->getNumInputChannels()
|| numOutputChans != pluginInstance->getNumOutputChannels())
{
const double sampleRate = pluginInstance->getSampleRate();
const int bufferSize = (int) data.numSamples;
pluginInstance->setPlayConfigDetails (numInputChans, numOutputChans, sampleRate, bufferSize);
pluginInstance->prepareToPlay (sampleRate, bufferSize);
}
int totalChans = 0; int totalChans = 0;
while (totalChans < numInputChans) while (totalChans < numInputChans)
@@ -1320,8 +1308,12 @@ private:
void preparePlugin (double sampleRate, int bufferSize) void preparePlugin (double sampleRate, int bufferSize)
{ {
getPluginInstance().setPlayConfigDetails (JucePlugin_MaxNumInputChannels,
JucePlugin_MaxNumOutputChannels,
Vst::BusInfo inputBusInfo, outputBusInfo;
audioInputs.first()->getInfo (inputBusInfo);
audioOutputs.first()->getInfo (outputBusInfo);
getPluginInstance().setPlayConfigDetails (inputBusInfo.channelCount,
outputBusInfo.channelCount,
sampleRate, bufferSize); sampleRate, bufferSize);
getPluginInstance().prepareToPlay (sampleRate, bufferSize); getPluginInstance().prepareToPlay (sampleRate, bufferSize);
@@ -1531,12 +1523,12 @@ public:
//============================================================================== //==============================================================================
JUCE_DECLARE_VST3_COM_REF_METHODS JUCE_DECLARE_VST3_COM_REF_METHODS
tresult PLUGIN_API queryInterface (const TUID iid, void** obj) override
tresult PLUGIN_API queryInterface (const TUID targetIID, void** obj) override
{ {
TEST_FOR_AND_RETURN_IF_VALID (IPluginFactory3)
TEST_FOR_AND_RETURN_IF_VALID (IPluginFactory2)
TEST_FOR_AND_RETURN_IF_VALID (IPluginFactory)
TEST_FOR_AND_RETURN_IF_VALID (FUnknown)
TEST_FOR_AND_RETURN_IF_VALID (targetIID, IPluginFactory3)
TEST_FOR_AND_RETURN_IF_VALID (targetIID, IPluginFactory2)
TEST_FOR_AND_RETURN_IF_VALID (targetIID, IPluginFactory)
TEST_FOR_AND_RETURN_IF_VALID (targetIID, FUnknown)
jassertfalse; // Something new? jassertfalse; // Something new?
*obj = nullptr; *obj = nullptr;


+ 4
- 4
modules/juce_audio_processors/format_types/juce_VST3Common.h View File

@@ -43,16 +43,16 @@ static bool doUIDsMatch (const Steinberg::TUID a, const Steinberg::TUID b) noexc
return std::memcmp (a, b, sizeof (Steinberg::TUID)) == 0; return std::memcmp (a, b, sizeof (Steinberg::TUID)) == 0;
} }
#define TEST_FOR_AND_RETURN_IF_VALID(ClassType) \
if (doUIDsMatch (iid, ClassType::iid)) \
#define TEST_FOR_AND_RETURN_IF_VALID(iidToTest, ClassType) \
if (doUIDsMatch (iidToTest, ClassType::iid)) \
{ \ { \
addRef(); \ addRef(); \
*obj = dynamic_cast<ClassType*> (this); \ *obj = dynamic_cast<ClassType*> (this); \
return Steinberg::kResultOk; \ return Steinberg::kResultOk; \
} }
#define TEST_FOR_COMMON_BASE_AND_RETURN_IF_VALID(CommonClassType, SourceClassType) \
if (doUIDsMatch (iid, CommonClassType::iid)) \
#define TEST_FOR_COMMON_BASE_AND_RETURN_IF_VALID(iidToTest, CommonClassType, SourceClassType) \
if (doUIDsMatch (iidToTest, CommonClassType::iid)) \
{ \ { \
addRef(); \ addRef(); \
*obj = (CommonClassType*) static_cast<SourceClassType*> (this); \ *obj = (CommonClassType*) static_cast<SourceClassType*> (this); \


+ 8
- 8
modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp View File

@@ -534,14 +534,14 @@ public:
return kResultOk; return kResultOk;
} }
TEST_FOR_AND_RETURN_IF_VALID (Vst::IComponentHandler)
TEST_FOR_AND_RETURN_IF_VALID (Vst::IComponentHandler2)
TEST_FOR_AND_RETURN_IF_VALID (Vst::IComponentHandler3)
TEST_FOR_AND_RETURN_IF_VALID (Vst::IContextMenuTarget)
TEST_FOR_AND_RETURN_IF_VALID (Vst::IHostApplication)
TEST_FOR_AND_RETURN_IF_VALID (Vst::IParamValueQueue)
TEST_FOR_AND_RETURN_IF_VALID (Vst::IUnitHandler)
TEST_FOR_COMMON_BASE_AND_RETURN_IF_VALID (FUnknown, Vst::IComponentHandler)
TEST_FOR_AND_RETURN_IF_VALID (iid, Vst::IComponentHandler)
TEST_FOR_AND_RETURN_IF_VALID (iid, Vst::IComponentHandler2)
TEST_FOR_AND_RETURN_IF_VALID (iid, Vst::IComponentHandler3)
TEST_FOR_AND_RETURN_IF_VALID (iid, Vst::IContextMenuTarget)
TEST_FOR_AND_RETURN_IF_VALID (iid, Vst::IHostApplication)
TEST_FOR_AND_RETURN_IF_VALID (iid, Vst::IParamValueQueue)
TEST_FOR_AND_RETURN_IF_VALID (iid, Vst::IUnitHandler)
TEST_FOR_COMMON_BASE_AND_RETURN_IF_VALID (iid, FUnknown, Vst::IComponentHandler)
*obj = nullptr; *obj = nullptr;
return kNotImplemented; return kNotImplemented;


Loading…
Cancel
Save