50 list<Plugin*> to_release;
53 volatile bool stopped;
74 sem_getvalue(&sync_sem, &val);
106 F *rack_order_ptr[2];
127 typedef void (*
monochainorder)(
int count,
float *output,
float *output1,
147 inline monochain_data ThreadSafeChainPointer<monochain_data>::get_audio(
PluginDef *p)
153 inline stereochain_data ThreadSafeChainPointer<stereochain_data>::get_audio(
PluginDef *p)
164 processing_pointer() {
166 current_pointer[0].func = 0;
167 processing_pointer = current_pointer;
169 current_pointer = rack_order_ptr[1];
174 delete[] rack_order_ptr[0];
175 delete[] rack_order_ptr[1];
179 void ThreadSafeChainPointer<F>::setsize(
int n)
181 if (n <= size[current_index]) {
184 delete[] rack_order_ptr[current_index];
185 rack_order_ptr[current_index] =
new F[n];
186 size[current_index] = n;
187 current_pointer = rack_order_ptr[current_index];
192 setsize(modules.size()+1);
193 int active_counter = 0;
194 for (list<Plugin*>::const_iterator p = modules.begin(); p != modules.end(); p++) {
198 (*p)->set_on_off(
false);
206 current_pointer[active_counter++] = f;
208 current_pointer[active_counter].func = 0;
211 current_index = (current_index+1) % 2;
212 current_pointer = rack_order_ptr[current_index];
222 void process(
int count,
float *input,
float *output);
223 inline void print() {
printlist(
"Mono", modules); }
229 void process(
int count,
float *input1,
float *input2,
float *output1,
float *output2);
230 inline void print() {
printlist(
"Stereo", modules); }
240 list<ModuleSelector*> selectors;
242 sigc::connection rack_changed;
249 sigc::signal<void, unsigned int> buffersize_change;
250 sigc::signal<void, unsigned int> samplerate_change;
251 unsigned int buffersize;
252 unsigned int samplerate;
262 void init(
unsigned int samplerate,
unsigned int buffersize,
263 int policy,
int priority);
264 virtual void wait_ramp_down_finished() = 0;
265 virtual bool update_module_lists() = 0;
266 virtual void start_ramp_up() = 0;
267 virtual void start_ramp_down() = 0;
269 void set_samplerate(
unsigned int samplerate_);
270 unsigned int get_samplerate() {
return samplerate; }
271 void set_buffersize(
unsigned int buffersize_);
272 unsigned int get_buffersize() {
return buffersize; }
273 virtual void set_rack_changed() = 0;
274 void clear_rack_changed();
275 bool get_rack_changed();
276 sigc::signal<void, unsigned int>& signal_buffersize_change() {
return buffersize_change; }
277 sigc::signal<void, unsigned int>& signal_samplerate_change() {
return samplerate_change; }
280 void get_sched_priority(
int &policy,
int &priority,
int prio_dim = 0);
281 ParamMap& get_param() {
return pmap; }
299 boost::mutex stateflags_mutex;
301 sigc::signal<void, GxEngineState> state_change;
302 Glib::Dispatcher overload_detected;
303 const char *overload_reason;
305 static int sporadic_interval;
307 void check_overload();
312 SF_NO_CONNECTION = 0x01,
313 SF_JACK_RECONFIG = 0x02,
314 SF_INITIALIZING = 0x04,
320 void clear_module_states() {
324 virtual void set_samplerate(
unsigned int samplerate);
325 virtual void start_ramp_up();
326 virtual void start_ramp_down();
327 virtual void wait_ramp_down_finished();
330 wait_ramp_down_finished();
332 void set_down_dead() {
336 bool prepare_module_lists();
337 void commit_module_lists();
338 virtual void set_rack_changed();
339 virtual bool update_module_lists();
340 bool check_module_lists();
346 sigc::signal<void, GxEngineState>& signal_state_change() {
return state_change; }
347 static void set_overload_interval(
int i) { sporadic_interval = i; }
349 void print_engine_state();