Implement latest LV2 files extension.
authorDavid Robillard <d@drobilla.net>
Wed, 6 Apr 2011 14:58:44 +0000 (14:58 +0000)
committerDavid Robillard <d@drobilla.net>
Wed, 6 Apr 2011 14:58:44 +0000 (14:58 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@9300 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/ardour/ardour/lv2_plugin.h
libs/ardour/lv2_plugin.cc

index 189fb33586e79468e196f8185232e27e1fcfff24..a854a2ac8e552b8bef5c67616a0040dd3327a5f6 100644 (file)
@@ -148,7 +148,8 @@ class LV2Plugin : public ARDOUR::Plugin
        LV2_DataAccess _data_access_extension_data;
        LV2_Feature    _data_access_feature;
        LV2_Feature    _instance_access_feature;
-       LV2_Feature    _files_feature;
+       LV2_Feature    _path_support_feature;
+       LV2_Feature    _new_file_support_feature;
        LV2_Feature    _persist_feature;
 
        static URIMap   _uri_map;
index f4ecb501546ce1bf2c583862ab2ad5e43ade1bc7..f3e30cb78652c0b26eee6437d84c743db3b4d7b8 100644 (file)
@@ -103,32 +103,38 @@ LV2Plugin::init(LV2World& world, SLV2Plugin plugin, framecnt_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";
-       _files_feature.URI           = LV2_FILES_FILE_SUPPORT_URI;
-       _persist_feature.URI         = "http://lv2plug.in/ns/ext/persist";
-       _persist_feature.data        = NULL;
+       _instance_access_feature.URI  = "http://lv2plug.in/ns/ext/instance-access";
+       _data_access_feature.URI      = "http://lv2plug.in/ns/ext/data-access";
+       _path_support_feature.URI     = LV2_FILES_PATH_SUPPORT_URI;
+       _new_file_support_feature.URI = LV2_FILES_NEW_FILE_SUPPORT_URI;
+       _persist_feature.URI          = "http://lv2plug.in/ns/ext/persist";
+       _persist_feature.data         = NULL;
 
        SLV2Value persist_uri = slv2_value_new_uri(_world.world, _persist_feature.URI);
        _supports_persist = slv2_plugin_has_feature(plugin, persist_uri);
        slv2_value_free(persist_uri);
 
-       _features    = (LV2_Feature**)malloc(sizeof(LV2_Feature*) * 6);
+       _features    = (LV2_Feature**)malloc(sizeof(LV2_Feature*) * 7);
        _features[0] = &_instance_access_feature;
        _features[1] = &_data_access_feature;
-       _features[2] = &_files_feature;
-       _features[3] = &_persist_feature;
-       _features[4] = _uri_map.feature();
-       _features[5] = NULL;
-
-       LV2_Files_File_Support* file_support = (LV2_Files_File_Support*)malloc(
-               sizeof(LV2_Files_File_Support));
-       file_support->host_data = this;
-       file_support->abstract_path = &lv2_files_abstract_path;
-       file_support->absolute_path = &lv2_files_absolute_path;
-       file_support->new_file_path = &lv2_files_new_file_path;
-       
-       _files_feature.data = file_support;
+       _features[2] = &_path_support_feature;
+       _features[3] = &_new_file_support_feature;
+       _features[4] = &_persist_feature;
+       _features[5] = _uri_map.feature();
+       _features[6] = NULL;
+
+       LV2_Files_Path_Support* path_support = (LV2_Files_Path_Support*)malloc(
+               sizeof(LV2_Files_Path_Support));
+       path_support->host_data = this;
+       path_support->abstract_path = &lv2_files_abstract_path;
+       path_support->absolute_path = &lv2_files_absolute_path;
+       _path_support_feature.data = path_support;
+
+       LV2_Files_New_File_Support* new_file_support = (LV2_Files_New_File_Support*)malloc(
+               sizeof(LV2_Files_New_File_Support));
+       new_file_support->host_data = this;
+       new_file_support->new_file_path = &lv2_files_new_file_path;
+       _new_file_support_feature.data = new_file_support;
 
        _instance = slv2_plugin_instantiate(plugin, rate, _features);
        _name     = slv2_plugin_get_name(plugin);
@@ -725,6 +731,8 @@ LV2Plugin::set_state(const XMLNode& node, int version)
                std::string state_path = Glib::build_filename(_session.plugins_dir(),
                                                              prop->value());
 
+               cout << "LV2 state path " << state_path << endl;
+
                // Get LV2 Persist extension data from plugin instance
                LV2_Persist* persist = (LV2_Persist*)slv2_instance_get_extension_data(
                        _instance, "http://lv2plug.in/ns/ext/persist");