samplerate = 44100;
refreshrate = 30.;
+ min_block_length = 1;
block_length = 4096;
midi_buf_size = 8192;
schedule.schedule_work = lv2_worker_schedule;
worker_iface = 0; worker_done = -1;
pthread_mutex_init(&worker_lock, 0);
+ pthread_mutex_init(&startup_lock, 0);
+ pthread_mutex_lock(&startup_lock);
pthread_cond_init(&worker_ready, 0);
work_avail = 0; work_input = 0;
work_output = 0; work_tail = &work_output;
ui_updateRate = uri_table.map(LV2_UI__updateRate);
samplerate = sample_rate;
- block_length = bfrsz;
options.add(param_sampleRate, sizeof(float), atom_float, &samplerate);
- options.add(bufsz_minBlockLength, sizeof(int), atom_int, &block_length);
+ if( min_block_length > bfrsz ) min_block_length = bfrsz;
+ options.add(bufsz_minBlockLength, sizeof(int), atom_int, &min_block_length);
+ block_length = bfrsz;
options.add(bufsz_maxBlockLength, sizeof(int), atom_int, &block_length);
options.add(bufsz_sequenceSize, sizeof(int), atom_int, &midi_buf_size);
options.add(ui_updateRate, sizeof(float), atom_float, &refreshrate);
(lilv_plugin_has_feature(lilv, powerOf2BlockLength) ||
lilv_plugin_has_feature(lilv, fixedBlockLength) ||
lilv_plugin_has_feature(lilv, boundedBlockLength)) ? 4096 : 0;
+ init_buffer(bfrsz);
return 0;
}
void *PluginLV2::worker_func()
{
pthread_mutex_lock(&worker_lock);
+ pthread_mutex_unlock(&startup_lock);
for(;;) {
while( !worker_done && !work_input )
pthread_cond_wait(&worker_ready, &worker_lock);
void PluginLV2::worker_start()
{
pthread_create(&worker_thread, 0, worker_func, this);
+ pthread_mutex_lock(&startup_lock);
}
void PluginLV2::worker_stop()