Ardour's Tracks/Routes are not capable of handing more than one
MIDI port per per route properly. Most Plugin standards don't support
this either.
However, at this point in time IO::ensure_ports_locked() is not
limited by this restriction!
It is still possible to indirectly add a 2nd MIDI data-buffer
and output-port via plugin pin-management, or simply plugins with
two MIDI output ports when using flexible I/O.
boost::shared_ptr<Bundle> bundle () { return _bundle; }
+ bool can_add_port (DataType) const;
+
int add_port (std::string connection, void *src, DataType type = DataType::NIL);
int remove_port (boost::shared_ptr<Port>, void *src);
int connect (boost::shared_ptr<Port> our_port, std::string other_port, void *src);
return 0;
}
+bool
+IO::can_add_port (DataType type) const
+{
+ switch (type) {
+ case DataType::NIL:
+ return false;
+ case DataType::AUDIO:
+ return true;
+ case DataType::MIDI:
+ return _ports.count ().n_midi() < 1;
+ }
+}
+
int
IO::remove_port (boost::shared_ptr<Port> port, void* src)
{
type = _default_type;
}
+ if (!can_add_port (type)) {
+ return -1;
+ }
+
ChanCount before = _ports.count ();
ChanCount after = before;
after.set (type, after.get (type) + 1);