remove Glib::ustring from libardour; allow any characters except '/' and '\' in paths...
[ardour.git] / libs / ardour / lv2_plugin.cc
index 39bd8d75a7676b9e20f9528ef72318bf4cbdc7ed..be4ecf87afbd5ebc20701f83cc062a3fc9a7326d 100644 (file)
@@ -83,6 +83,15 @@ LV2Plugin::init (LV2World& world, SLV2Plugin plugin, nframes_t rate)
        _latency_control_port = 0;
        _was_activated = false;
 
+       _instance_access_feature.URI = "http://lv2plug.in/ns/ext/instance-access";
+       _data_access_feature.URI = "http://lv2plug.in/ns/ext/data-access";
+
+       _features = (LV2_Feature**)malloc(sizeof(LV2_Feature*) * 4);
+       _features[0] = &_instance_access_feature;
+       _features[1] = &_data_access_feature;
+       _features[2] = _uri_map.feature();
+       _features[3] = NULL;
+
        _instance = slv2_plugin_instantiate(plugin, rate, _features);
        _name = slv2_plugin_get_name(plugin);
        assert(_name);
@@ -93,6 +102,10 @@ LV2Plugin::init (LV2World& world, SLV2Plugin plugin, nframes_t rate)
                throw failed_constructor();
        }
 
+       _instance_access_feature.data = (void*)_instance->lv2_handle;
+       _data_access_extension_data.extension_data = _instance->lv2_descriptor->extension_data;
+       _data_access_feature.data = &_data_access_extension_data;
+
        if (slv2_plugin_has_feature(plugin, world.in_place_broken)) {
                error << string_compose(
                                _("LV2: \"%1\" cannot be used, since it cannot do inplace processing"),
@@ -102,19 +115,6 @@ LV2Plugin::init (LV2World& world, SLV2Plugin plugin, nframes_t rate)
                throw failed_constructor();
        }
 
-       _instance_access_feature.URI = "http://lv2plug.in/ns/ext/instance-access";
-       _instance_access_feature.data = (void*)_instance->lv2_handle;
-
-       _data_access_extension_data.extension_data = _instance->lv2_descriptor->extension_data;
-       _data_access_feature.URI = "http://lv2plug.in/ns/ext/data-access";
-       _data_access_feature.data = &_data_access_extension_data;
-
-       _features = (LV2_Feature**)malloc(sizeof(LV2_Feature*) * 4);
-       _features[0] = &_instance_access_feature;
-       _features[1] = &_data_access_feature;
-       _features[2] = _uri_map.feature();
-       _features[3] = NULL;
-
        _sample_rate = rate;
 
        const uint32_t num_ports = slv2_plugin_get_num_ports(plugin);
@@ -236,8 +236,8 @@ LV2Plugin::set_parameter (uint32_t which, float val)
 
        } else {
                warning << string_compose (_("Illegal parameter number used with plugin \"%1\"."
-                               "This is a bug in either Ardour or the LV2 plugin (%2)"),
-                               name(), unique_id()) << endmsg;
+                                             "This is a bug in either %2 or the LV2 plugin (%3)"),
+                                           name(), PROGRAM_NAME, unique_id()) << endmsg;
        }
 }
 
@@ -319,7 +319,7 @@ LV2Plugin::get_presets()
 }
 
 bool
-LV2Plugin::load_preset(const string uri)
+LV2Plugin::load_preset(const string& uri)
 {
        const string query = string(
                        "PREFIX lv2p: <http://lv2plug.in/ns/dev/presets#>\n"
@@ -352,7 +352,7 @@ LV2Plugin::has_editor() const
 }
 
 int
-LV2Plugin::set_state(const XMLNode& node, int /*version*/)
+LV2Plugin::set_state(const XMLNode& node, int version)
 {
        XMLNodeList nodes;
        XMLProperty *prop;
@@ -368,8 +368,12 @@ LV2Plugin::set_state(const XMLNode& node, int /*version*/)
                return -1;
        }
 
-       nodes = node.children ("Port");
-
+       if (version < 3000){
+               nodes = node.children ("port");
+       } else {
+               nodes = node.children ("Port");
+       }
+       
        for (iter = nodes.begin(); iter != nodes.end(); ++iter){
 
                child = *iter;
@@ -382,6 +386,7 @@ LV2Plugin::set_state(const XMLNode& node, int /*version*/)
                }
 
                map<string,uint32_t>::iterator i = _port_indices.find(sym);
+               
                if (i != _port_indices.end()) {
                        port_id = i->second;
                } else {
@@ -675,6 +680,7 @@ LV2PluginInfo::LV2PluginInfo (void* lv2_world, void* slv2_plugin)
        : _lv2_world(lv2_world)
        , _slv2_plugin(slv2_plugin)
 {
+        type = ARDOUR::LV2;
 }
 
 LV2PluginInfo::~LV2PluginInfo()
@@ -722,6 +728,8 @@ LV2PluginInfo::discover (void* lv2_world)
                        continue;
                }
 
+               info->type = LV2;
+
                info->name = string(slv2_value_as_string(name));
                slv2_value_free(name);