DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

commit ef64e046b060c6fdd2fa17d3cfcb74518946bc6e
parent 9b49fd363e67d4e7efbc54852cf0cf24312571ce
Author: falkTX <falktx@falktx.com>
Date:   Fri, 24 Sep 2021 20:25:44 +0100

Implement v3_process_context_requirements

Signed-off-by: falkTX <falktx@falktx.com>

Diffstat:
Mdistrho/src/DistrhoPluginVST3.cpp | 70+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 67 insertions(+), 3 deletions(-)

diff --git a/distrho/src/DistrhoPluginVST3.cpp b/distrho/src/DistrhoPluginVST3.cpp @@ -824,7 +824,6 @@ public: (fTimePosition.bbt.bar-1); fPlugin.setTimePosition(fTimePosition); - } #endif @@ -1388,6 +1387,63 @@ struct dpf_edit_controller : v3_edit_controller_cpp { }; // -------------------------------------------------------------------------------------------------------------------- +// dpf_process_context_requirements + +struct v3_process_context_requirements_cpp : v3_funknown { + v3_process_context_requirements req; +}; + +struct dpf_process_context_requirements : v3_process_context_requirements_cpp { + dpf_process_context_requirements() + { + static const uint8_t* kSupportedInterfaces[] = { + v3_funknown_iid, + v3_process_context_requirements_iid + }; + + // ------------------------------------------------------------------------------------------------------------ + // v3_funknown + + query_interface = []V3_API(void* self, const v3_tuid iid, void** iface) -> v3_result + { + d_stdout("dpf_process_context_requirements::query_interface => %p %s %p", self, tuid2str(iid), iface); + *iface = NULL; + DISTRHO_SAFE_ASSERT_RETURN(self != nullptr, V3_NO_INTERFACE); + + for (const uint8_t* interface_iid : kSupportedInterfaces) + { + if (v3_tuid_match(interface_iid, iid)) + { + *iface = self; + return V3_OK; + } + } + + return V3_NO_INTERFACE; + }; + + // this is used statically, so we don't have to care here + ref = []V3_API(void*) -> uint32_t { return 1; }; + unref = []V3_API(void*) -> uint32_t { return 0; }; + + // ------------------------------------------------------------------------------------------------------------ + // v3_process_context_requirements + + req.get_process_context_requirements = []V3_API(void*) -> uint32_t + { + return 0x0 + |V3_PROCESS_CTX_NEED_CONTINUOUS_TIME // V3_PROCESS_CTX_CONT_TIME_VALID + |V3_PROCESS_CTX_NEED_PROJECT_TIME // V3_PROCESS_CTX_PROJECT_TIME_VALID + |V3_PROCESS_CTX_NEED_TEMPO // V3_PROCESS_CTX_TEMPO_VALID + |V3_PROCESS_CTX_NEED_TIME_SIG // V3_PROCESS_CTX_TIME_SIG_VALID + |V3_PROCESS_CTX_NEED_TRANSPORT_STATE; // V3_PROCESS_CTX_PLAYING + }; + } + + DISTRHO_PREVENT_HEAP_ALLOCATION +}; + +// -------------------------------------------------------------------------------------------------------------------- // dpf_audio_processor struct v3_audio_processor_cpp : v3_funknown { @@ -1404,7 +1460,7 @@ struct dpf_audio_processor : v3_audio_processor_cpp { self(s), vst3(v) { - static const uint8_t* kSupportedInterfaces[] = { + static const uint8_t* kSupportedInterfacesBase[] = { v3_funknown_iid, v3_audio_processor_iid }; @@ -1418,7 +1474,7 @@ struct dpf_audio_processor : v3_audio_processor_cpp { *iface = NULL; DISTRHO_SAFE_ASSERT_RETURN(self != nullptr, V3_NO_INTERFACE); - for (const uint8_t* interface_iid : kSupportedInterfaces) + for (const uint8_t* interface_iid : kSupportedInterfacesBase) { if (v3_tuid_match(interface_iid, iid)) { @@ -1427,6 +1483,14 @@ struct dpf_audio_processor : v3_audio_processor_cpp { } } + if (v3_tuid_match(v3_process_context_requirements_iid, iid)) + { + static dpf_process_context_requirements context_req; + static dpf_process_context_requirements* context_req_ptr = &context_req;; + *iface = &context_req_ptr; + return V3_OK; + } + return V3_NO_INTERFACE; };