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:
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);
};
}
};