X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fpluginlv2client.C;h=289eed4ea98541b06a3df7198e537a0a787628ea;hp=50df5ae664b7b49f22fa4758fb618ff103ba1f32;hb=b2eb290b3f6e5c233393017aa152e67c76243130;hpb=803cf48f8f7ee246eb5473e55fc2125e8b398250 diff --git a/cinelerra-5.1/cinelerra/pluginlv2client.C b/cinelerra-5.1/cinelerra/pluginlv2client.C index 50df5ae6..289eed4e 100644 --- a/cinelerra-5.1/cinelerra/pluginlv2client.C +++ b/cinelerra-5.1/cinelerra/pluginlv2client.C @@ -23,7 +23,10 @@ #include "bchash.h" #include "clip.h" #include "cstrdup.h" +#include "edl.h" +#include "edlsession.h" #include "file.h" +#include "filesystem.h" #include "filexml.h" #include "language.h" #include "mainerror.h" @@ -164,8 +167,15 @@ NEW_WINDOW_MACRO(PluginLV2Client, PluginLV2ClientWindow) int PluginLV2Client::init_lv2() { + int bfrsz = block_length; + EDL *edl = server->edl; + if( edl ) { + PlaybackConfig *playback_config = edl->session->playback_config; + bfrsz = playback_config->aconfig->fragment_size; + } int sample_rate = get_project_samplerate(); - return PluginLV2::init_lv2(config, sample_rate); + if( sample_rate < 64 ) sample_rate = samplerate; + return PluginLV2::init_lv2(config, sample_rate, bfrsz); } int PluginLV2Client::load_configuration() @@ -219,7 +229,7 @@ char* PluginLV2Client::to_string(char *string, const char *input) void PluginLV2Client::save_data(KeyFrame *keyframe) { FileXML output; - output.set_shared_output(keyframe->get_data(), MESSAGESIZE); + output.set_shared_output(keyframe->xbuf); char name[BCTEXTLEN]; to_string(name, plugin_title()); output.tag.set_title(name); for( int i=0; iget_data(), strlen(keyframe->get_data())); + input.set_shared_input(keyframe->xbuf); char name[BCTEXTLEN]; to_string(name, plugin_title()); while( !input.read_tag() ) { @@ -287,7 +297,8 @@ void PluginLV2Client::process_buffer(int size) int PluginLV2Client::process_realtime(int64_t size, Samples *input_ptr, Samples *output_ptr) { - load_configuration(); + if( load_configuration() ) + update_lv2(); init_buffer(size); load_buffer(size, &input_ptr, 1); process_buffer(size); @@ -297,7 +308,8 @@ int PluginLV2Client::process_realtime(int64_t size, int PluginLV2Client::process_realtime(int64_t size, Samples **input_ptr, Samples **output_ptr) { - load_configuration(); + if( load_configuration() ) + update_lv2(); init_buffer(size); load_buffer(size, input_ptr, PluginClient::total_in_buffers); process_buffer(size); @@ -305,6 +317,37 @@ int PluginLV2Client::process_realtime(int64_t size, } +PluginLV2BlackList::PluginLV2BlackList(const char *path) +{ + set_array_delete(); + char lv2_blacklist_path[BCTEXTLEN]; + sprintf(lv2_blacklist_path, "%s/%s", File::get_cindat_path(), path); + FILE *bfp = fopen(lv2_blacklist_path, "r"); + if( !bfp ) return; + while( fgets(lv2_blacklist_path, sizeof(lv2_blacklist_path), bfp) ) { + if( lv2_blacklist_path[0] == '#' ) continue; + int len = strlen(lv2_blacklist_path); + if( len > 0 && lv2_blacklist_path[len-1] == '\n' ) + lv2_blacklist_path[len-1] = 0; + if( !lv2_blacklist_path[0] ) continue; + append(cstrdup(lv2_blacklist_path)); + } + fclose(bfp); +} + +PluginLV2BlackList::~PluginLV2BlackList() +{ + remove_all_objects(); +} + +int PluginLV2BlackList::is_badboy(const char *uri) +{ + FileSystem fs; + for( int i=size(); --i>=0; ) + if( !fs.test_filter(uri, get(i)) ) return 1; + return 0; +} + PluginServer* MWindow::new_lv2_server(MWindow *mwindow, const char *name) { return new PluginServer(mwindow, name, PLUGIN_TYPE_LV2); @@ -321,6 +364,8 @@ PluginClient *PluginServer::new_lv2_plugin() int MWindow::init_lv2_index(MWindow *mwindow, Preferences *preferences, FILE *fp) { printf("init lv2 index:\n"); + PluginLV2BlackList blacklist("lv2_blacklist.txt"); + LilvWorld *world = lilv_world_new(); lilv_world_load_all(world); const LilvPlugins *all_plugins = lilv_world_get_all_plugins(world); @@ -328,6 +373,8 @@ int MWindow::init_lv2_index(MWindow *mwindow, Preferences *preferences, FILE *fp LILV_FOREACH(plugins, i, all_plugins) { 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); PluginServer server(mwindow, uri, PLUGIN_TYPE_LV2); int result = server.open_plugin(1, preferences, 0, 0); if( !result ) { @@ -354,7 +401,7 @@ PluginLV2ParentUI::PluginLV2ParentUI(Plugin *plugin) output_bfr = new Condition(0, "PluginLV2ParentUI::output_bfr", 1); client = 0; gui = 0; - hidden = 1; + hidden = -1; } PluginLV2ParentUI::~PluginLV2ParentUI() @@ -371,6 +418,8 @@ void PluginLV2ParentUI::start_parent(PluginLV2Client *client) char bfr[len]; memset(bfr, 0, len); open_bfr_t *open_bfr = (open_bfr_t *)bfr; open_bfr->sample_rate = client->get_project_samplerate(); + PlaybackConfig *playback_config = client->server->edl->session->playback_config; + open_bfr->bfrsz = playback_config->aconfig->fragment_size; strcpy(open_bfr->path, path); send_child(LV2_OPEN, open_bfr, len); PluginLV2ClientConfig &conf = client->config; @@ -390,17 +439,15 @@ int PluginLV2ParentUI::handle_parent() hidden = 1; break; } case LV2_SHOW: { + if( hidden < 0 ) + gui->lv2_ui_enable(); hidden = 0; break; } - case LV2_SET: { - if( !gui ) break; - control_bfr_t *ctl = (control_bfr_t *)parent_data; - gui->lv2_set(ctl->idx, ctl->value); - break; } case LV2_SHMID: { output_bfr->unlock(); break; } case EXIT_CODE: { + hidden = 1; output_bfr->unlock(); result = -1; break; } @@ -426,20 +473,14 @@ int PluginLV2ParentUI::hide() return 0; } - -// stub in parent -int PluginLV2ChildUI::handle_child() { return 0; } -void PluginLV2UI::reset_gui() {} - ForkChild *PluginLV2ParentUI::new_fork() { -#ifdef HAVE_LV2UI return new PluginLV2ChildUI(); -#else - return 0; -#endif } +// stub in parent +int PluginLV2ChildUI::child_iteration(int64_t usec) { return -1; } +int PluginLV2ChildUI::send_host(int64_t token, const void *data, int bytes) { return -1; } #else #include "mwindow.h"