39 ramp_mode(ramp_mode_down_dead),
45 next_commit_needs_ramp() {
46 sem_init(&sync_sem, 0, 0);
73 while (sem_wait(&sync_sem) == -1) {
76 clock_gettime(CLOCK_REALTIME, &ts);
77 const long ns_in_sec = 1000000000;
78 ts.tv_nsec += ns_in_sec / 10;
79 if (ts.tv_nsec >= ns_in_sec) {
80 ts.tv_nsec -= ns_in_sec;
83 while (sem_timedwait(&sync_sem, &ts) == -1) {
89 if (errno == ETIMEDOUT) {
101 sem_getvalue(&sync_sem, &val);
105 assert(sem_getvalue(&sync_sem, &val) == 0 && val == 0);
145 if (oldmode != newmode) {
150 if (oldrv != newrv) {
157 bool lists_equal(
const list<Plugin*>& p1,
const list<Plugin*>& p2,
bool *need_ramp)
159 list<Plugin*>::const_iterator i1 = p1.begin();
160 list<Plugin*>::const_iterator i2 = p2.begin();
164 if (i1 == p1.end()) {
165 if (i2 != p2.end()) {
171 if (i2 == p2.end()) {
178 while ((*i1)->get_pdef()->flags &
PGN_SNOOP) {
180 if (i1 == p1.end()) {
184 while ((*i2)->get_pdef()->flags &
PGN_SNOOP) {
186 if (i2 == p2.end()) {
213 typedef set<const char*, stringcomp> pchar_set;
215 for (list<Plugin*>::const_iterator i = p.begin(); i != p.end(); ++i) {
216 new_ids.insert((*i)->get_pdef()->id);
218 for (list<Plugin*>::const_iterator i =
modules.begin(); i !=
modules.end(); ++i) {
219 if (!(*i)->get_pdef()->activate_plugin) {
222 pchar_set::iterator r = new_ids.find((*i)->get_pdef()->id);
223 if (r == new_ids.end()) {
224 to_release.push_back(*i);
232 for (list<Plugin*>::const_iterator p =
modules.begin(); p !=
modules.end(); ++p) {
244 for (list<Plugin*>::const_iterator p = to_release.begin(); p != to_release.end(); ++p) {
245 (*p)->get_pdef()->activate_plugin(
false, (*p)->get_pdef());
253 sem_getvalue(&sync_sem, &val);
254 printf(
"%s sync_sem = %d, stopped = %d, ramp_mode = %d\n",
255 title, val, stopped, ramp_mode);
267 memset(output, 0, count*
sizeof(
float));
270 memcpy(output, input, count*
sizeof(
float));
272 p->func(count, output, output, p->plugin);
291 for ( ; i < count; ++i) {
301 for ( ; i < count; ++i) {
306 output[i] = (output[i] * rv1) /
steps_up;
310 for (i = 0; i < count; ++i) {
317 for ( ; i < count; ++i) {
328 memset(output1, 0, count*
sizeof(
float));
329 memset(output2, 0, count*
sizeof(
float));
332 memcpy(output1, input1, count*
sizeof(
float));
333 memcpy(output2, input2, count*
sizeof(
float));
335 (p->func)(count, output1, output2, output1, output2, p->plugin);
354 for ( ; i < count; ++i) {
365 for ( ; i < count; ++i) {
370 output1[i] = (output1[i] * rv1) /
steps_up;
371 output2[i] = (output2[i] * rv1) /
steps_up;
375 for (i = 0; i < count; ++i) {
383 for ( ; i < count; ++i) {
399 const char* select_name_,
uiloader loader,
const char** groups_,
int flags_)
403 select_id(select_id_),
404 select_name(select_name_),
412 for (size = 0; *p; ++p, ++size);
414 for (
unsigned int i = 0; i < size; ++i) {
415 modules[i] = plugins[i]();
430 int ModuleSelectorFromList::register_parameter(
const ParamReg ¶m) {
432 for (
unsigned int i = 0; i < size; ++i) {
439 seq.
get_param()[select_id].signal_changed_int().connect(
444 int ModuleSelectorFromList::static_register(
const ParamReg ¶m) {
446 ->register_parameter(param);
451 Plugin *old = current_plugin;
453 if (old && old != current_plugin) {
458 }
else if (current_plugin) {
504 if (priority_ >
max) {
507 if (priority_ <
min) {
530 int policy_,
int priority_) {
563 stateflags(SF_INITIALIZING),
603 Glib::signal_timeout().connect_once(
642 for (list<ModuleSelector*>::iterator i =
selectors.begin(); i !=
selectors.end(); ++i) {
645 list<Plugin*> modules;
650 if (ret_mono || ret_stereo) {
654 return ret_mono || ret_stereo;
698 clock_gettime(CLOCK_MONOTONIC, &ts);
699 float now = ts.tv_sec + ts.tv_nsec * 1e-9;