DPF

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

commit a6f3835cab87df29651640cf54d86b20dbecf060
parent 3343e7d770c57ba8a5d3a737dfe0ae271c8219ea
Author: falkTX <falktx@falktx.com>
Date:   Fri, 24 Sep 2021 11:09:47 +0100

VST3: Use local static plugin for factory info, not global

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

Diffstat:
Mdistrho/src/DistrhoPluginVST3.cpp | 51+++++++++++++++++++++------------------------------
1 file changed, 21 insertions(+), 30 deletions(-)

diff --git a/distrho/src/DistrhoPluginVST3.cpp b/distrho/src/DistrhoPluginVST3.cpp @@ -1474,11 +1474,6 @@ struct dpf_component : v3_component_cpp { }; // -------------------------------------------------------------------------------------------------------------------- -// Dummy plugin to get data from - -static ScopedPointer<PluginExporter> gPluginInfo; - -// -------------------------------------------------------------------------------------------------------------------- // dpf_factory struct v3_plugin_factory_cpp : v3_funknown { @@ -1498,6 +1493,18 @@ struct dpf_factory : v3_plugin_factory_cpp { }; // ------------------------------------------------------------------------------------------------------------ + // Dummy plugin to get data from + + d_lastBufferSize = 512; + d_lastSampleRate = 44100.0; + static const PluginExporter gPluginInfo(nullptr, nullptr, nullptr); + d_lastBufferSize = 0; + d_lastSampleRate = 0.0; + + dpf_tuid_class[2] = dpf_tuid_component[2] = dpf_tuid_controller[2] + = dpf_tuid_processor[2] = dpf_tuid_view[2] = gPluginInfo.getUniqueId(); + + // ------------------------------------------------------------------------------------------------------------ // v3_funknown query_interface = []V3_API(void* self, const v3_tuid iid, void** iface) -> v3_result @@ -1537,8 +1544,8 @@ struct dpf_factory : v3_plugin_factory_cpp { v1.get_factory_info = []V3_API(void* self, struct v3_factory_info* const info) -> v3_result { d_stdout("dpf_factory::get_factory_info => %p %p", self, info); - DISTRHO_NAMESPACE::strncpy(info->vendor, gPluginInfo->getMaker(), sizeof(info->vendor)); - DISTRHO_NAMESPACE::strncpy(info->url, gPluginInfo->getHomePage(), sizeof(info->url)); + DISTRHO_NAMESPACE::strncpy(info->vendor, gPluginInfo.getMaker(), sizeof(info->vendor)); + DISTRHO_NAMESPACE::strncpy(info->url, gPluginInfo.getHomePage(), sizeof(info->url)); DISTRHO_NAMESPACE::strncpy(info->email, "", sizeof(info->email)); // TODO return V3_OK; }; @@ -1557,7 +1564,7 @@ struct dpf_factory : v3_plugin_factory_cpp { memcpy(info->class_id, dpf_tuid_class, sizeof(v3_tuid)); info->cardinality = 0x7FFFFFFF; DISTRHO_NAMESPACE::strncpy(info->category, "Audio Module Class", sizeof(info->category)); - DISTRHO_NAMESPACE::strncpy(info->name, gPluginInfo->getName(), sizeof(info->name)); + DISTRHO_NAMESPACE::strncpy(info->name, gPluginInfo.getName(), sizeof(info->name)); return V3_OK; }; @@ -1585,12 +1592,12 @@ struct dpf_factory : v3_plugin_factory_cpp { memcpy(info->class_id, dpf_tuid_class, sizeof(v3_tuid)); info->cardinality = 0x7FFFFFFF; DISTRHO_NAMESPACE::strncpy(info->category, "Audio Module Class", sizeof(info->category)); - DISTRHO_NAMESPACE::strncpy(info->name, gPluginInfo->getName(), sizeof(info->name)); + DISTRHO_NAMESPACE::strncpy(info->name, gPluginInfo.getName(), sizeof(info->name)); info->class_flags = 0; DISTRHO_NAMESPACE::strncpy(info->sub_categories, "", sizeof(info->sub_categories)); // TODO - DISTRHO_NAMESPACE::strncpy(info->vendor, gPluginInfo->getMaker(), sizeof(info->vendor)); - std::snprintf(info->version, sizeof(info->version), "%u", gPluginInfo->getVersion()); // TODO + DISTRHO_NAMESPACE::strncpy(info->vendor, gPluginInfo.getMaker(), sizeof(info->vendor)); + std::snprintf(info->version, sizeof(info->version), "%u", gPluginInfo.getVersion()); // TODO DISTRHO_NAMESPACE::strncpy(info->sdk_version, "Travesty", sizeof(info->sdk_version)); // TESTING use "VST 3.7" ? return V3_OK; }; @@ -1604,12 +1611,12 @@ struct dpf_factory : v3_plugin_factory_cpp { memcpy(info->class_id, dpf_tuid_class, sizeof(v3_tuid)); info->cardinality = 0x7FFFFFFF; DISTRHO_NAMESPACE::strncpy(info->category, "Audio Module Class", sizeof(info->category)); - DISTRHO_NAMESPACE::strncpy_16from8(info->name, gPluginInfo->getName(), sizeof(info->name)); + DISTRHO_NAMESPACE::strncpy_16from8(info->name, gPluginInfo.getName(), sizeof(info->name)); info->class_flags = 0; DISTRHO_NAMESPACE::strncpy(info->sub_categories, "", sizeof(info->sub_categories)); // TODO - DISTRHO_NAMESPACE::strncpy_16from8(info->vendor, gPluginInfo->getMaker(), sizeof(info->vendor)); - // DISTRHO_NAMESPACE::snprintf16(info->version, sizeof(info->version)/sizeof(info->version[0]), "%u", gPluginInfo->getVersion()); // TODO + DISTRHO_NAMESPACE::strncpy_16from8(info->vendor, gPluginInfo.getMaker(), sizeof(info->vendor)); + // DISTRHO_NAMESPACE::snprintf16(info->version, sizeof(info->version)/sizeof(info->version[0]), "%u", gPluginInfo.getVersion()); // TODO DISTRHO_NAMESPACE::strncpy_16from8(info->sdk_version, "Travesty", sizeof(info->sdk_version)); // TESTING use "VST 3.7" ? return V3_OK; }; @@ -1657,20 +1664,6 @@ bool ENTRYFNNAME(void*); bool ENTRYFNNAME(void*) { - USE_NAMESPACE_DISTRHO; - - if (gPluginInfo == nullptr) - { - d_lastBufferSize = 512; - d_lastSampleRate = 44100.0; - gPluginInfo = new PluginExporter(nullptr, nullptr, nullptr); - d_lastBufferSize = 0; - d_lastSampleRate = 0.0; - - dpf_tuid_class[2] = dpf_tuid_component[2] = dpf_tuid_controller[2] - = dpf_tuid_processor[2] = dpf_tuid_view[2] = gPluginInfo->getUniqueId(); - } - return true; } @@ -1679,8 +1672,6 @@ bool EXITFNNAME(void); bool EXITFNNAME(void) { - USE_NAMESPACE_DISTRHO; - gPluginInfo = nullptr; return true; }