This allows a user to override strict-i/o per processor.
The downside (currently): all downstream effects will be clamped to
the customized outputs (not the actual track's inputs)
This also introduces an new issue with re-config on session-load (missing
code to handle this).
// route is not a friend class, it owns us
bool set_count (uint32_t num);
void set_outputs (const ChanCount&);
- void set_strict_io (bool b) { _strict_io = b; }
- void set_custom_cfg (bool b) { _custom_cfg = b; }
+ void set_strict_io (bool b);
+ void set_custom_cfg (bool b);
// end C++ class slavery!
uint32_t get_count () const { return _plugins.size(); }
PBD::Signal2<void,BufferSet*, BufferSet*> AnalysisDataGathered;
PBD::Signal0<void> PluginIoReConfigure;
PBD::Signal0<void> PluginMapChanged;
+ PBD::Signal0<void> PluginConfigChanged;
/** Enumeration of the ways in which we can match our insert's
* IO to that of the plugin(s).
{
}
+void
+PluginInsert::set_strict_io (bool b)
+{
+ bool changed = _strict_io != b;
+ _strict_io = b;
+ if (changed) {
+ PluginConfigChanged (); /* EMIT SIGNAL */
+ }
+}
+
bool
PluginInsert::set_count (uint32_t num)
{
/* XXX do something */
}
}
+ PluginConfigChanged (); /* EMIT SIGNAL */
} else if (num < _plugins.size()) {
uint32_t diff = _plugins.size() - num;
for (uint32_t n= 0; n < diff; ++n) {
_plugins.pop_back();
}
+ PluginConfigChanged (); /* EMIT SIGNAL */
}
return true;
void
PluginInsert::set_outputs (const ChanCount& c)
{
+ bool changed = (_custom_out != c) && _custom_cfg;
_custom_out = c;
+ if (changed) {
+ PluginConfigChanged (); /* EMIT SIGNAL */
+ }
+}
+
+void
+PluginInsert::set_custom_cfg (bool b)
+{
+ bool changed = _custom_cfg != b;
+ _custom_cfg = b;
+ if (changed) {
+ PluginConfigChanged (); /* EMIT SIGNAL */
+ }
}
void
bool
Route::customize_plugin_insert (boost::shared_ptr<Processor> proc, uint32_t count, ChanCount outs)
{
- if (_strict_io) {
- return false;
- }
-
boost::shared_ptr<PluginInsert> pi;
if ((pi = boost::dynamic_pointer_cast<PluginInsert>(proc)) == 0) {
return false;
Glib::Threads::RWLock::WriterLock lm (_processor_lock);
ProcessorState pstate (this);
- assert (!pi->strict_io ());
bool old_cust = pi->custom_cfg ();
uint32_t old_cnt = pi->get_count ();
ChanCount old_chan = pi->output_streams ();