Implement the CLAP render extension

This commit is contained in:
Robbert van der Helm
2022-10-10 16:08:26 +02:00
parent 0f7a5f8109
commit 0143d43c7e
8 changed files with 109 additions and 7 deletions
@@ -112,6 +112,11 @@ clap_plugin_proxy::clap_plugin_proxy(ClapPluginBridge& bridge,
.text_to_value = ext_params_text_to_value,
.flush = ext_params_flush,
}),
ext_render_vtable(clap_plugin_render_t{
.has_hard_realtime_requirement =
ext_render_has_hard_realtime_requirement,
.set = ext_render_set,
}),
ext_state_vtable(clap_plugin_state_t{
.save = ext_state_save,
.load = ext_state_load,
@@ -309,6 +314,9 @@ clap_plugin_proxy::plugin_get_extension(const struct clap_plugin* plugin,
} else if (self->supported_extensions_.supports_params &&
strcmp(id, CLAP_EXT_PARAMS) == 0) {
extension_ptr = &self->ext_params_vtable;
} else if (self->supported_extensions_.supports_render &&
strcmp(id, CLAP_EXT_RENDER) == 0) {
extension_ptr = &self->ext_render_vtable;
} else if (self->supported_extensions_.supports_state &&
strcmp(id, CLAP_EXT_STATE) == 0) {
extension_ptr = &self->ext_state_vtable;
@@ -732,6 +740,26 @@ clap_plugin_proxy::ext_params_flush(const clap_plugin_t* plugin,
response.out.write_back_outputs(*out);
}
bool CLAP_ABI clap_plugin_proxy::ext_render_has_hard_realtime_requirement(
const clap_plugin_t* plugin) {
assert(plugin && plugin->plugin_data);
auto self = static_cast<const clap_plugin_proxy*>(plugin->plugin_data);
return self->bridge_.send_main_thread_message(
clap::ext::render::plugin::HasHardRealtimeRequirement{
.instance_id = self->instance_id()});
}
bool CLAP_ABI clap_plugin_proxy::ext_render_set(const clap_plugin_t* plugin,
clap_plugin_render_mode mode) {
assert(plugin && plugin->plugin_data);
auto self = static_cast<const clap_plugin_proxy*>(plugin->plugin_data);
return self->bridge_.send_main_thread_message(
clap::ext::render::plugin::Set{.instance_id = self->instance_id(),
.mode = mode});
}
bool CLAP_ABI clap_plugin_proxy::ext_state_save(const clap_plugin_t* plugin,
const clap_ostream_t* stream) {
assert(plugin && plugin->plugin_data && stream);
@@ -26,6 +26,7 @@
#include <clap/ext/log.h>
#include <clap/ext/note-ports.h>
#include <clap/ext/params.h>
#include <clap/ext/render.h>
#include <clap/ext/state.h>
#include <clap/ext/tail.h>
#include <clap/ext/voice-info.h>
@@ -258,6 +259,11 @@ class clap_plugin_proxy {
const clap_input_events_t* in,
const clap_output_events_t* out);
static bool CLAP_ABI
ext_render_has_hard_realtime_requirement(const clap_plugin_t* plugin);
static bool CLAP_ABI ext_render_set(const clap_plugin_t* plugin,
clap_plugin_render_mode mode);
static bool CLAP_ABI ext_state_save(const clap_plugin_t* plugin,
const clap_ostream_t* stream);
static bool CLAP_ABI ext_state_load(const clap_plugin_t* plugin,
@@ -329,6 +335,7 @@ class clap_plugin_proxy {
const clap_plugin_latency_t ext_latency_vtable;
const clap_plugin_note_ports_t ext_note_ports_vtable;
const clap_plugin_params_t ext_params_vtable;
const clap_plugin_render_t ext_render_vtable;
const clap_plugin_state_t ext_state_vtable;
const clap_plugin_tail_t ext_tail_vtable;
const clap_plugin_voice_info_t ext_voice_info_vtable;