| @@ -111,11 +111,9 @@ public: | |||||
| } | } | ||||
| if (m_activeBefore) | if (m_activeBefore) | ||||
| { | |||||
| effect->dispatcher(effect, effStopProcess, 0, 0, nullptr, 0.0f); | effect->dispatcher(effect, effStopProcess, 0, 0, nullptr, 0.0f); | ||||
| effect->dispatcher(effect, effMainsChanged, 0, 0, nullptr, 0.0f); | |||||
| } | |||||
| effect->dispatcher(effect, effMainsChanged, 0, 0, nullptr, 0.0f); | |||||
| effect->dispatcher(effect, effClose, 0, 0, nullptr, 0.0f); | effect->dispatcher(effect, effClose, 0, 0, nullptr, 0.0f); | ||||
| } | } | ||||
| } | } | ||||
| @@ -1016,9 +1014,6 @@ public: | |||||
| sendMidiAllNotesOff(); | sendMidiAllNotesOff(); | ||||
| effect->dispatcher(effect, effStopProcess, 0, 0, nullptr, 0.0f); | effect->dispatcher(effect, effStopProcess, 0, 0, nullptr, 0.0f); | ||||
| effect->dispatcher(effect, effMainsChanged, 0, 0, nullptr, 0.0f); | |||||
| effect->dispatcher(effect, effMainsChanged, 0, 1, nullptr, 0.0f); | |||||
| effect->dispatcher(effect, effStartProcess, 0, 0, nullptr, 0.0f); | effect->dispatcher(effect, effStartProcess, 0, 0, nullptr, 0.0f); | ||||
| postponeEvent(PluginPostEventParameterChange, PARAMETER_ACTIVE, 0, 0.0); | postponeEvent(PluginPostEventParameterChange, PARAMETER_ACTIVE, 0, 0.0); | ||||
| @@ -1194,7 +1189,6 @@ public: | |||||
| midiEventCount = MAX_MIDI_CHANNELS*2; | midiEventCount = MAX_MIDI_CHANNELS*2; | ||||
| } | } | ||||
| effect->dispatcher(effect, effMainsChanged, 0, 1, nullptr, 0.0f); | |||||
| effect->dispatcher(effect, effStartProcess, 0, 0, nullptr, 0.0f); | effect->dispatcher(effect, effStartProcess, 0, 0, nullptr, 0.0f); | ||||
| } | } | ||||
| @@ -1231,10 +1225,7 @@ public: | |||||
| else | else | ||||
| { | { | ||||
| if (m_activeBefore) | if (m_activeBefore) | ||||
| { | |||||
| effect->dispatcher(effect, effStopProcess, 0, 0, nullptr, 0.0f); | effect->dispatcher(effect, effStopProcess, 0, 0, nullptr, 0.0f); | ||||
| effect->dispatcher(effect, effMainsChanged, 0, 0, nullptr, 0.0f); | |||||
| } | |||||
| } | } | ||||
| CARLA_PROCESS_CONTINUE_CHECK; | CARLA_PROCESS_CONTINUE_CHECK; | ||||
| @@ -1356,10 +1347,7 @@ public: | |||||
| void bufferSizeChanged(uint32_t newBufferSize) | void bufferSizeChanged(uint32_t newBufferSize) | ||||
| { | { | ||||
| if (m_active) | if (m_active) | ||||
| { | |||||
| effect->dispatcher(effect, effStopProcess, 0, 0, nullptr, 0.0f); | effect->dispatcher(effect, effStopProcess, 0, 0, nullptr, 0.0f); | ||||
| effect->dispatcher(effect, effMainsChanged, 0, 0, nullptr, 0.0f); | |||||
| } | |||||
| #if ! VST_FORCE_DEPRECATED | #if ! VST_FORCE_DEPRECATED | ||||
| effect->dispatcher(effect, effSetBlockSizeAndSampleRate, 0, newBufferSize, nullptr, x_engine->getSampleRate()); | effect->dispatcher(effect, effSetBlockSizeAndSampleRate, 0, newBufferSize, nullptr, x_engine->getSampleRate()); | ||||
| @@ -1367,10 +1355,7 @@ public: | |||||
| effect->dispatcher(effect, effSetBlockSize, 0, newBufferSize, nullptr, 0.0f); | effect->dispatcher(effect, effSetBlockSize, 0, newBufferSize, nullptr, 0.0f); | ||||
| if (m_active) | if (m_active) | ||||
| { | |||||
| effect->dispatcher(effect, effMainsChanged, 0, 1, nullptr, 0.0f); | |||||
| effect->dispatcher(effect, effStartProcess, 0, 0, nullptr, 0.0f); | effect->dispatcher(effect, effStartProcess, 0, 0, nullptr, 0.0f); | ||||
| } | |||||
| } | } | ||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| @@ -1468,9 +1453,8 @@ public: | |||||
| return x_engine->getSampleRate(); | return x_engine->getSampleRate(); | ||||
| } | } | ||||
| const VstTimeInfo_R* handleAudioMasterGetTime() | |||||
| intptr_t handleAudioMasterGetTime() | |||||
| { | { | ||||
| static VstTimeInfo_R vstTimeInfo; | |||||
| memset(&vstTimeInfo, 0, sizeof(VstTimeInfo_R)); | memset(&vstTimeInfo, 0, sizeof(VstTimeInfo_R)); | ||||
| const CarlaTimeInfo* const timeInfo = x_engine->getTimeInfo(); | const CarlaTimeInfo* const timeInfo = x_engine->getTimeInfo(); | ||||
| @@ -1521,7 +1505,7 @@ public: | |||||
| vstTimeInfo.flags |= kVstTimeSigValid; | vstTimeInfo.flags |= kVstTimeSigValid; | ||||
| } | } | ||||
| return &vstTimeInfo; | |||||
| return (intptr_t)&vstTimeInfo; | |||||
| } | } | ||||
| intptr_t handleAudioMasterTempoAt() | intptr_t handleAudioMasterTempoAt() | ||||
| @@ -1557,18 +1541,12 @@ public: | |||||
| engineProcessUnlock(); | engineProcessUnlock(); | ||||
| if (m_active) | if (m_active) | ||||
| { | |||||
| effect->dispatcher(effect, effStopProcess, 0, 0, nullptr, 0.0f); | effect->dispatcher(effect, effStopProcess, 0, 0, nullptr, 0.0f); | ||||
| effect->dispatcher(effect, effMainsChanged, 0, 0, nullptr, 0.0f); | |||||
| } | |||||
| reload(); | reload(); | ||||
| if (m_active) | if (m_active) | ||||
| { | |||||
| effect->dispatcher(effect, effMainsChanged, 0, 1, nullptr, 0.0f); | |||||
| effect->dispatcher(effect, effStartProcess, 0, 0, nullptr, 0.0f); | effect->dispatcher(effect, effStartProcess, 0, 0, nullptr, 0.0f); | ||||
| } | |||||
| x_engine->callback(CALLBACK_RELOAD_ALL, m_id, 0, 0, 0.0); | x_engine->callback(CALLBACK_RELOAD_ALL, m_id, 0, 0, 0.0); | ||||
| @@ -1577,6 +1555,7 @@ public: | |||||
| void handleAudioMasterNeedIdle() | void handleAudioMasterNeedIdle() | ||||
| { | { | ||||
| qDebug("VstPlugin::handleAudioMasterNeedIdle()"); | |||||
| needIdle = true; | needIdle = true; | ||||
| } | } | ||||
| @@ -1594,7 +1573,7 @@ public: | |||||
| if (! isProcessing) | if (! isProcessing) | ||||
| { | { | ||||
| qCritical("VstPlugin:handleAudioMasterProcessEvents(%p) - received MIDI out events outside audio thread, ignoring", vstEvents); | |||||
| qCritical("VstPlugin::handleAudioMasterProcessEvents(%p) - received MIDI out events outside audio thread, ignoring", vstEvents); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -1841,26 +1820,24 @@ public: | |||||
| CARLA_ASSERT(self); | CARLA_ASSERT(self); | ||||
| if (self) | if (self) | ||||
| { | { | ||||
| ret = (intptr_t)self->handleAudioMasterGetTime(); | |||||
| ret = self->handleAudioMasterGetTime(); | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| qWarning("VstPlugin::hostCallback::audioMasterGetTime called without valid object"); | |||||
| static VstTimeInfo_R timeInfo; | |||||
| memset(&timeInfo, 0, sizeof(VstTimeInfo_R)); | |||||
| timeInfo.sampleRate = 44100.0; | |||||
| static VstTimeInfo_R vstTimeInfo; | |||||
| memset(&vstTimeInfo, 0, sizeof(VstTimeInfo_R)); | |||||
| vstTimeInfo.sampleRate = 44100.0; | |||||
| // Tempo | // Tempo | ||||
| timeInfo.tempo = 120.0; | |||||
| timeInfo.flags |= kVstTempoValid; | |||||
| vstTimeInfo.tempo = 120.0; | |||||
| vstTimeInfo.flags |= kVstTempoValid; | |||||
| // Time Signature | // Time Signature | ||||
| timeInfo.timeSigNumerator = 4; | |||||
| timeInfo.timeSigDenominator = 4; | |||||
| timeInfo.flags |= kVstTimeSigValid; | |||||
| vstTimeInfo.timeSigNumerator = 4; | |||||
| vstTimeInfo.timeSigDenominator = 4; | |||||
| vstTimeInfo.flags |= kVstTimeSigValid; | |||||
| ret = (intptr_t)&timeInfo; | |||||
| ret = (intptr_t)&vstTimeInfo; | |||||
| } | } | ||||
| break; | break; | ||||
| @@ -2206,6 +2183,8 @@ public: | |||||
| #endif | #endif | ||||
| effect->dispatcher(effect, effOpen, 0, 0, nullptr, 0.0f); | effect->dispatcher(effect, effOpen, 0, 0, nullptr, 0.0f); | ||||
| effect->dispatcher(effect, effMainsChanged, 0, 1, nullptr, 0.0f); | |||||
| #if ! VST_FORCE_DEPRECATED | #if ! VST_FORCE_DEPRECATED | ||||
| effect->dispatcher(effect, effSetBlockSizeAndSampleRate, 0, x_engine->getBufferSize(), nullptr, x_engine->getSampleRate()); | effect->dispatcher(effect, effSetBlockSizeAndSampleRate, 0, x_engine->getBufferSize(), nullptr, x_engine->getSampleRate()); | ||||
| #endif | #endif | ||||
| @@ -2286,7 +2265,8 @@ private: | |||||
| intptr_t reserved; | intptr_t reserved; | ||||
| VstEvent* data[MAX_MIDI_EVENTS*2]; | VstEvent* data[MAX_MIDI_EVENTS*2]; | ||||
| } events; | } events; | ||||
| VstMidiEvent midiEvents[MAX_MIDI_EVENTS*2]; | |||||
| VstMidiEvent midiEvents[MAX_MIDI_EVENTS*2]; | |||||
| VstTimeInfo_R vstTimeInfo; | |||||
| struct { | struct { | ||||
| GuiType type; | GuiType type; | ||||