+/*
+ * CINELERRA
+ * Copyright (C) 2016-2020 William Morrow
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published
+ * by the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA
+ */
// shared between parent/child fork
#include "language.h"
return !fs_matches && !nrs_matches;
}
+//force= 1:ctls(all),gui(all) 0:changed(ctls) -1:gui(all)
int PluginLV2UI::update_lv2_input(float *vals, int force)
{
int ret = 0;
int idx = config[i]->idx;
float val = vals[idx];
if( !force && ctls[idx] == val ) continue;
- ctls[idx] = val;
- update_control(idx, sizeof(ctls[idx]), 0, &ctls[idx]);
- ++ret;
+ if( force >= 0 ) {
+ ctls[idx] = val;
+ ++ret;
+ }
+ if( force )
+ update_control(idx, sizeof(val), 0, &val);
}
return ret;
}
update_lv2_input(config.ctls, 1);
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<config.nb_ports; ++i ) {
- const LilvPort *lp = lilv_plugin_get_port_by_index(lilv, i);
- if( !lp ) continue;
- int port = config.ports[i];
- if( !(port & PORTS_AUDIO) ) continue;
- if( (port & PORTS_INPUT) ) {
- lilv_instance_connect_port(inst, i, &inp[ich++]);
- continue;
- }
- if( (port & PORTS_OUTPUT) ) {
- lilv_instance_connect_port(inst, i, &out[och++]);
- continue;
- }
- }
- n = 1;
-#endif
+
updates = 0;
run_lilv(n);
if( gui ) {
float *vals = (float *)child_data;
update_lv2_input(vals, 1);
break; }
- case LV2_UPDATE: {
+ case LV2_CONFIG: {
float *vals = (float *)child_data;
update_lv2_input(vals, 0);
break; }
+ case LV2_UPDATE: {
+ float *vals = (float *)child_data;
+ update_lv2_input(vals, -1);
+ break; }
case LV2_SHOW: {
start_gui();
break; }