DPF

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

commit eafa8349a9dd745a3739a78166606801c17240d2
parent 2ed2eab14b11cdc20c5b83b526e347e96ab4e138
Author: falkTX <falktx@gmail.com>
Date:   Sun, 29 Nov 2015 16:32:04 +0100

Add new metadata fields; Export more LV2 stuff, more MOD support

Diffstat:
Mdistrho/DistrhoPlugin.hpp | 19++++++++++++++++---
Mdistrho/DistrhoUtils.hpp | 9+++++++++
Mdistrho/src/DistrhoPluginInternal.hpp | 14++++++++++++++
Mdistrho/src/DistrhoPluginLV2export.cpp | 73++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
Mutils/lv2-ttl-generator/GNUmakefile | 4++--
5 files changed, 109 insertions(+), 10 deletions(-)

diff --git a/distrho/DistrhoPlugin.hpp b/distrho/DistrhoPlugin.hpp @@ -550,25 +550,38 @@ protected: virtual const char* getLabel() const = 0; /** + Get an extensive comment/description about the plugin.@n + Optional, returns nothing by default. + */ + virtual const char* getDescription() const { return ""; } + + /** Get the plugin author/maker. */ virtual const char* getMaker() const = 0; /** - Get the plugin license name (a single line of text).@n + Get the plugin homepage.@n + Optional, returns nothing by default. + */ + virtual const char* getHomePage() const { return ""; } + + /** + Get the plugin license (a single line of text or a URL).@n For commercial plugins this should return some short copyright information. */ virtual const char* getLicense() const = 0; /** - Get the plugin version, in hexadecimal.@n - TODO format to be defined + Get the plugin version, in hexadecimal. + @see d_version() */ virtual uint32_t getVersion() const = 0; /** Get the plugin unique Id.@n This value is used by LADSPA, DSSI and VST plugin formats. + @see d_cconst() */ virtual int64_t getUniqueId() const = 0; diff --git a/distrho/DistrhoUtils.hpp b/distrho/DistrhoUtils.hpp @@ -63,6 +63,15 @@ int64_t d_cconst(const uint8_t a, const uint8_t b, const uint8_t c, const uint8_ } /* + * Return an hexadecimal representation of a MAJ.MIN.MICRO version number. + */ +static inline +uint32_t d_version(const uint8_t major, const uint8_t minor, const uint8_t micro) noexcept +{ + return (major << 16) | (minor << 8) | (micro << 0); +} + +/* * Dummy function. */ static inline diff --git a/distrho/src/DistrhoPluginInternal.hpp b/distrho/src/DistrhoPluginInternal.hpp @@ -196,6 +196,13 @@ public: return fPlugin->getLabel(); } + const char* getDescription() const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr, ""); + + return fPlugin->getDescription(); + } + const char* getMaker() const noexcept { DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr, ""); @@ -203,6 +210,13 @@ public: return fPlugin->getMaker(); } + const char* getHomePage() const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr, ""); + + return fPlugin->getHomePage(); + } + const char* getLicense() const noexcept { DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr, ""); diff --git a/distrho/src/DistrhoPluginLV2export.cpp b/distrho/src/DistrhoPluginLV2export.cpp @@ -195,6 +195,10 @@ void lv2_generate_ttl(const char* const basename) pluginString += "@prefix doap: <http://usefulinc.com/ns/doap#> .\n"; pluginString += "@prefix foaf: <http://xmlns.com/foaf/0.1/> .\n"; pluginString += "@prefix lv2: <" LV2_CORE_PREFIX "> .\n"; +#ifdef DISTRHO_PLUGIN_BRAND + pluginString += "@prefix mod: <http://moddevices.com/ns/mod#> .\n"; +#endif + pluginString += "@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\n"; pluginString += "@prefix rsz: <" LV2_RESIZE_PORT_PREFIX "> .\n"; #if DISTRHO_PLUGIN_HAS_UI pluginString += "@prefix ui: <" LV2_UI_PREFIX "> .\n"; @@ -266,7 +270,7 @@ void lv2_generate_ttl(const char* const basename) pluginString += " a lv2:InputPort, lv2:AudioPort ;\n"; pluginString += " lv2:index " + String(portIndex) + " ;\n"; - pluginString += " lv2:symbol \"" + port.symbol + "\" ;\n"; + pluginString += " lv2:symbol \"lv2_" + port.symbol + "\" ;\n"; pluginString += " lv2:name \"" + port.name + "\" ;\n"; if (port.hints & kAudioPortIsSidechain) @@ -296,7 +300,7 @@ void lv2_generate_ttl(const char* const basename) pluginString += " a lv2:OutputPort, lv2:AudioPort ;\n"; pluginString += " lv2:index " + String(portIndex) + " ;\n"; - pluginString += " lv2:symbol \"" + port.symbol + "\" ;\n"; + pluginString += " lv2:symbol \"lv2_" + port.symbol + "\" ;\n"; pluginString += " lv2:name \"" + port.name + "\" ;\n"; if (port.hints & kAudioPortIsSidechain) @@ -426,6 +430,14 @@ void lv2_generate_ttl(const char* const basename) { pluginString += " unit:unit unit:mhz ;\n"; } + else if (unit == "ms") + { + pluginString += " unit:unit unit:ms ;\n"; + } + else if (unit == "s") + { + pluginString += " unit:unit unit:s ;\n"; + } else if (unit == "%") { pluginString += " unit:unit unit:pc ;\n"; @@ -433,8 +445,7 @@ void lv2_generate_ttl(const char* const basename) else { pluginString += " unit:unit [\n"; - pluginString += " a unit:Unit ;\n"; - pluginString += " unit:name \"" + unit + "\" ;\n"; + pluginString += " rdfs:label \"" + unit + "\" ;\n"; pluginString += " unit:symbol \"" + unit + "\" ;\n"; pluginString += " unit:render \"%f " + unit + "\" ;\n"; pluginString += " ] ;\n"; @@ -466,8 +477,60 @@ void lv2_generate_ttl(const char* const basename) } } + // comment + { + const String comment(plugin.getDescription()); + + if (comment.isNotEmpty()) + pluginString += " rdfs:comment \"\"\"\n" + comment + "\n\"\"\" ;\n\n"; + } + +#ifdef DISTRHO_PLUGIN_BRAND + // MOD + pluginString += " mod:brand \"" DISTRHO_PLUGIN_BRAND "\" ;\n"; + pluginString += " mod:label \"" + String(plugin.getName()) + "\" ;\n\n"; +#endif + + // name pluginString += " doap:name \"" + String(plugin.getName()) + "\" ;\n"; - pluginString += " doap:maintainer [ foaf:name \"" + String(plugin.getMaker()) + "\" ] .\n"; + + // license + { + const String license(plugin.getLicense()); + + if (license.contains("://")) + pluginString += " doap:license <" + license + "> ;\n\n"; + else + pluginString += " doap:license \"" + license + "\" ;\n\n"; + } + + // developer + { + const String homepage(plugin.getHomePage()); + + pluginString += " doap:maintainer [\n"; + pluginString += " foaf:name \"" + String(plugin.getMaker()) + "\" ;\n"; + + if (homepage.isNotEmpty()) + pluginString += " foaf:homepage <" + homepage + "> ;\n"; + + pluginString += " ] ;\n\n"; + } + + { + const uint32_t version(plugin.getVersion()); + + const uint32_t majorVersion = (version & 0xFF0000) >> 16; + const uint32_t microVersion = (version & 0x00FF00) >> 8; + /* */ uint32_t minorVersion = (version & 0x0000FF) >> 0; + + // NOTE: LV2 ignores 'major' version and says 0 for minor is pre-release/unstable. + if (majorVersion > 0) + minorVersion += 2; + + pluginString += " lv2:microVersion " + String(microVersion) + " ;\n"; + pluginString += " lv2:minorVersion " + String(minorVersion) + " .\n"; + } pluginFile << pluginString << std::endl; pluginFile.close(); diff --git a/utils/lv2-ttl-generator/GNUmakefile b/utils/lv2-ttl-generator/GNUmakefile @@ -9,10 +9,10 @@ build: ../lv2_ttl_generator endif ../lv2_ttl_generator: lv2_ttl_generator.c - $(CC) lv2_ttl_generator.c -o ../lv2_ttl_generator -ldl + $(CC) $< -o $@ -ldl ../lv2_ttl_generator.exe: lv2_ttl_generator.c - $(CC) lv2_ttl_generator.c -o ../lv2_ttl_generator.exe -static + $(CC) $< -o $@ -static touch ../lv2_ttl_generator clean: