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:
parent
b7369f421f
commit
c6740b7cb0
@ -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);
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user