fix LV2 plugin state for copied plugins.
authorRobin Gareus <robin@gareus.org>
Thu, 10 Dec 2015 18:31:00 +0000 (19:31 +0100)
committerRobin Gareus <robin@gareus.org>
Thu, 10 Dec 2015 18:31:00 +0000 (19:31 +0100)
libs/ardour/lv2_plugin.cc
libs/ardour/plugin_insert.cc

index 7c9e901ebbb2d3a91a17ada48c71991c03790155..7e06a9f266e6cafb452b2f24876a8d1218659eb8 100644 (file)
@@ -1664,7 +1664,13 @@ LV2Plugin::work_response(uint32_t size, const void* data)
 void
 LV2Plugin::set_insert_id(PBD::ID id)
 {
-       _insert_id = id;
+       if (_insert_id == "0") {
+               _insert_id = id;
+       } else if (_insert_id != id) {
+               lilv_state_free(_impl->state);
+               _impl->state = NULL;
+               _insert_id   = id;
+       }
 }
 
 int
index 34745b7cabd933aea2f7b685dd6e2d5fffedf30f..551602324a69f06623041a621fb3db1d094425c4 100644 (file)
@@ -952,6 +952,7 @@ PluginInsert::state (bool full)
        node.add_child_nocopy (* _configured_in.state (X_("ConfiguredInput")));
        node.add_child_nocopy (* _configured_out.state (X_("ConfiguredOutput")));
 
+       _plugins[0]->set_insert_id(this->id());
        node.add_child_nocopy (_plugins[0]->get_state());
 
        for (Controls::iterator c = controls().begin(); c != controls().end(); ++c) {
@@ -1123,6 +1124,7 @@ PluginInsert::set_state(const XMLNode& node, int version)
                if ((*niter)->name() == plugin->state_node_name()) {
 
                        for (Plugins::iterator i = _plugins.begin(); i != _plugins.end(); ++i) {
+                               (*i)->set_insert_id (this->id());
                                (*i)->set_state (**niter, version);
                        }