clap

CLAP Audio Plugin API
Log | Files | Refs | README | LICENSE

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:
Mexamples/glue/clap-plugin.cc | 2++
Mexamples/host/engine.cc | 4++++
Mexamples/host/plugin-host.cc | 29+++++++++++++++++------------
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;