commit 8c610c4d8d98c33eaa8982ea5630ff75c6baa8c1
parent f01ef875c33aeff10bc23e86666c14f2638a742b
Author: Alexandre BIQUE <bique.alexandre@gmail.com>
Date: Fri, 27 Aug 2021 17:38:54 +0200
Fix host's engine restart
Diffstat:
3 files changed, 23 insertions(+), 12 deletions(-)
diff --git a/examples/glue/clap-plugin.cc b/examples/glue/clap-plugin.cc
@@ -102,6 +102,8 @@ namespace clap {
}
self.deactivate();
+ self.isActive_ = false;
+ self.sampleRate_ = 0;
}
bool Plugin::clapStartProcessing(const clap_plugin *plugin) noexcept {
diff --git a/examples/host/engine.cc b/examples/host/engine.cc
@@ -94,6 +94,8 @@ void Engine::start() {
}
void Engine::stop() {
+ pluginHost_->deactivate();
+
if (state_ == kStateRunning)
state_ = kStateStopping;
@@ -107,6 +109,8 @@ void Engine::stop() {
Pm_Close(midi_);
midi_ = nullptr;
}
+
+ state_ = kStateStopped;
}
int Engine::audioCallback(const void * input,
diff --git a/examples/host/plugin-host.cc b/examples/host/plugin-host.cc
@@ -1,4 +1,4 @@
-#include <exception>
+#include <exception>
#include <iostream>
#include <memory>
#include <sstream>
@@ -186,17 +186,7 @@ void PluginHost::unload() {
if (pluginGui_)
pluginGui_->destroy(plugin_);
- if (isPluginActive()) {
- if (isPluginProcessing()) {
- plugin_->stop_processing(plugin_);
- setPluginState(ActiveAndReadyToDeactivate);
- } else if (isPluginSleeping()) {
- setPluginState(ActiveAndReadyToDeactivate);
- }
-
- plugin_->deactivate(plugin_);
- setPluginState(Inactive);
- }
+ deactivate();
plugin_->destroy(plugin_);
plugin_ = nullptr;
@@ -226,6 +216,21 @@ void PluginHost::activate(int32_t sample_rate) {
setPluginState(InactiveWithError);
}
+void PluginHost::deactivate() {
+ if (!isPluginActive())
+ return;
+
+ if (isPluginProcessing()) {
+ plugin_->stop_processing(plugin_);
+ setPluginState(ActiveAndReadyToDeactivate);
+ } else if (isPluginSleeping()) {
+ setPluginState(ActiveAndReadyToDeactivate);
+ }
+
+ plugin_->deactivate(plugin_);
+ setPluginState(Inactive);
+}
+
void PluginHost::setPorts(int numInputs, float **inputs, int numOutputs, float **outputs) {
audioIn_.channel_count = numInputs;
audioIn_.data32 = inputs;