1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-02-02 03:20:06 +00:00

Cleaned up some mistakes in the VST3 COM macros.

This commit is contained in:
jules 2014-04-02 10:26:25 +01:00
parent 5f23c27117
commit 223523f4f5
3 changed files with 44 additions and 52 deletions

View file

@ -109,14 +109,6 @@ private:
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,
public Vst::IMidiMapping,
@ -137,15 +129,15 @@ public:
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))
{
@ -579,6 +571,8 @@ public:
processSetup.processMode = Vst::kRealtime;
processSetup.sampleRate = 44100.0;
processSetup.symbolicSampleSize = Vst::kSample32;
pluginInstance->setPlayHead (this);
}
~JuceVST3Component()
@ -603,13 +597,13 @@ public:
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))
{
@ -1086,6 +1080,9 @@ public:
return kResultFalse;
#endif
preparePlugin (getPluginInstance().getSampleRate(),
getPluginInstance().getBlockSize());
return kResultTrue;
}
@ -1194,15 +1191,6 @@ public:
const int numInputChans = data.inputs != nullptr ? (int) data.inputs[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;
while (totalChans < numInputChans)
@ -1320,8 +1308,12 @@ private:
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);
getPluginInstance().prepareToPlay (sampleRate, bufferSize);
@ -1531,12 +1523,12 @@ public:
//==============================================================================
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?
*obj = nullptr;

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;
}
#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(); \
*obj = dynamic_cast<ClassType*> (this); \
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(); \
*obj = (CommonClassType*) static_cast<SourceClassType*> (this); \

View file

@ -534,14 +534,14 @@ public:
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;
return kNotImplemented;