13
0

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.
This commit is contained in:
Robin Gareus 2019-07-11 22:57:34 +02:00
parent b7369f421f
commit c6740b7cb0
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
2 changed files with 19 additions and 0 deletions

View File

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

View File

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