Add plugin version and parameter count to VST user presets
authorChristopher Arndt <chris@chrisarndt.de>
Sat, 20 Oct 2018 21:48:21 +0000 (23:48 +0200)
committerRobin Gareus <robin@gareus.org>
Sat, 20 Oct 2018 23:08:09 +0000 (01:08 +0200)
Signed-off-by: Christopher Arndt <chris@chrisarndt.de>
libs/ardour/ardour/vestige/vestige.h
libs/ardour/ardour/vst_plugin.h
libs/ardour/vst_plugin.cc

index 9e588452ec657fdce97c1592d871bc21ec1c5959..41e78f7a05d939caa43c45cd5f824a338713a2e6 100644 (file)
@@ -308,8 +308,8 @@ struct _AEffect
        void *user;
        // Id 48-4b
        int32_t uniqueID;
-       // Don't know 4c-4f
-       char unknown1[4];
+       // Version 4c-4f
+       int32_t version;
        // processReplacing 50-53
        void (* processReplacing) (struct _AEffect *, float **, float **, int);
 };
index a696af2afd0c50e31193ba8e3790b6b0d60934a1..e0d369332cb0ad88116595e526847463bcc22524 100644 (file)
@@ -81,8 +81,9 @@ public:
        const char * label () const;
        const char * name () const;
        const char * maker () const;
+       int32_t version () const;
        uint32_t parameter_count () const;
-        void print_parameter (uint32_t, char*, uint32_t len) const;
+       void print_parameter (uint32_t, char*, uint32_t len) const;
 
        bool has_editor () const;
 
index 6cb412db39961632f5b3fde6ea00ec93c6cfcca9..9832b81b720d69367345e06e6d3b50f945e107a9 100644 (file)
@@ -540,22 +540,28 @@ VSTPlugin::do_save_preset (string name)
        sha1_result_hash (&s, hash);
 
        string const uri = string_compose (X_("VST:%1:x%2"), unique_id (), hash);
+       string const str_ver = std::to_string (version ());
+       string const num_params = std::to_string (parameter_count ());
 
        if (_plugin->flags & 32 /* effFlagsProgramsChunks */) {
-
                p = new XMLNode (X_("ChunkPreset"));
-               p->set_property (X_("uri"), uri);
-               p->set_property (X_("label"), name);
+       } else {
+               p = new XMLNode (X_("Preset"));
+       }
+
+       p->set_property (X_("uri"), uri);
+       p->set_property (X_("version"), str_ver);
+       p->set_property (X_("label"), name);
+       p->set_property (X_("numParams"), num_params);
+
+       if (_plugin->flags & 32) {
+
                gchar* data = get_chunk (true);
                p->add_content (string (data));
                g_free (data);
 
        } else {
 
-               p = new XMLNode (X_("Preset"));
-               p->set_property (X_("uri"), uri);
-               p->set_property (X_("label"), name);
-
                for (uint32_t i = 0; i < parameter_count(); ++i) {
                        if (parameter_is_input (i)) {
                                XMLNode* c = new XMLNode (X_("Parameter"));
@@ -761,6 +767,12 @@ VSTPlugin::label () const
        return _handle->name;
 }
 
+int32_t
+VSTPlugin::version () const
+{
+       return _plugin->version;
+}
+
 uint32_t
 VSTPlugin::parameter_count () const
 {