DPF

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

commit 6cbf08d58809b9c70e5283eb40975cf9efd0825b
parent 3b91a816a3971bc6d55c2b3456eb06a53eec1ff2
Author: falkTX <falktx@falktx.com>
Date:   Fri, 24 Sep 2021 13:07:06 +0100

Correctly offset VST3 streams

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

Diffstat:
Mdistrho/src/DistrhoPluginVST3.cpp | 60++++++++++++++++++++++++++++++++++++++++++++++++------------
1 file changed, 48 insertions(+), 12 deletions(-)

diff --git a/distrho/src/DistrhoPluginVST3.cpp b/distrho/src/DistrhoPluginVST3.cpp @@ -507,17 +507,17 @@ public: return V3_OK; } - v3_result setState(v3_bstream**) + v3_result setState(v3_bstream*, void*) { // TODO return V3_NOT_IMPLEMENTED; } - v3_result getState(v3_bstream**) + v3_result getState(v3_bstream*, void*) { // TODO return V3_NOT_IMPLEMENTED; - }; + } // ---------------------------------------------------------------------------------------------------------------- // v3_audio_processor interface calls @@ -630,23 +630,25 @@ public: // ---------------------------------------------------------------------------------------------------------------- // v3_edit_controller interface calls - v3_result setComponentState(v3_bstream*) +#if 0 + v3_result setComponentState(v3_bstream*, void*) { // TODO return V3_NOT_IMPLEMENTED; } - v3_result setState(v3_bstream*) + v3_result setState(v3_bstream*, void*) { // TODO return V3_NOT_IMPLEMENTED; } - v3_result getState(v3_bstream*) + v3_result getState(v3_bstream*, void*) { // TODO return V3_NOT_IMPLEMENTED; } +#endif int32_t getParameterCount() const noexcept { @@ -922,38 +924,62 @@ struct dpf_edit_controller : v3_edit_controller_cpp { controller.set_component_state = []V3_API(void* self, v3_bstream* stream) -> v3_result { - d_stdout("dpf_edit_controller::set_component_state => %p", self); + d_stdout("dpf_edit_controller::set_component_state => %p %p", self, stream); dpf_edit_controller* const controller = *(dpf_edit_controller**)self; DISTRHO_SAFE_ASSERT_RETURN(controller != nullptr, V3_NOT_INITIALISED); PluginVst3* const vst3 = controller->vst3; DISTRHO_SAFE_ASSERT_RETURN(vst3 != nullptr, V3_NOT_INITIALISED); - return vst3->setComponentState(stream); +#if 0 + // offset struct by sizeof(v3_funknown), because of differences between C and C++ + v3_bstream* const streamptr + = stream != nullptr ? (v3_bstream*)((uint8_t*)stream+sizeof(v3_funknown)) + : nullptr; + + return vst3->setComponentState(streamptr, stream); +#endif + return V3_NOT_IMPLEMENTED; }; controller.set_state = []V3_API(void* self, v3_bstream* stream) -> v3_result { - d_stdout("dpf_edit_controller::set_state => %p", self); + d_stdout("dpf_edit_controller::set_state => %p %p", self, stream); dpf_edit_controller* const controller = *(dpf_edit_controller**)self; DISTRHO_SAFE_ASSERT_RETURN(controller != nullptr, V3_NOT_INITIALISED); PluginVst3* const vst3 = controller->vst3; DISTRHO_SAFE_ASSERT_RETURN(vst3 != nullptr, V3_NOT_INITIALISED); +#if 0 + // offset struct by sizeof(v3_funknown), because of differences between C and C++ + v3_bstream* const streamptr + = stream != nullptr ? (v3_bstream*)((uint8_t*)stream+sizeof(v3_funknown)) + : nullptr; + return vst3->setState(stream); +#endif + return V3_NOT_IMPLEMENTED; }; controller.get_state = []V3_API(void* self, v3_bstream* stream) -> v3_result { - d_stdout("dpf_edit_controller::get_state => %p", self); + d_stdout("dpf_edit_controller::get_state => %p %p", self, stream); dpf_edit_controller* const controller = *(dpf_edit_controller**)self; DISTRHO_SAFE_ASSERT_RETURN(controller != nullptr, V3_NOT_INITIALISED); PluginVst3* const vst3 = controller->vst3; DISTRHO_SAFE_ASSERT_RETURN(vst3 != nullptr, V3_NOT_INITIALISED); +#if 0 + // offset struct by sizeof(v3_funknown), because of differences between C and C++ + v3_bstream* const streamptr + = stream != nullptr ? (v3_bstream*)((uint8_t*)stream+sizeof(v3_funknown)) + : nullptr; + return vst3->getState(stream); +#endif + return V3_NOT_IMPLEMENTED; }; controller.get_parameter_count = []V3_API(void* self) -> int32_t @@ -1503,7 +1529,12 @@ struct dpf_component : v3_component_cpp { PluginVst3* const vst3 = component->vst3; DISTRHO_SAFE_ASSERT_RETURN(vst3 != nullptr, V3_NOT_INITIALISED); - return vst3->setState(stream); + // offset struct by sizeof(v3_funknown), because of differences between C and C++ + v3_bstream* const streamptr + = stream != nullptr ? (v3_bstream*)((uint8_t*)*(stream)+sizeof(v3_funknown)) + : nullptr; + + return vst3->setState(streamptr, stream); }; comp.get_state = []V3_API(void* self, v3_bstream** stream) -> v3_result @@ -1515,7 +1546,12 @@ struct dpf_component : v3_component_cpp { PluginVst3* const vst3 = component->vst3; DISTRHO_SAFE_ASSERT_RETURN(vst3 != nullptr, V3_NOT_INITIALISED); - return vst3->getState(stream); + // offset struct by sizeof(v3_funknown), because of differences between C and C++ + v3_bstream* const streamptr + = stream != nullptr ? (v3_bstream*)((uint8_t*)*(stream)+sizeof(v3_funknown)) + : nullptr; + + return vst3->getState(streamptr, stream); }; } };