summaryrefslogtreecommitdiffstats
path: root/src/engine/events/Connect.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2009-11-22 03:06:25 +0000
committerDavid Robillard <d@drobilla.net>2009-11-22 03:06:25 +0000
commite479da3c26d41e977cf55b8e2355db45991be09f (patch)
treef6887a9b19eaee951dafd17fea8021556bff1169 /src/engine/events/Connect.cpp
parent58807f5840592959c31b415f7e2d64967594b5ee (diff)
downloadingen-e479da3c26d41e977cf55b8e2355db45991be09f.tar.gz
ingen-e479da3c26d41e977cf55b8e2355db45991be09f.tar.bz2
ingen-e479da3c26d41e977cf55b8e2355db45991be09f.zip
Partial support for message/value ports and the message context.
This use case now works: - Add an event input and the "print" plugin from imum.lv2 to ingen - Connect the event input to the input of "print" - Hook Ingen up to JACK and play some MIDI events (or get events to the print plugin from anywhere else) - The "print" plugin will print the received events to the console in the message context (i.e. the audio thread is realtime safe) git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2281 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/events/Connect.cpp')
-rw-r--r--src/engine/events/Connect.cpp18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/engine/events/Connect.cpp b/src/engine/events/Connect.cpp
index 18c31e03..a120aee4 100644
--- a/src/engine/events/Connect.cpp
+++ b/src/engine/events/Connect.cpp
@@ -75,9 +75,21 @@ Connect::pre_process()
return;
}
- if ( ! (_src_port->type() == _dst_port->type()
- || ( (_src_port->type() == PortType::CONTROL || _src_port->type() == PortType::AUDIO)
- && (_dst_port->type() == PortType::CONTROL || _dst_port->type() == PortType::AUDIO) ))) {
+ const PortType src_type = _src_port->type();
+ const PortType dst_type = _dst_port->type();
+
+ if ( !(
+ // Equal types
+ (src_type == dst_type)
+
+ || // or Control=>Audio or Audio=>Control
+ ((src_type == PortType::CONTROL || src_type == PortType::AUDIO)
+ && (dst_type == PortType::CONTROL || dst_type == PortType::AUDIO))
+
+ || // or Events=>Message or Message=>Events
+ ((src_type == PortType::EVENTS || src_type == PortType::MESSAGE)
+ && (dst_type == PortType::EVENTS || dst_type == PortType::MESSAGE))
+ )) {
_error = TYPE_MISMATCH;
QueuedEvent::pre_process();
return;