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 | |
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.
-rw-r--r-- | libs/ardour/ardour/io.h | 2 | ||||
-rw-r--r-- | libs/ardour/io.cc | 17 |
2 files changed, 19 insertions, 0 deletions
diff --git a/libs/ardour/ardour/io.h b/libs/ardour/ardour/io.h index 3f4fdc5797..d9fc412e27 100644 --- a/libs/ardour/ardour/io.h +++ b/libs/ardour/ardour/io.h @@ -104,6 +104,8 @@ public: 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); 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); |