summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-11-01 21:48:45 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-11-01 21:48:45 +0000
commit7c9c86af27d2cc6e2e9ad6afcff61b8a7873c287 (patch)
tree22d2c0f1240f99c35d40bb330185a70007a50242 /libs
parent8771e00fab8d10f46b9862afe920ee77fae7b197 (diff)
start trying to remove the use of Plugin::info()->n_{inputs,outputs}, which alway refer to static (unchanging) information from the plugin metadata, which is not useful in the face of AU-like plugin APIs that can change I/O valency as requested, at least some of the time
git-svn-id: svn://localhost/ardour2/branches/3.0@10386 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/audio_unit.cc3
-rw-r--r--libs/ardour/plugin_insert.cc37
2 files changed, 23 insertions, 17 deletions
diff --git a/libs/ardour/audio_unit.cc b/libs/ardour/audio_unit.cc
index b53d62614f..5e15d9b48e 100644
--- a/libs/ardour/audio_unit.cc
+++ b/libs/ardour/audio_unit.cc
@@ -2670,9 +2670,8 @@ void
AUPlugin::set_info (PluginInfoPtr info)
{
Plugin::set_info (info);
-
+
AUPluginInfoPtr pinfo = boost::dynamic_pointer_cast<AUPluginInfo>(get_info());
-
_has_midi_input = pinfo->needs_midi_input ();
_has_midi_output = false;
}
diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc
index bdda2809b2..744b53a652 100644
--- a/libs/ardour/plugin_insert.cc
+++ b/libs/ardour/plugin_insert.cc
@@ -132,13 +132,15 @@ PluginInsert::control_list_automation_state_changed (Evoral::Parameter which, Au
ChanCount
PluginInsert::output_streams() const
{
- ChanCount out = _plugins.front()->get_info()->n_outputs;
-
- DEBUG_TRACE (DEBUG::Processors, string_compose ("Plugin insert, static output streams = %1\n", out));
+ assert (!_plugins.empty());
- if (out == ChanCount::INFINITE) {
- return _plugins.front()->output_streams ();
+ if (_plugins.front()->reconfigurable_io()) {
+ ChanCount out = _plugins.front()->output_streams ();
+ DEBUG_TRACE (DEBUG::Processors, string_compose ("Plugin insert, reconfigur(able) output streams = %1\n", out));
+ return out;
} else {
+ ChanCount out = _plugins.front()->get_info()->n_outputs;
+ DEBUG_TRACE (DEBUG::Processors, string_compose ("Plugin insert, static output streams = %1 for %2 plugins\n", out, _plugins.size()));
out.set_audio (out.n_audio() * _plugins.size());
out.set_midi (out.n_midi() * _plugins.size());
return out;
@@ -148,9 +150,18 @@ PluginInsert::output_streams() const
ChanCount
PluginInsert::input_streams() const
{
- ChanCount in = _plugins[0]->get_info()->n_inputs;
+ assert (!_plugins.empty());
+
+ ChanCount in;
+
+ if (_plugins.front()->reconfigurable_io()) {
+ assert (_plugins.size() == 1);
+ in = _plugins.front()->input_streams();
+ } else {
+ in = _plugins[0]->get_info()->n_inputs;
+ }
- DEBUG_TRACE (DEBUG::Processors, string_compose ("Plugin insert, static input streams = %1, match using %2\n", in, _match.method));
+ DEBUG_TRACE (DEBUG::Processors, string_compose ("Plugin insert, input streams = %1, match using %2\n", in, _match.method));
if (_match.method == Split) {
@@ -171,17 +182,13 @@ PluginInsert::input_streams() const
}
return in;
- } else if (in == ChanCount::INFINITE) {
-
- return _plugins[0]->input_streams ();
-
} else {
for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) {
in.set (*t, in.get (*t) * _plugins.size ());
}
+
return in;
-
}
}
@@ -463,7 +470,7 @@ PluginInsert::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end
* at the transitions of "active"
*/
- uint32_t out = _plugins[0]->get_info()->n_outputs.n_audio();
+ uint32_t out = output_streams().n_audio ();
for (uint32_t n = 0; n < out; ++n) {
bufs.get_audio (n).silence (nframes);
@@ -475,8 +482,8 @@ PluginInsert::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end
/* does this need to be done with MIDI? it appears not */
- uint32_t in = _plugins[0]->get_info()->n_inputs.n_audio();
- uint32_t out = _plugins[0]->get_info()->n_outputs.n_audio();
+ uint32_t in = input_streams ().n_audio ();
+ uint32_t out = output_streams().n_audio ();
if (out > in) {