X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fpluginlv2client.C;h=fcb604046ee4c160d9f45de1722e2059c63ae8c7;hb=a7449f690c376b598d56ace484c6449c95acc7de;hp=d416987f7d92b88113d400171837a2d398b6ce87;hpb=a70cf593410cada9f0ca8bc515534c635a9cb495;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/cinelerra/pluginlv2client.C b/cinelerra-5.1/cinelerra/pluginlv2client.C index d416987f..fcb60404 100644 --- a/cinelerra-5.1/cinelerra/pluginlv2client.C +++ b/cinelerra-5.1/cinelerra/pluginlv2client.C @@ -37,8 +37,10 @@ #include "pluginlv2ui.inc" #include "pluginserver.h" #include "pluginset.h" +#include "preferences.h" #include "samples.h" #include "track.h" +#include "tracks.h" #include #include @@ -95,46 +97,40 @@ PluginLV2ParentUI *PluginLV2UIs::add_ui(PluginLV2ParentUI *ui, PluginLV2Client * return ui; } -PluginLV2ParentUI *PluginLV2UIs::search_ui(Plugin *plugin) +PluginLV2ParentUI *PluginLV2UIs::search_ui(int plugin_id) { - int64_t position = plugin->startproject; - PluginSet *plugin_set = plugin->plugin_set; - int set_no = plugin_set->get_number(); - int track_no = plugin_set->track->number_of(); - PluginLV2ParentUI *ui = 0; for( int i=size(); !ui && --i>=0; ) { PluginLV2ParentUI *parent_ui = get(i); - if( parent_ui->position != position ) continue; - if( parent_ui->set_no != set_no ) continue; - if( parent_ui->track_no == track_no ) ui = parent_ui; + if( parent_ui->plugin_id == plugin_id ) + ui = parent_ui; } return ui; } -PluginLV2ParentUI *PluginLV2UIs::find_ui(Plugin *plugin) +PluginLV2ParentUI *PluginLV2UIs::find_ui(int plugin_id) { - if( !plugin ) return 0; + if( plugin_id < 0 ) return 0; lock("PluginLV2UIs::find_ui"); - PluginLV2ParentUI *ui = search_ui(plugin); + PluginLV2ParentUI *ui = search_ui(plugin_id); unlock(); return ui; } PluginLV2ParentUI *PluginLV2Client::find_ui() { - return PluginLV2ParentUI::plugin_lv2.find_ui(server->plugin); + return PluginLV2ParentUI::plugin_lv2.find_ui(server->plugin_id); } PluginLV2ParentUI *PluginLV2ClientWindow::find_ui() { - return PluginLV2ParentUI::plugin_lv2.find_ui(client->server->plugin); + return PluginLV2ParentUI::plugin_lv2.find_ui(client->server->plugin_id); } PluginLV2ParentUI *PluginLV2UIs::get_ui(PluginLV2Client *client) { lock("PluginLV2UIs::get_ui"); - Plugin *plugin = client->server->plugin; - PluginLV2ParentUI *ui = search_ui(plugin); - if( !ui ) ui = add_ui(new PluginLV2ParentUI(plugin), client); + int plugin_id = client->server->plugin_id; + PluginLV2ParentUI *ui = plugin_id >= 0 ? search_ui(plugin_id) : 0; + if( !ui ) ui = add_ui(new PluginLV2ParentUI(plugin_id), client); unlock(); return ui; } @@ -251,8 +247,10 @@ void PluginLV2Client::read_data(KeyFrame *keyframe) if( !input.tag.title_is(name) ) continue; for( int i=0; iget_symbol(), 0.); - opt->set_value(value); + float v = opt->get_value(); + float value = input.tag.get_property(opt->get_symbol(), v); + if( value != v ) + opt->set_value(value); } } } @@ -385,13 +383,13 @@ PluginClient *PluginServer::new_lv2_plugin() { PluginLV2Client *client = new PluginLV2Client(this); if( client->load_lv2(path, client->title) ) { delete client; return client = 0; } - client->init_lv2(); + if( client->init_lv2() ) { delete client; return client = 0; }; return client; } int MWindow::init_lv2_index(MWindow *mwindow, Preferences *preferences, FILE *fp) { - printf("init lv2 index:\n"); + printf("init lv2 index: %s\n", preferences->lv2_path); PluginLV2BlackList blacklist("lv2_blacklist.txt"); LilvWorld *world = lilv_world_new(); @@ -402,12 +400,19 @@ int MWindow::init_lv2_index(MWindow *mwindow, Preferences *preferences, FILE *fp const LilvPlugin *lilv = lilv_plugins_get(all_plugins, i); const char *uri = lilv_node_as_uri(lilv_plugin_get_uri(lilv)); if( blacklist.is_badboy(uri) ) continue; -printf("LOAD: %s\n", uri); +// TODO It would be nice to print the full path of this particular plugin +// in case it fails, because the systems' LV2 path might include multiple +// directories. But function lilv_uri_to_path does not like the uri. + +// Don't print the newline, so called functions can concatenate their +// error to the name. + printf("LOAD: %s ", uri); PluginServer server(mwindow, uri, PLUGIN_TYPE_LV2); int result = server.open_plugin(1, preferences, 0, 0); if( !result ) { server.write_table(fp, uri, PLUGIN_LV2_ID, 0); server.close_plugin(); + printf(" \n"); } } @@ -415,17 +420,9 @@ printf("LOAD: %s\n", uri); return 0; } -PluginLV2ParentUI::PluginLV2ParentUI(Plugin *plugin) +PluginLV2ParentUI::PluginLV2ParentUI(int plugin_id) { - this->position = plugin->startproject; - PluginSet *plugin_set = plugin->plugin_set; - if( plugin_set ) { - this->set_no = plugin_set->get_number(); - this->track_no = plugin_set->track->number_of(); - } - else - this->track_no = this->set_no = -1; - + this->plugin_id = plugin_id; output_bfr = new Condition(0, "PluginLV2ParentUI::output_bfr", 1); client = 0; gui = 0;