X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fpluginlv2ui.C;h=17f072a2c6bf63b6c5960f21d7c364aa10e5199c;hb=702161ddaf384a773831f1643fca0a54133625b2;hp=3e1c3ee9553ad354cc571b29cf42773d9c5829aa;hpb=32b57dd9cdbb2fc0000a9f72ff766e4030c50b24;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/pluginlv2ui.C b/cinelerra-5.1/cinelerra/pluginlv2ui.C index 3e1c3ee9..17f072a2 100644 --- a/cinelerra-5.1/cinelerra/pluginlv2ui.C +++ b/cinelerra-5.1/cinelerra/pluginlv2ui.C @@ -1,4 +1,3 @@ -#ifdef HAVE_LV2UI // shared between parent/child fork #include "language.h" @@ -10,39 +9,6 @@ #include #include -int PluginLV2UI::init_ui(const char *path, int sample_rate) -{ - if( load_lv2(path, title) ) return 1; - if( init_lv2(config, sample_rate) ) return 1; - - lilv_uis = lilv_plugin_get_uis(lilv); - if( !lilv_uis ) { - printf("lv2: lilv_plugin_get_uis(%s) failed\n", path); - return 1; - } - - if( gtk_type ) { - LilvNode *gui_type = lilv_new_uri(world, gtk_type); - LILV_FOREACH(uis, i, lilv_uis) { - const LilvUI *ui = lilv_uis_get(lilv_uis, i); - if( lilv_ui_is_supported(ui, suil_ui_supported, gui_type, &lilv_type)) { - lilv_ui = ui; - break; - } - } - lilv_node_free(gui_type); - } - if( !lilv_ui ) - lilv_ui = lilv_uis_get(lilv_uis, lilv_uis_begin(lilv_uis)); - if( !lilv_ui ) { - printf("lv2_gui: init_ui failed: %s\n", title); - return 1; - } - - lilv_instance_activate(inst); - return 0; -} - void PluginLV2UI::update_value(int idx, uint32_t bfrsz, uint32_t typ, const void *bfr) { if( idx >= config.nb_ports ) return; @@ -50,7 +16,7 @@ void PluginLV2UI::update_value(int idx, uint32_t bfrsz, uint32_t typ, const void PluginLV2Client_Opt *opt = config[i]; if( opt->idx == idx ) { opt->set_value(*(const float*)bfr); - updates = UPDATE_HOST; + updates |= UPDATE_HOST; break; } } @@ -78,17 +44,6 @@ void PluginLV2UI::update_control(int idx, uint32_t bfrsz, uint32_t typ, const vo } -#if 0 -void PluginLV2UI::touch(void *obj, uint32_t pidx, bool grabbed) -{ - PluginLV2UI* the = (PluginLV2GUI*)obj; - int idx = pidx; - if( idx >= the->config.nb_ports ) return; -printf("%s %s(%u)\n", (grabbed? _("press") : _("release")), - the->config.names[idx], idx); -} -#endif - uint32_t PluginLV2UI::uri_to_id(LV2_URID_Map_Handle handle, const char *map, const char *uri) { return ((PluginLV2UriTable *)handle)->map(uri); @@ -111,8 +66,7 @@ void PluginLV2UI::lv2ui_instantiate(void *parent) PluginLV2UI::write_from_ui, PluginLV2UI::port_index, 0, 0); -// suil_host_set_touch_func(ui_host, -// PluginLV2GUI::touch); +// suil_host_set_touch_func(ui_host, cb_touch); } features.remove(); // remove terminating zero @@ -125,13 +79,15 @@ void PluginLV2UI::lv2ui_instantiate(void *parent) features.append(new Lv2Feature(LV2_DATA_ACCESS_URI, ext_data)); features.append(new Lv2Feature(LV2_UI__parent, parent)); features.append(new Lv2Feature(LV2_UI__idleInterface, 0)); + features.append(new Lv2Feature(LV2_EXTERNAL_UI_URI, &extui_host)); + features.append(new Lv2Feature(LV2_EXTERNAL_UI_URI__KX__Host, &extui_host)); features.append(0); // add new terminating zero const char* bundle_uri = lilv_node_as_uri(lilv_ui_get_bundle_uri(lilv_ui)); char* bundle_path = lilv_file_uri_parse(bundle_uri, NULL); const char* binary_uri = lilv_node_as_uri(lilv_ui_get_binary_uri(lilv_ui)); char* binary_path = lilv_file_uri_parse(binary_uri, NULL); - sinst = suil_instance_new(ui_host, this, gtk_type, + sinst = suil_instance_new(ui_host, this, ui_type, lilv_node_as_uri(lilv_plugin_get_uri(lilv)), lilv_node_as_uri(lilv_ui_get_uri(lilv_ui)), lilv_node_as_uri(lilv_type), @@ -158,11 +114,6 @@ bool PluginLV2UI::lv2ui_resizable() return !fs_matches && !nrs_matches; } -int PluginLV2UI::send_host(int64_t token, const void *data, int bytes) -{ - return !child ? 0 : child->send_parent(token, data, bytes); -} - int PluginLV2UI::update_lv2_input(float *vals, int force) { int ret = 0; @@ -189,39 +140,58 @@ void PluginLV2UI::update_lv2_output() } } -static void lilv_destroy(GtkWidget* widget, gpointer data) +void PluginLV2UI::run_lilv(int samples) { - PluginLV2UI *the = (PluginLV2UI*)data; - the->top_level = 0; -} + float ctls[config.nb_ports]; + for( int i=0; istart_gui(); update_lv2_input(config.ctls, 1); - connect_ports(config, PORTS_CONTROL); + connect_ports(config, PORTS_CONTROL | PORTS_ATOM); + int n = 0; +#if 1 +// some plugins must have pointers, or they crash + float inp[nb_inputs], out[nb_outputs]; + memset(&inp, 0, nb_inputs*sizeof(float)); + memset(&out, 0, nb_outputs*sizeof(float)); + int ich = 0, och = 0; + for( int i=0; i