diff options
author | Robin Gareus <robin@gareus.org> | 2019-07-11 22:57:34 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2019-07-11 22:57:34 +0200 |
commit | c6740b7cb06591f68851a3821a6cbc2b095e5bd0 (patch) | |
tree | ca7652703c2511367cdb39f0e70b340f13717cb6 /libs/ardour/io.cc | |
parent | b7369f421f151a7e9f31969828c38882027cd996 (diff) |
Prevent adding a 2nd MIDI input/output port
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.
Diffstat (limited to 'libs/ardour/io.cc')
-rw-r--r-- | libs/ardour/io.cc | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/libs/ardour/io.cc b/libs/ardour/io.cc index c6624b2e4a..52bbd59b5f 100644 --- a/libs/ardour/io.cc +++ b/libs/ardour/io.cc @@ -200,6 +200,19 @@ IO::connect (boost::shared_ptr<Port> our_port, 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) { @@ -269,6 +282,10 @@ IO::add_port (string destination, void* src, DataType type) type = _default_type; } + if (!can_add_port (type)) { + return -1; + } + ChanCount before = _ports.count (); ChanCount after = before; after.set (type, after.get (type) + 1); |