From c6740b7cb06591f68851a3821a6cbc2b095e5bd0 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Thu, 11 Jul 2019 22:57:34 +0200 Subject: 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. --- libs/ardour/ardour/io.h | 2 ++ libs/ardour/io.cc | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) (limited to 'libs') 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 () { 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, void *src); int connect (boost::shared_ptr 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 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, 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); -- cgit v1.2.3