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);