commit ed3be596a1d3cfcb87317c7f6a5ecb0b6b698ad7
parent a5e132b46544e52e6a80a16eaaccfb7425c838a9
Author: falkTX <falktx@falktx.com>
Date: Mon, 5 Sep 2022 18:13:40 +0100
Sync VST2 and VST3 code a bit, fixup transport requirements
Diffstat:
2 files changed, 35 insertions(+), 44 deletions(-)
diff --git a/distrho/src/DistrhoPluginVST2.cpp b/distrho/src/DistrhoPluginVST2.cpp
@@ -1003,7 +1003,7 @@ public:
else
fTimePosition.bbt.beatsPerMinute = 120.0;
- if (vstTimeInfo->flags & (kVstPpqPosValid|kVstTimeSigValid))
+ if ((vstTimeInfo->flags & (kVstPpqPosValid|kVstTimeSigValid)) == (kVstPpqPosValid|kVstTimeSigValid))
{
const double ppqPos = std::abs(vstTimeInfo->ppqPos);
const int ppqPerBar = vstTimeInfo->timeSigNumerator * 4 / vstTimeInfo->timeSigDenominator;
diff --git a/distrho/src/DistrhoPluginVST3.cpp b/distrho/src/DistrhoPluginVST3.cpp
@@ -1392,7 +1392,7 @@ public:
else
fTimePosition.bbt.beatsPerMinute = 120.0;
- if (ctx->state & (V3_PROCESS_CTX_PROJECT_TIME_VALID|V3_PROCESS_CTX_TIME_SIG_VALID))
+ if ((ctx->state & (V3_PROCESS_CTX_PROJECT_TIME_VALID|V3_PROCESS_CTX_TIME_SIG_VALID)) == (V3_PROCESS_CTX_PROJECT_TIME_VALID|V3_PROCESS_CTX_TIME_SIG_VALID))
{
const double ppqPos = std::abs(ctx->project_time_quarters);
const int ppqPerBar = ctx->time_sig_numerator * 4 / ctx->time_sig_denom;
@@ -4526,26 +4526,7 @@ struct dpf_component : v3_component_cpp {
// --------------------------------------------------------------------------------------------------------------------
// Dummy plugin to get data from
-static const PluginExporter& _getPluginInfo()
-{
- d_nextBufferSize = 1024;
- d_nextSampleRate = 44100.0;
- d_nextPluginIsDummy = true;
- d_nextCanRequestParameterValueChanges = true;
- static const PluginExporter gPluginInfo(nullptr, nullptr, nullptr, nullptr);
- d_nextBufferSize = 0;
- d_nextSampleRate = 0.0;
- d_nextPluginIsDummy = false;
- d_nextCanRequestParameterValueChanges = false;
-
- return gPluginInfo;
-}
-
-static const PluginExporter& getPluginInfo()
-{
- static const PluginExporter& info(_getPluginInfo());
- return info;
-}
+static ScopedPointer<PluginExporter> sPlugin;
static const char* getPluginCategories()
{
@@ -4554,20 +4535,11 @@ static const char* getPluginCategories()
if (firstInit)
{
-#ifdef DISTRHO_PLUGIN_VST3_CATEGORIES
+ #ifdef DISTRHO_PLUGIN_VST3_CATEGORIES
categories = DISTRHO_PLUGIN_VST3_CATEGORIES;
-#elif DISTRHO_PLUGIN_IS_SYNTH
+ #elif DISTRHO_PLUGIN_IS_SYNTH
categories = "Instrument";
-#endif
-#if (DISTRHO_PLUGIN_NUM_INPUTS == 0 || DISTRHO_PLUGIN_NUM_INPUTS == 1) && DISTRHO_PLUGIN_NUM_OUTPUTS == 1
- if (categories.isNotEmpty())
- categories += "|";
- categories += "Mono";
-#elif (DISTRHO_PLUGIN_NUM_INPUTS == 0 || DISTRHO_PLUGIN_NUM_INPUTS == 2) && DISTRHO_PLUGIN_NUM_OUTPUTS == 2
- if (categories.isNotEmpty())
- categories += "|";
- categories += "Stereo";
-#endif
+ #endif
firstInit = false;
}
@@ -4580,7 +4552,7 @@ static const char* getPluginVersion()
if (version.isEmpty())
{
- const uint32_t versionNum = getPluginInfo().getVersion();
+ const uint32_t versionNum = sPlugin->getVersion();
char versionBuf[64];
std::snprintf(versionBuf, sizeof(versionBuf)-1, "%d.%d.%d",
@@ -4726,8 +4698,8 @@ struct dpf_factory : v3_plugin_factory_cpp {
std::memset(info, 0, sizeof(*info));
info->flags = 0x10; // unicode
- DISTRHO_NAMESPACE::strncpy(info->vendor, getPluginInfo().getMaker(), ARRAY_SIZE(info->vendor));
- DISTRHO_NAMESPACE::strncpy(info->url, getPluginInfo().getHomePage(), ARRAY_SIZE(info->url));
+ DISTRHO_NAMESPACE::strncpy(info->vendor, sPlugin->getMaker(), ARRAY_SIZE(info->vendor));
+ DISTRHO_NAMESPACE::strncpy(info->url, sPlugin->getHomePage(), ARRAY_SIZE(info->url));
// DISTRHO_NAMESPACE::strncpy(info->email, "", ARRAY_SIZE(info->email)); // TODO
return V3_OK;
}
@@ -4749,7 +4721,7 @@ struct dpf_factory : v3_plugin_factory_cpp {
DISTRHO_SAFE_ASSERT_RETURN(idx <= 2, V3_INVALID_ARG);
info->cardinality = 0x7FFFFFFF;
- DISTRHO_NAMESPACE::strncpy(info->name, getPluginInfo().getName(), ARRAY_SIZE(info->name));
+ DISTRHO_NAMESPACE::strncpy(info->name, sPlugin->getName(), ARRAY_SIZE(info->name));
if (idx == 0)
{
@@ -4818,8 +4790,8 @@ struct dpf_factory : v3_plugin_factory_cpp {
info->class_flags = V3_DISTRIBUTABLE;
#endif
DISTRHO_NAMESPACE::strncpy(info->sub_categories, getPluginCategories(), ARRAY_SIZE(info->sub_categories));
- DISTRHO_NAMESPACE::strncpy(info->name, getPluginInfo().getName(), ARRAY_SIZE(info->name));
- DISTRHO_NAMESPACE::strncpy(info->vendor, getPluginInfo().getMaker(), ARRAY_SIZE(info->vendor));
+ DISTRHO_NAMESPACE::strncpy(info->name, sPlugin->getName(), ARRAY_SIZE(info->name));
+ DISTRHO_NAMESPACE::strncpy(info->vendor, sPlugin->getMaker(), ARRAY_SIZE(info->vendor));
DISTRHO_NAMESPACE::strncpy(info->version, getPluginVersion(), ARRAY_SIZE(info->version));
DISTRHO_NAMESPACE::strncpy(info->sdk_version, "Travesty 3.7.4", ARRAY_SIZE(info->sdk_version));
@@ -4851,8 +4823,8 @@ struct dpf_factory : v3_plugin_factory_cpp {
info->class_flags = V3_DISTRIBUTABLE;
#endif
DISTRHO_NAMESPACE::strncpy(info->sub_categories, getPluginCategories(), ARRAY_SIZE(info->sub_categories));
- DISTRHO_NAMESPACE::strncpy_utf16(info->name, getPluginInfo().getName(), ARRAY_SIZE(info->name));
- DISTRHO_NAMESPACE::strncpy_utf16(info->vendor, getPluginInfo().getMaker(), ARRAY_SIZE(info->vendor));
+ DISTRHO_NAMESPACE::strncpy_utf16(info->name, sPlugin->getName(), ARRAY_SIZE(info->name));
+ DISTRHO_NAMESPACE::strncpy_utf16(info->vendor, sPlugin->getMaker(), ARRAY_SIZE(info->vendor));
DISTRHO_NAMESPACE::strncpy_utf16(info->version, getPluginVersion(), ARRAY_SIZE(info->version));
DISTRHO_NAMESPACE::strncpy_utf16(info->sdk_version, "Travesty 3.7.4", ARRAY_SIZE(info->sdk_version));
@@ -4951,8 +4923,26 @@ bool ENTRYFNNAME(ENTRYFNNAMEARGS)
}
// init dummy plugin and set uniqueId
- dpf_tuid_class[2] = dpf_tuid_component[2] = dpf_tuid_controller[2]
- = dpf_tuid_processor[2] = dpf_tuid_view[2] = getPluginInfo().getUniqueId();
+ if (sPlugin == nullptr)
+ {
+ // set valid but dummy values
+ d_nextBufferSize = 512;
+ d_nextSampleRate = 44100.0;
+ d_nextPluginIsDummy = true;
+ d_nextCanRequestParameterValueChanges = true;
+
+ // Create dummy plugin to get data from
+ sPlugin = new PluginExporter(nullptr, nullptr, nullptr, nullptr);
+
+ // unset
+ d_nextBufferSize = 0;
+ d_nextSampleRate = 0.0;
+ d_nextPluginIsDummy = false;
+ d_nextCanRequestParameterValueChanges = false;
+
+ dpf_tuid_class[2] = dpf_tuid_component[2] = dpf_tuid_controller[2]
+ = dpf_tuid_processor[2] = dpf_tuid_view[2] = sPlugin->getUniqueId();
+ }
return true;
}
@@ -4962,6 +4952,7 @@ bool EXITFNNAME(void);
bool EXITFNNAME(void)
{
+ sPlugin = nullptr;
return true;
}