Browse Source

Handle more sources of vst automation via audioMasterAutomate

Signed-off-by: falkTX <falktx@falktx.com>

Conflicts:
	source/backend/plugin/CarlaPluginVST2.cpp
tags/v1.9.14
falkTX 6 years ago
parent
commit
f4e6e15cbb
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
1 changed files with 21 additions and 6 deletions
  1. +21
    -6
      source/backend/plugin/CarlaPluginVST2.cpp

+ 21
- 6
source/backend/plugin/CarlaPluginVST2.cpp View File

@@ -73,6 +73,7 @@ public:
fIsInitializing(true),
fIsProcessing(false),
fChangingValuesThread(kNullThread),
fIdleThread(kNullThread),
fMainThread(pthread_self()),
fProcThread(kNullThread),
#ifdef CARLA_OS_MAC
@@ -555,7 +556,10 @@ public:
void idle() override
{
if (fNeedIdle)
{
const ScopedValueSetter<pthread_t> svs(fIdleThread, pthread_self(), kNullThread);
dispatcher(effIdle);
}

CarlaPlugin::idle();
}
@@ -1866,8 +1870,13 @@ protected:

const pthread_t thisThread = pthread_self();

if (pthread_equal(thisThread, kNullThread))
{
carla_stderr("audioMasterAutomate called with null thread!?");
setParameterValue(uindex, fixedValue, false, true, true);
}
// Called from plugin process thread, nasty! (likely MIDI learn)
/**/ if (pthread_equal(thisThread, fProcThread))
else if (pthread_equal(thisThread, fProcThread))
{
CARLA_SAFE_ASSERT(fIsProcessing);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, index, 0, fixedValue);
@@ -1875,21 +1884,26 @@ protected:
// Called from effSetChunk or effSetProgram
else if (pthread_equal(thisThread, fChangingValuesThread))
{
carla_debug("audioMasterAutomate called while setting state");
pData->postponeRtEvent(kPluginPostRtEventParameterChange, index, 0, fixedValue);
}
// Called from UI
// Called from effIdle
else if (pthread_equal(thisThread, fIdleThread))
{
carla_debug("audioMasterAutomate called from idle thread");
pData->postponeRtEvent(kPluginPostRtEventParameterChange, index, 0, fixedValue);
}
// Called from UI?
else if (fUI.isVisible)
{
carla_debug("audioMasterAutomate called while UI visible");
CarlaPlugin::setParameterValue(uindex, fixedValue, false, true, true);
}
// Unknown
// TODO - check if plugin or UI is initializing
else
{
carla_stdout("audioMasterAutomate called from unknown source");

setParameterValue(uindex, fixedValue, true, true, true);
//pData->postponeRtEvent(kPluginPostRtEventParameterChange, index, 0, fixedValue);
setParameterValue(uindex, fixedValue, false, true, true);
}
break;
}
@@ -2448,6 +2462,7 @@ private:
bool fIsInitializing;
bool fIsProcessing;
pthread_t fChangingValuesThread;
pthread_t fIdleThread;
pthread_t fMainThread;
pthread_t fProcThread;



Loading…
Cancel
Save