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; }
|
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 add_port (std::string connection, void *src, DataType type = DataType::NIL);
|
||||||
int remove_port (boost::shared_ptr<Port>, void *src);
|
int remove_port (boost::shared_ptr<Port>, void *src);
|
||||||
int connect (boost::shared_ptr<Port> our_port, std::string other_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;
|
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
|
int
|
||||||
IO::remove_port (boost::shared_ptr<Port> port, void* src)
|
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;
|
type = _default_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!can_add_port (type)) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
ChanCount before = _ports.count ();
|
ChanCount before = _ports.count ();
|
||||||
ChanCount after = before;
|
ChanCount after = before;
|
||||||
after.set (type, after.get (type) + 1);
|
after.set (type, after.get (type) + 1);
|
||||||
|
Loading…
Reference in New Issue
Block a user