Browse Source

AAX: Fixed an issue where you could get stuck in audioParameterChanged recursion

tags/2021-05-28
Tom Poole 7 years ago
parent
commit
581fa8c5a0
1 changed files with 17 additions and 2 deletions
  1. +17
    -2
      modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp

+ 17
- 2
modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp View File

@@ -616,6 +616,8 @@ namespace AAXClasses
JuceAAX_Processor()
: pluginInstance (createPluginFilterOfType (AudioProcessor::wrapperType_AAX))
{
inParameterChangedCallback = false;
pluginInstance->setPlayHead (this);
pluginInstance->addListener (this);
@@ -784,8 +786,13 @@ namespace AAXClasses
{
if (auto* param = pluginInstance->getParameters()[index])
{
param->setValue (value);
param->sendValueChangedMessageToListeners (value);
if (value != param->getValue())
{
param->setValue (value);
inParameterChangedCallback = true;
param->sendValueChangedMessageToListeners (value);
}
}
else
{
@@ -993,6 +1000,12 @@ namespace AAXClasses
void audioProcessorParameterChanged (AudioProcessor* /*processor*/, int parameterIndex, float newValue) override
{
if (inParameterChangedCallback.get())
{
inParameterChangedCallback = false;
return;
}
if (auto paramID = getAAXParamIDFromJuceIndex (parameterIndex))
SetParameterNormalizedValue (paramID, (double) newValue);
}
@@ -1763,6 +1776,8 @@ namespace AAXClasses
mutable ThreadLocalValue<ChunkMemoryBlock> perThreadFilterData;
CriticalSection perThreadDataLock;
ThreadLocalValue<bool> inParameterChangedCallback;
JUCE_DECLARE_NON_COPYABLE (JuceAAX_Processor)
};


Loading…
Cancel
Save