summaryrefslogtreecommitdiff
path: root/libs/ardour/plugin_insert.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-02-24 16:22:42 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-02-24 16:22:42 +0000
commite1905c1c29df0911adfeb9acfea2aa1e077ca892 (patch)
tree58de0bd06392e579b899fc2f3d2f3746bc9a7207 /libs/ardour/plugin_insert.cc
parent0193803126111e78e1ce74285c2df9c593a3cebf (diff)
allow zero-input (i.e. tone generator) processors to be added
git-svn-id: svn://localhost/ardour2/branches/3.0@8950 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/plugin_insert.cc')
-rw-r--r--libs/ardour/plugin_insert.cc27
1 files changed, 22 insertions, 5 deletions
diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc
index 052b3a3e02..1484bd7294 100644
--- a/libs/ardour/plugin_insert.cc
+++ b/libs/ardour/plugin_insert.cc
@@ -612,6 +612,20 @@ PluginInsert::can_support_io_configuration (const ChanCount& in, ChanCount& out)
ChanCount inputs = _plugins[0]->get_info()->n_inputs;
ChanCount outputs = _plugins[0]->get_info()->n_outputs;
+ bool no_inputs = true;
+ for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) {
+ if (inputs.get (*t) != 0) {
+ no_inputs = false;
+ break;
+ }
+ }
+
+ if (no_inputs) {
+ /* no inputs so we can take any input configuration since we throw it away */
+ out = outputs;
+ return true;
+ }
+
// Plugin inputs match requested inputs exactly
if (inputs == in) {
out = outputs;
@@ -624,12 +638,15 @@ PluginInsert::can_support_io_configuration (const ChanCount& in, ChanCount& out)
uint32_t f = 0;
bool can_replicate = true;
for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) {
+
+ uint32_t nin = inputs.get (*t);
+
// No inputs of this type
- if (inputs.get(*t) == 0 && in.get(*t) == 0) {
+ if (nin == 0 && in.get(*t) == 0) {
continue;
}
- if (inputs.get(*t) != 1 || outputs.get (*t) != 1) {
+ if (nin != 1 || outputs.get (*t) != 1) {
can_replicate = false;
break;
}
@@ -637,16 +654,16 @@ PluginInsert::can_support_io_configuration (const ChanCount& in, ChanCount& out)
// Potential factor not set yet
if (f == 0) {
- f = in.get(*t) / inputs.get(*t);;
+ f = in.get(*t) / nin;
}
// Factor for this type does not match another type, can not replicate
- if (f != (in.get(*t) / inputs.get(*t))) {
+ if (f != (in.get(*t) / nin)) {
can_replicate = false;
break;
}
}
-
+
if (can_replicate) {
for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) {
out.set (*t, outputs.get(*t) * f);