#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"
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()
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);
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);
}
+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);
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);
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 ) {
output_bfr = new Condition(0, "PluginLV2ParentUI::output_bfr", 1);
client = 0;
gui = 0;
- hidden = 1;
+ hidden = -1;
}
PluginLV2ParentUI::~PluginLV2ParentUI()
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;
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; }
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"