39 ramp_mode(ramp_mode_down_dead),
45 next_commit_needs_ramp() {
46 sem_init(&sync_sem, 0, 0);
69 clock_gettime(CLOCK_REALTIME, &ts);
70 const long ns_in_sec = 1000000000;
71 ts.tv_nsec += ns_in_sec / 10;
72 if (ts.tv_nsec >= ns_in_sec) {
73 ts.tv_nsec -= ns_in_sec;
76 while (sem_timedwait(&sync_sem, &ts) == -1) {
80 if (errno == ETIMEDOUT) {
92 sem_getvalue(&sync_sem, &val);
96 assert(sem_getvalue(&sync_sem, &val) == 0 && val == 0);
136 if (oldmode != newmode) {
141 if (oldrv != newrv) {
148 bool lists_equal(
const list<Plugin*>& p1,
const list<Plugin*>& p2,
bool *need_ramp)
150 list<Plugin*>::const_iterator i1 = p1.begin();
151 list<Plugin*>::const_iterator i2 = p2.begin();
155 if (i1 == p1.end()) {
156 if (i2 != p2.end()) {
162 if (i2 == p2.end()) {
169 while ((*i1)->get_pdef()->flags &
PGN_SNOOP) {
171 if (i1 == p1.end()) {
175 while ((*i2)->get_pdef()->flags &
PGN_SNOOP) {
177 if (i2 == p2.end()) {
204 typedef set<const char*, stringcomp> pchar_set;
206 for (list<Plugin*>::const_iterator i = p.begin(); i != p.end(); ++i) {
207 new_ids.insert((*i)->get_pdef()->id);
209 for (list<Plugin*>::const_iterator i =
modules.begin(); i !=
modules.end(); ++i) {
210 if (!(*i)->get_pdef()->activate_plugin) {
213 pchar_set::iterator r = new_ids.find((*i)->get_pdef()->id);
214 if (r == new_ids.end()) {
215 to_release.push_back(*i);
223 for (list<Plugin*>::const_iterator p =
modules.begin(); p !=
modules.end(); ++p) {
235 for (list<Plugin*>::const_iterator p = to_release.begin(); p != to_release.end(); ++p) {
236 (*p)->get_pdef()->activate_plugin(
false, (*p)->get_pdef());
244 sem_getvalue(&sync_sem, &val);
245 printf(
"%s sync_sem = %d, stopped = %d, ramp_mode = %d\n",
246 title, val, stopped, ramp_mode);
258 memset(output, 0, count*
sizeof(
float));
261 memcpy(output, input, count*
sizeof(
float));
263 p->func(count, output, output, p->plugin);
282 for ( ; i < count; ++i) {
292 for ( ; i < count; ++i) {
297 output[i] = (output[i] * rv1) /
steps_up;
301 for (i = 0; i < count; ++i) {
308 for ( ; i < count; ++i) {
319 memset(output1, 0, count*
sizeof(
float));
320 memset(output2, 0, count*
sizeof(
float));
323 memcpy(output1, input1, count*
sizeof(
float));
324 memcpy(output2, input2, count*
sizeof(
float));
326 (p->func)(count, output1, output2, output1, output2, p->plugin);
345 for ( ; i < count; ++i) {
356 for ( ; i < count; ++i) {
361 output1[i] = (output1[i] * rv1) /
steps_up;
362 output2[i] = (output2[i] * rv1) /
steps_up;
366 for (i = 0; i < count; ++i) {
374 for ( ; i < count; ++i) {
390 const char* select_name_,
uiloader loader,
const char** groups_,
int flags_)
394 select_id(select_id_),
395 select_name(select_name_),
403 for (size = 0; *p; ++p, ++size);
405 for (
unsigned int i = 0; i < size; ++i) {
406 modules[i] = plugins[i]();
421 int ModuleSelectorFromList::register_parameter(
const ParamReg ¶m) {
423 for (
unsigned int i = 0; i < size; ++i) {
430 seq.
get_param()[select_id].signal_changed_int().connect(
435 int ModuleSelectorFromList::static_register(
const ParamReg ¶m) {
437 ->register_parameter(param);
442 Plugin *old = current_plugin;
444 if (old && old != current_plugin) {
449 }
else if (current_plugin) {
492 min = sched_get_priority_min(
policy);
493 max = sched_get_priority_max(
policy);
495 if (priority_ > max) {
498 if (priority_ < min) {
521 int policy_,
int priority_) {
554 stateflags(SF_INITIALIZING),
594 Glib::signal_timeout().connect_once(
633 for (list<ModuleSelector*>::iterator i =
selectors.begin(); i !=
selectors.end(); ++i) {
636 list<Plugin*> modules;
641 if (ret_mono || ret_stereo) {
645 return ret_mono || ret_stereo;
689 clock_gettime(CLOCK_MONOTONIC, &ts);
690 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
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
void init(unsigned int samplerate, unsigned int buffersize, int policy, int priority)
void set_ramp_value(int n)
Plugin * lookup_plugin(const std::string &id) const
virtual bool update_module_lists()
void set_ramp_mode(RampMode n)
sigc::signal< void, GxEngineState > state_change
virtual void set_samplerate(unsigned int samplerate)
void set_on_off(bool v) const
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()
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)
bool set_plugin_list(const list< Plugin * > &p)
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 ordered_mono_list(list< Plugin * > &mono, int mode)
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
unsigned int get_buffersize()
void clear_stateflag(StateFlag flag)
bool lists_equal(const list< Plugin * > &p1, const list< Plugin * > &p2, bool *need_ramp)
void registerAllPlugins(ParamMap ¶m, ParameterGroups &groups)
void commit(bool clear, ParamMap &pmap)
bool next_commit_needs_ramp
void wait_ramp_down_finished()
void ordered_stereo_list(list< Plugin * > &stereo, int mode)
bool prepare_module_lists()