Add stubs for plugin side audio ports extension

This commit is contained in:
Robbert van der Helm
2022-09-12 17:03:12 +02:00
parent 66350b7ec8
commit e39a43c38c
2 changed files with 46 additions and 4 deletions
+33 -4
View File
@@ -40,6 +40,10 @@ clap_plugin_proxy::clap_plugin_proxy(ClapPluginBridge& bridge,
.get_extension = plugin_get_extension, .get_extension = plugin_get_extension,
.on_main_thread = plugin_on_main_thread, .on_main_thread = plugin_on_main_thread,
}), }),
ext_audio_ports_vtable(clap_plugin_audio_ports_t{
.count = ext_audio_ports_count,
.get = ext_audio_ports_get,
}),
// These function objects are relatively large, and we probably won't be // These function objects are relatively large, and we probably won't be
// getting that many of them // getting that many of them
pending_callbacks_(128) {} pending_callbacks_(128) {}
@@ -146,15 +150,18 @@ clap_plugin_proxy::plugin_process(const struct clap_plugin* plugin,
const void* CLAP_ABI const void* CLAP_ABI
clap_plugin_proxy::plugin_get_extension(const struct clap_plugin* plugin, clap_plugin_proxy::plugin_get_extension(const struct clap_plugin* plugin,
const char* id) { const char* id) {
assert(plugin && plugin->plugin_data); assert(plugin && plugin->plugin_data && id);
auto self = static_cast<const clap_plugin_proxy*>(plugin->plugin_data); auto self = static_cast<const clap_plugin_proxy*>(plugin->plugin_data);
// TODO: When implementing the GUI option, add a `clap_no_scaling` option to // TODO: When implementing the GUI option, add a `clap_no_scaling` option to
// disable HiDPI scaling just like we have for VST3. Or rename the // disable HiDPI scaling just like we have for VST3. Or rename the
// existing one. // existing one.
if (self->supported_extensions_.supports_audio_ports &&
// TODO: Implement strcmp(id, CLAP_EXT_AUDIO_PORTS) == 0) {
return nullptr; return &self->ext_audio_ports_vtable;
} else {
return nullptr;
}
} }
void CLAP_ABI void CLAP_ABI
@@ -169,3 +176,25 @@ clap_plugin_proxy::plugin_on_main_thread(const struct clap_plugin* plugin) {
callback(); callback();
} }
} }
uint32_t CLAP_ABI
clap_plugin_proxy::ext_audio_ports_count(const clap_plugin_t* plugin,
bool is_input) {
assert(plugin && plugin->plugin_data);
auto self = static_cast<const clap_plugin_proxy*>(plugin->plugin_data);
// TODO: Implement
return 0;
}
bool CLAP_ABI
clap_plugin_proxy::ext_audio_ports_get(const clap_plugin_t* plugin,
uint32_t index,
bool is_input,
clap_audio_port_info_t* info) {
assert(plugin && plugin->plugin_data && info);
auto self = static_cast<const clap_plugin_proxy*>(plugin->plugin_data);
// TODO: Implement
return false;
}
@@ -19,6 +19,7 @@
#include <future> #include <future>
#include <vector> #include <vector>
#include <clap/ext/audio-ports.h>
#include <clap/plugin.h> #include <clap/plugin.h>
#include <rigtorp/MPMCQueue.h> #include <rigtorp/MPMCQueue.h>
#include <function2/function2.hpp> #include <function2/function2.hpp>
@@ -93,6 +94,13 @@ class clap_plugin_proxy {
static void CLAP_ABI static void CLAP_ABI
plugin_on_main_thread(const struct clap_plugin* plugin); plugin_on_main_thread(const struct clap_plugin* plugin);
static uint32_t CLAP_ABI ext_audio_ports_count(const clap_plugin_t* plugin,
bool is_input);
static bool CLAP_ABI ext_audio_ports_get(const clap_plugin_t* plugin,
uint32_t index,
bool is_input,
clap_audio_port_info_t* info);
/** /**
* Asynchronously run a function on the host's main thread, returning the * Asynchronously run a function on the host's main thread, returning the
* result as a future. * result as a future.
@@ -139,6 +147,11 @@ class clap_plugin_proxy {
*/ */
const clap_plugin_t plugin_vtable_; const clap_plugin_t plugin_vtable_;
// Extensions also have vtables. Whether or not we expose these to the host
// depends on whether the plugin supported this extension when we called
// `clap_plugin::init()`.
const clap_plugin_audio_ports ext_audio_ports_vtable;
/** /**
* The extensions supported by the bridged plugin. Set after a successful * The extensions supported by the bridged plugin. Set after a successful
* `clap_plugin::init()` call. We'll allow the host to query these same * `clap_plugin::init()` call. We'll allow the host to query these same