custom config trumps strict-i/o

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).
This commit is contained in:
Robin Gareus 2016-04-01 01:41:10 +02:00
parent 62a12f2e69
commit 66e488e38d
3 changed files with 29 additions and 7 deletions

View File

@ -111,8 +111,8 @@ class LIBARDOUR_API PluginInsert : public Processor
// 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(); }
@ -209,6 +209,7 @@ class LIBARDOUR_API PluginInsert : public Processor
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).

View File

@ -86,6 +86,16 @@ PluginInsert::~PluginInsert ()
{
}
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)
{
@ -111,12 +121,14 @@ 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;
@ -126,7 +138,21 @@ PluginInsert::set_count (uint32_t num)
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

View File

@ -2413,10 +2413,6 @@ Route::reset_plugin_insert (boost::shared_ptr<Processor> proc)
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;
@ -2441,7 +2437,6 @@ Route::customize_plugin_insert (boost::shared_ptr<Processor> proc, uint32_t coun
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 ();