X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Faudio_unit.cc;h=88cc197d60d5b50023d047dfd56db65f7edf258d;hb=cf52d6e4b40111eb04b244ec054055a4ec15dbe0;hp=c31d77256eda6f2fc826f51ca21f522f08f32b05;hpb=e9a8ccc7e2826d8fe91eff34ee8a0683a7f7aac6;p=ardour.git diff --git a/libs/ardour/audio_unit.cc b/libs/ardour/audio_unit.cc index c31d77256e..88cc197d60 100644 --- a/libs/ardour/audio_unit.cc +++ b/libs/ardour/audio_unit.cc @@ -71,7 +71,7 @@ #define ArdourFindNext AudioComponentFindNext #endif -#include "i18n.h" +#include "pbd/i18n.h" using namespace std; using namespace PBD; @@ -1256,7 +1256,42 @@ AUPlugin::can_support_io_configuration (const ChanCount& in, ChanCount& out, Cha return false; } - vector >& io_configs = pinfo->cache.io_configs; + vector > io_configs = pinfo->cache.io_configs; + + if (input_elements > 1) { + const vector >& ioc (pinfo->cache.io_configs); + for (vector >::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 < input_elements; ++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 (possible_in + bus_inputs[i], possible_out)); + } + } + } + + if (output_elements > 1) { + const vector >& ioc (pinfo->cache.io_configs); + for (vector >::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 (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));