39 ramp_mode(ramp_mode_down_dead),
45 next_commit_needs_ramp() {
46 sem_init(&sync_sem, 0, 0);
71 while (sem_wait(&sync_sem) == -1) {
74 clock_gettime(CLOCK_REALTIME, &ts);
75 const long ns_in_sec = 1000000000;
76 ts.tv_nsec += ns_in_sec / 10;
77 if (ts.tv_nsec >= ns_in_sec) {
78 ts.tv_nsec -= ns_in_sec;
81 while (sem_timedwait(&sync_sem, &ts) == -1) {
87 if (errno == ETIMEDOUT) {
99 sem_getvalue(&sync_sem, &val);
103 assert(sem_getvalue(&sync_sem, &val) == 0 && val == 0);
143 if (oldmode != newmode) {
148 if (oldrv != newrv) {
155 bool lists_equal(
const list<Plugin*>& p1,
const list<Plugin*>& p2,
bool *need_ramp)
157 list<Plugin*>::const_iterator i1 = p1.begin();
158 list<Plugin*>::const_iterator i2 = p2.begin();
162 if (i1 == p1.end()) {
163 if (i2 != p2.end()) {
169 if (i2 == p2.end()) {
176 while ((*i1)->get_pdef()->flags &
PGN_SNOOP) {
178 if (i1 == p1.end()) {
182 while ((*i2)->get_pdef()->flags &
PGN_SNOOP) {
184 if (i2 == p2.end()) {
211 typedef set<const char*, stringcomp> pchar_set;
213 for (list<Plugin*>::const_iterator i = p.begin(); i != p.end(); ++i) {
214 new_ids.insert((*i)->get_pdef()->id);
216 for (list<Plugin*>::const_iterator i =
modules.begin(); i !=
modules.end(); ++i) {
217 if (!(*i)->get_pdef()->activate_plugin) {
220 pchar_set::iterator r = new_ids.find((*i)->get_pdef()->id);
221 if (r == new_ids.end()) {
222 to_release.push_back(*i);
230 for (list<Plugin*>::const_iterator p =
modules.begin(); p !=
modules.end(); ++p) {
242 for (list<Plugin*>::const_iterator p = to_release.begin(); p != to_release.end(); ++p) {
243 (*p)->get_pdef()->activate_plugin(
false, (*p)->get_pdef());
251 sem_getvalue(&sync_sem, &val);
252 printf(
"%s sync_sem = %d, stopped = %d, ramp_mode = %d\n",
253 title, val, stopped, ramp_mode);
265 memset(output, 0, count*
sizeof(
float));
268 memcpy(output, input, count*
sizeof(
float));
270 p->func(count, output, output, p->plugin);
289 for ( ; i < count; ++i) {
299 for ( ; i < count; ++i) {
304 output[i] = (output[i] * rv1) /
steps_up;
308 for (i = 0; i < count; ++i) {
315 for ( ; i < count; ++i) {
326 memset(output1, 0, count*
sizeof(
float));
327 memset(output2, 0, count*
sizeof(
float));
330 memcpy(output1, input1, count*
sizeof(
float));
331 memcpy(output2, input2, count*
sizeof(
float));
333 (p->func)(count, output1, output2, output1, output2, p->plugin);
352 for ( ; i < count; ++i) {
363 for ( ; i < count; ++i) {
368 output1[i] = (output1[i] * rv1) /
steps_up;
369 output2[i] = (output2[i] * rv1) /
steps_up;
373 for (i = 0; i < count; ++i) {
381 for ( ; i < count; ++i) {
397 const char* select_name_,
uiloader loader,
const char** groups_,
int flags_)
401 select_id(select_id_),
402 select_name(select_name_),
410 for (size = 0; *p; ++p, ++size);
412 for (
unsigned int i = 0; i < size; ++i) {
413 modules[i] = plugins[i]();
428 int ModuleSelectorFromList::register_parameter(
const ParamReg ¶m) {
430 for (
unsigned int i = 0; i < size; ++i) {
437 seq.
get_param()[select_id].signal_changed_int().connect(
442 int ModuleSelectorFromList::static_register(
const ParamReg ¶m) {
444 ->register_parameter(param);
449 Plugin *old = current_plugin;
451 if (old && old != current_plugin) {
456 }
else if (current_plugin) {
499 min = sched_get_priority_min(
policy);
500 max = sched_get_priority_max(
policy);
502 if (priority_ > max) {
505 if (priority_ < min) {
528 int policy_,
int priority_) {
561 stateflags(SF_INITIALIZING),
601 Glib::signal_timeout().connect_once(
640 for (list<ModuleSelector*>::iterator i =
selectors.begin(); i !=
selectors.end(); ++i) {
643 list<Plugin*> modules;
648 if (ret_mono || ret_stereo) {
652 return ret_mono || ret_stereo;
696 clock_gettime(CLOCK_MONOTONIC, &ts);
697 float now = ts.tv_sec + ts.tv_nsec * 1e-9;
void set_samplerate(int samplerate)
void process(int count, float *input1, float *input2, float *output1, float *output2)
void print_chain_state(const char *title)
void get_sched_priority(int &policy, int &priority, int prio_dim=0)
StereoModuleChain stereo_chain
clearstatefunc clear_state
bool set_plugin_list(const list< Plugin *> &p)
void registerParameter(ParameterGroups &groups)
virtual void wait_ramp_down_finished()
void set_buffersize(unsigned int buffersize_)
int(* uiloader)(const UiBuilder &builder, int format)
MonoModuleChain mono_chain
bool lists_equal(const list< Plugin *> &p1, const list< Plugin *> &p2, bool *need_ramp)
void init(unsigned int samplerate, unsigned int buffersize, int policy, int priority)
void set_ramp_value(int n)
virtual bool update_module_lists()
void set_ramp_mode(RampMode n)
sigc::signal< void, GxEngineState > state_change
virtual void set_samplerate(unsigned int samplerate)
int atomic_get(volatile int &p)
bool check_module_lists()
void process(int count, float *input, float *output)
list< ModuleSelector * > selectors
void commit_module_lists()
sigc::signal< void, unsigned int > samplerate_change
void(* registerIEnumVar)(const char *id, const char *name, const char *tp, const char *tooltip, const value_pair *values, int *var, int val)
void gx_print_error(const char *, const std::string &)
void copy_position(const Plugin &plugin)
sigc::signal< void, unsigned int > buffersize_change
#define PLUGINDEF_VERSION
registerfunc register_params
void add_selector(ModuleSelector &sel)
void try_set_ramp_mode(RampMode oldmode, RampMode newmode, int oldrv, int newrv)
virtual void overload(OverloadType tp, const char *reason)
void clear_rack_changed()
Plugin * lookup_plugin(const std::string &id) const
PluginDef *(* plugindef_creator)()
virtual void set_rack_changed()
void clear_module_states()
Glib::Dispatcher overload_detected
void set_state(GxEngineState state)
~ModuleSelectorFromList()
virtual void start_ramp_up()
unsigned int get_samplerate()
void set_samplerate(int samplerate)
void print_engine_state()
void set_samplerate(unsigned int samplerate_)
void gx_print_warning(const char *, const std::string &)
virtual void start_ramp_down()
activatefunc activate_plugin
static int sporadic_interval
void atomic_set(volatile int *p, int v)
const char * overload_reason
boost::mutex stateflags_mutex
ModuleSelectorFromList(EngineControl &seq, const char *id, const char *name, const char *category, plugindef_creator module_ids[], const char *select_id, const char *select_name, uiloader loader, const char **groups=0, int flags=0)
void set_stateflag(StateFlag flag)
GxEngineState get_state()
bool atomic_compare_and_exchange(volatile int *p, int oldv, int newv)
virtual void set_rack_changed()=0
sigc::connection rack_changed
void set_on_off(bool v) const
unsigned int get_buffersize()
void clear_stateflag(StateFlag flag)
void ordered_mono_list(list< Plugin *> &mono, int mode)
void ordered_stereo_list(list< Plugin *> &stereo, int mode)
void registerAllPlugins(ParamMap ¶m, ParameterGroups &groups)
void commit(bool clear, ParamMap &pmap)
bool next_commit_needs_ramp
void wait_ramp_down_finished()
bool prepare_module_lists()