DPF

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

commit c12d9def50ce2bfd4a2bab6c0eb4c8661f82ffe4
parent 17f09f33bc046202fd2546a452d9923bf2921596
Author: falkTX <falktx@falktx.com>
Date:   Sat,  2 Oct 2021 23:31:04 +0100

VST3: Correctly set plugin version information

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

Diffstat:
Mdistrho/src/DistrhoPluginVST3.cpp | 38++++++++++++++++++++++++++++----------
1 file changed, 28 insertions(+), 10 deletions(-)

diff --git a/distrho/src/DistrhoPluginVST3.cpp b/distrho/src/DistrhoPluginVST3.cpp @@ -61,10 +61,10 @@ namespace std { * - hide parameter outputs? * - hide program parameter? * - deal with parameter triggers + * - MIDI CC changes (need to store value to give to the host?) * - MIDI program changes * - MIDI sysex * - append MIDI input events in a sorted way - * - decode version number (0x010203 -> 1.2.3) * - bus arrangements * - optional audio buses, create dummy buffer of max_block_size length for them * - routing info, do we care? @@ -294,12 +294,6 @@ void snprintf_f32_utf16(int16_t* const dst, const float value, const size_t size return snprintf_utf16_t<float>(dst, value, "%f", size); } -static inline -void snprintf_u32_utf16(int16_t* const dst, const uint32_t value, const size_t size) -{ - return snprintf_utf16_t<uint32_t>(dst, value, "%u", size); -} - // -------------------------------------------------------------------------------------------------------------------- // handy way to create a utf16 string on the current function scope, used for message strings @@ -3493,6 +3487,26 @@ static const char* getPluginCategories() return categories.buffer(); } +static const char* getPluginVersion() +{ + static String version; + + if (version.isEmpty()) + { + const uint32_t versionNum = getPluginInfo().getVersion(); + + char versionBuf[64]; + snprintf(versionBuf, sizeof(versionBuf)-1, "%d.%d.%d", + (versionNum >> 16) & 0xff, + (versionNum >> 8) & 0xff, + (versionNum >> 0) & 0xff); + versionBuf[sizeof(versionBuf)-1] = '\0'; + version = versionBuf; + } + + return version.buffer(); +} + // -------------------------------------------------------------------------------------------------------------------- // dpf_factory @@ -3641,10 +3655,14 @@ struct dpf_factory : v3_plugin_factory_cpp { DISTRHO_NAMESPACE::strncpy(info->category, "Audio Module Class", ARRAY_SIZE(info->category)); DISTRHO_NAMESPACE::strncpy(info->name, getPluginInfo().getName(), ARRAY_SIZE(info->name)); +#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS info->class_flags = 0; +#else + info->class_flags = V3_DISTRIBUTABLE; +#endif DISTRHO_NAMESPACE::strncpy(info->sub_categories, getPluginCategories(), ARRAY_SIZE(info->sub_categories)); DISTRHO_NAMESPACE::strncpy(info->vendor, getPluginInfo().getMaker(), ARRAY_SIZE(info->vendor)); - DISTRHO_NAMESPACE::snprintf_u32(info->version, getPluginInfo().getVersion(), ARRAY_SIZE(info->version)); // FIXME + DISTRHO_NAMESPACE::strncpy(info->version, getPluginVersion(), ARRAY_SIZE(info->version)); DISTRHO_NAMESPACE::strncpy(info->sdk_version, "Travesty", ARRAY_SIZE(info->sdk_version)); return V3_OK; } @@ -3668,8 +3686,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->vendor, getPluginInfo().getMaker(), sizeof(info->vendor)); - DISTRHO_NAMESPACE::snprintf_u32_utf16(info->version, getPluginInfo().getVersion(), ARRAY_SIZE(info->version)); // FIXME + DISTRHO_NAMESPACE::strncpy_utf16(info->vendor, getPluginInfo().getMaker(), ARRAY_SIZE(info->vendor)); + DISTRHO_NAMESPACE::strncpy_utf16(info->version, getPluginVersion(), ARRAY_SIZE(info->version)); DISTRHO_NAMESPACE::strncpy_utf16(info->sdk_version, "Travesty", ARRAY_SIZE(info->sdk_version)); return V3_OK; }