X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fpluginlv2client.C;h=20c8ed3635728c720950a7014f6754618c77006c;hb=5621db270ccbeabc106e0f438941dba6f930652b;hp=7ccb6ef8f2aad633d36c2a0c931fc7034c4872b0;hpb=114b45040c8027671cbe50e7d6cecb28bf73b35f;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/pluginlv2client.C b/cinelerra-5.1/cinelerra/pluginlv2client.C index 7ccb6ef8..20c8ed36 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() @@ -307,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); @@ -323,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); @@ -330,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 ) { @@ -356,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() @@ -373,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; @@ -392,6 +439,8 @@ int PluginLV2ParentUI::handle_parent() hidden = 1; break; } case LV2_SHOW: { + if( hidden < 0 ) + gui->lv2_ui_enable(); hidden = 0; break; } case LV2_SHMID: { @@ -424,16 +473,14 @@ int PluginLV2ParentUI::hide() return 0; } - -// stub in parent -int PluginLV2ChildUI::handle_child() { return 0; } -void PluginLV2UI::reset_gui() {} - ForkChild *PluginLV2ParentUI::new_fork() { return new PluginLV2ChildUI(); } +// 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"