start trying to remove the use of Plugin::info()->n_{inputs,outputs}, which alway...
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 1 Nov 2011 21:48:45 +0000 (21:48 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 1 Nov 2011 21:48:45 +0000 (21:48 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@10386 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/ardour/audio_unit.cc
libs/ardour/plugin_insert.cc

index b53d62614ff95214b1b81627ab183688aa8a24d7..5e15d9b48e872082cb7d8e598b197c63c49da26e 100644 (file)
@@ -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;
 }
index bdda2809b20cf0294c215778bcaaf6b079b88dea..744b53a652a9f06acbcd8d149263cdca16d940d1 100644 (file)
@@ -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) {