1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-14 00:14:18 +00:00

Merge remote-tracking branch 'gh/master' into develop

This commit is contained in:
jules 2014-11-15 16:08:48 +00:00
commit 2e01f08540

View file

@ -364,7 +364,6 @@ class VST3HostContext : public Vst::IComponentHandler, // From VST V3.0.0
public Vst::IComponentHandler3, // From VST V3.5.0 (also very well named!)
public Vst::IContextMenuTarget,
public Vst::IHostApplication,
public Vst::IParamValueQueue,
public Vst::IUnitHandler
{
public:
@ -684,31 +683,6 @@ public:
return kNotImplemented;
}
//==============================================================================
Vst::ParamID PLUGIN_API getParameterId() override
{
jassertfalse;
return 0;
}
Steinberg::int32 PLUGIN_API getPointCount() override
{
jassertfalse;
return 0;
}
tresult PLUGIN_API getPoint (Steinberg::int32, Steinberg::int32&, Vst::ParamValue&) override
{
jassertfalse;
return kResultFalse;
}
tresult PLUGIN_API addPoint (Steinberg::int32, Vst::ParamValue, Steinberg::int32&) override
{
jassertfalse;
return kResultFalse;
}
//==============================================================================
tresult PLUGIN_API notifyUnitSelection (Vst::UnitID) override
{
@ -736,7 +710,6 @@ public:
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)
@ -2132,21 +2105,85 @@ private:
JUCE_DECLARE_VST3_COM_REF_METHODS
JUCE_DECLARE_VST3_COM_QUERY_METHODS
Steinberg::int32 PLUGIN_API getParameterCount() override { return 0; }
Steinberg::int32 PLUGIN_API getParameterCount() override { return (Steinberg::int32) queues.size(); }
Vst::IParamValueQueue* PLUGIN_API getParameterData (Steinberg::int32 index) override { return queues[(int) index]; }
Vst::IParamValueQueue* PLUGIN_API getParameterData (Steinberg::int32) override
Vst::IParamValueQueue* PLUGIN_API addParameterData (const Vst::ParamID& id, Steinberg::int32& index) override
{
return nullptr;
}
for (int i = queues.size(); --i >= 0;)
{
if (queues.getUnchecked (i)->getParameterId() == id)
{
index = (Steinberg::int32) i;
return queues.getUnchecked (i);
}
}
Vst::IParamValueQueue* PLUGIN_API addParameterData (const Vst::ParamID&, Steinberg::int32& index) override
{
index = 0;
return nullptr;
ParamValueQueue* q = queues.add (new ParamValueQueue (id));
index = getParameterCount() - 1;
return q;
}
private:
struct ParamValueQueue : public Vst::IParamValueQueue
{
ParamValueQueue (Vst::ParamID parameterID) : paramID (parameterID)
{
points.ensureStorageAllocated (1024);
}
virtual ~ParamValueQueue() {}
JUCE_DECLARE_VST3_COM_REF_METHODS
JUCE_DECLARE_VST3_COM_QUERY_METHODS
Steinberg::Vst::ParamID PLUGIN_API getParameterId() override { return paramID; }
Steinberg::int32 PLUGIN_API getPointCount() override { return (Steinberg::int32) points.size(); }
Steinberg::tresult PLUGIN_API getPoint (Steinberg::int32 index,
Steinberg::int32& sampleOffset,
Steinberg::Vst::ParamValue& value) override
{
if (isPositiveAndBelow ((int) index, points.size()))
{
ParamPoint e (points.getUnchecked ((int) index));
sampleOffset = e.sampleOffset;
value = e.value;
return kResultTrue;
}
sampleOffset = -1;
value = 0.0;
return kResultFalse;
}
Steinberg::tresult PLUGIN_API addPoint (Steinberg::int32 sampleOffset,
Steinberg::Vst::ParamValue value,
Steinberg::int32& index) override
{
// XXX this may need to be made thread-safe..
ParamPoint p = { sampleOffset, value };
points.add (p);
index = (Steinberg::int32) points.size();
return kResultTrue;
}
private:
struct ParamPoint
{
Steinberg::int32 sampleOffset;
Steinberg::Vst::ParamValue value;
};
Atomic<int> refCount;
const Vst::ParamID paramID;
Array<ParamPoint> points;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ParamValueQueue)
};
Atomic<int> refCount;
OwnedArray<ParamValueQueue> queues;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ParameterChangeList)
};