From 8e25b4d193fb4fb9efbf7a7145d27879dcd668be Mon Sep 17 00:00:00 2001 From: Christopher Arndt Date: Sat, 20 Oct 2018 23:48:21 +0200 Subject: Add plugin version and parameter count to VST user presets Signed-off-by: Christopher Arndt --- libs/ardour/ardour/vestige/vestige.h | 4 ++-- libs/ardour/ardour/vst_plugin.h | 3 ++- libs/ardour/vst_plugin.cc | 26 +++++++++++++++++++------- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/libs/ardour/ardour/vestige/vestige.h b/libs/ardour/ardour/vestige/vestige.h index 9e588452ec..41e78f7a05 100644 --- a/libs/ardour/ardour/vestige/vestige.h +++ b/libs/ardour/ardour/vestige/vestige.h @@ -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); }; diff --git a/libs/ardour/ardour/vst_plugin.h b/libs/ardour/ardour/vst_plugin.h index a696af2afd..e0d369332c 100644 --- a/libs/ardour/ardour/vst_plugin.h +++ b/libs/ardour/ardour/vst_plugin.h @@ -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; diff --git a/libs/ardour/vst_plugin.cc b/libs/ardour/vst_plugin.cc index 6cb412db39..9832b81b72 100644 --- a/libs/ardour/vst_plugin.cc +++ b/libs/ardour/vst_plugin.cc @@ -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 { -- cgit v1.2.3