clap

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

commit dc85082c5cc303902311124e836b2a74a1f9ac2d
parent 2f86f38d103213b12e579866c25b487e872de12f
Author: Alexandre BIQUE <bique.alexandre@gmail.com>
Date:   Sat, 22 May 2021 12:26:00 +0200

More work

Diffstat:
Mexamples/host/plugin-host.cc | 28++++++++++++++++++++++------
Mexamples/host/plugin-host.hh | 9++++++---
2 files changed, 28 insertions(+), 9 deletions(-)

diff --git a/examples/host/plugin-host.cc b/examples/host/plugin-host.cc @@ -27,15 +27,15 @@ PluginHost::PluginHost(Engine &engine) : QObject(&engine), engine_(engine) { host_.host_data = this; host_.clap_version = CLAP_VERSION; - host_.extension = PluginHost::clapHostExtension; + host_.extension = PluginHost::clapExtension; host_.name = "Clap Test Host"; host_.version = "0.0.1"; host_.vendor = "clap"; host_.url = "https://github.com/free-audio/clap"; - hostLog_.log = PluginHost::clapHostLog; + hostLog_.log = PluginHost::clapLog; - hostGui_.resize = PluginHost::clapHostGuiResize; + hostGui_.resize = PluginHost::clapGuiResize; hostThreadCheck_.is_main_thread = PluginHost::clapIsMainThread; hostThreadCheck_.is_audio_thread = PluginHost::clapIsAudioThread; @@ -56,6 +56,8 @@ PluginHost::PluginHost(Engine &engine) : QObject(&engine), engine_(engine) { hostQuickControls_.pages_changed = PluginHost::clapQuickControlsPagesChanged; hostQuickControls_.selected_page_changed = PluginHost::clapQuickControlsSelectedPageChanged; + hostState_.set_dirty = PluginHost::clapStateSetDirty; + initThreadPool(); } @@ -256,7 +258,7 @@ void PluginHost::setParentWindow(WId parentWindow) { Application::instance().mainWindow()->resizePluginView(width, height); } -void PluginHost::clapHostLog(clap_host *host, clap_log_severity severity, const char *msg) { +void PluginHost::clapLog(clap_host *host, clap_log_severity severity, const char *msg) { switch (severity) { case CLAP_LOG_DEBUG: qDebug() << msg; @@ -284,7 +286,7 @@ void PluginHost::initPluginExtension(const T *&ext, const char *id) { ext = static_cast<const T *>(plugin_->extension(plugin_, id)); } -const void *PluginHost::clapHostExtension(clap_host *host, const char *extension) { +const void *PluginHost::clapExtension(clap_host *host, const char *extension) { checkForMainThread(); PluginHost *h = static_cast<PluginHost *>(host->host_data); @@ -304,6 +306,8 @@ const void *PluginHost::clapHostExtension(clap_host *host, const char *extension return &h->hostParams_; if (!strcmp(extension, CLAP_EXT_QUICK_CONTROLS)) return &h->hostQuickControls_; + if (!strcmp(extension, CLAP_EXT_STATE)) + return &h->hostState_; return nullptr; } @@ -494,7 +498,7 @@ void PluginHost::eventLoopSetFdNotifierFlags(clap_fd fd, uint32_t flags) { it->second->err->setEnabled(false); } -bool PluginHost::clapHostGuiResize(clap_host *host, int32_t width, int32_t height) { +bool PluginHost::clapGuiResize(clap_host *host, int32_t width, int32_t height) { checkForMainThread(); PluginHost *h = static_cast<PluginHost *>(host->host_data); @@ -1035,6 +1039,18 @@ bool PluginHost::loadNativePluginPreset(const std::string &path) { return pluginPresetLoad_->load_from_file(plugin_, path.c_str()); } +void PluginHost::clapStateSetDirty(clap_host *host) { + checkForMainThread(); + + auto h = fromHost(host); + + if (!h->pluginState_ || !h->pluginState_->save || !h->pluginState_->restore) + throw std::logic_error("Plugin called clap_host_state.set_dirty() but the host does not " + "provide a complete clap_plugin_state interface."); + + // TODO set dirty +} + void PluginHost::setPluginState(PluginState state) { switch (state) { case Inactive: diff --git a/examples/host/plugin-host.hh b/examples/host/plugin-host.hh @@ -77,7 +77,7 @@ private: void initPluginExtension(const T *&ext, const char *id); /* clap host callbacks */ - static void clapHostLog(clap_host *host, clap_log_severity severity, const char *msg); + static void clapLog(clap_host *host, clap_log_severity severity, const char *msg); static bool clapIsMainThread(clap_host *host); static bool clapIsAudioThread(clap_host *host); @@ -114,10 +114,12 @@ private: static bool clapThreadPoolRequestExec(clap_host *host, uint32_t num_tasks); - static const void *clapHostExtension(clap_host *host, const char *extension); + static const void *clapExtension(clap_host *host, const char *extension); /* clap host gui callbacks */ - static bool clapHostGuiResize(clap_host *host, int32_t width, int32_t height); + static bool clapGuiResize(clap_host *host, int32_t width, int32_t height); + + static void clapStateSetDirty(clap_host *host); private: Engine &engine_; @@ -133,6 +135,7 @@ private: clap_host_event_loop hostEventLoop_; clap_host_thread_check hostThreadCheck_; clap_host_thread_pool hostThreadPool_; + clap_host_state hostState_; const struct clap_plugin_entry * pluginEntry_ = nullptr; clap_plugin * plugin_ = nullptr;