regenerate and manually fix all PO files so that ./waf i18n doesn't generate unnecess...
[ardour.git] / libs / ardour / audio_unit.cc
index a520fbb00e981d4477ee4ae77f6f92a622590536..c9c5565e3bbad09009520ba85a91d11f1b3f0cfa 100644 (file)
@@ -1263,16 +1263,36 @@ AUPlugin::can_support_io_configuration (const ChanCount& in, ChanCount& out, Cha
                for (vector<pair<int,int> >::const_iterator i = ioc.begin(); i != ioc.end(); ++i) {
                        int32_t possible_in = i->first;
                        int32_t possible_out = i->second;
-                       if (possible_in <= 1 || possible_out <= 1) {
+                       if (possible_in < 1 || possible_out < 1) {
                                continue;
                        }
                        for (uint32_t i = 1; i < input_elements; ++i) {
-                               // TODO: consider up-to bus_inputs[i]
+                               // can't use up-to bus_inputs[]
+                               // waves' SC-C6(s) for example fails to configure with only 1 input
+                               // on the 2nd bus.
                                io_configs.push_back (pair<int,int> (possible_in + bus_inputs[i], possible_out));
                        }
                }
        }
 
+       if (output_elements > 1) {
+               const vector<pair<int,int> >& ioc (pinfo->cache.io_configs);
+               for (vector<pair<int,int> >::const_iterator i = ioc.begin(); i != ioc.end(); ++i) {
+                       int32_t possible_in = i->first;
+                       int32_t possible_out = i->second;
+                       if (possible_in < 1 || possible_out < 1) {
+                               continue;
+                       }
+                       for (uint32_t i = 1; i < output_elements; ++i) {
+                               int32_t c = bus_outputs[i];
+                               for (uint32_t j = 1; j < i; ++j) {
+                                       c += bus_outputs [j];
+                               }
+                               io_configs.push_back (pair<int,int> (possible_in, possible_out + c));
+                       }
+               }
+       }
+
        DEBUG_TRACE (DEBUG::AudioUnits, string_compose ("%1 has %2 IO configurations, looking for %3 in, %4 out\n",
                                                        name(), io_configs.size(), in, out));