Browse Source

Correctly offset VST3 streams

Signed-off-by: falkTX <falktx@falktx.com>
pull/330/head
falkTX 3 years ago
parent
commit
6cbf08d588
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
1 changed files with 48 additions and 12 deletions
  1. +48
    -12
      distrho/src/DistrhoPluginVST3.cpp

+ 48
- 12
distrho/src/DistrhoPluginVST3.cpp View File

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


Loading…
Cancel
Save