From e479da3c26d41e977cf55b8e2355db45991be09f Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 22 Nov 2009 03:06:25 +0000 Subject: 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 --- src/engine/events/Connect.cpp | 18 +++++++++++++++--- src/engine/events/RequestMetadata.cpp | 2 +- 2 files changed, 16 insertions(+), 4 deletions(-) (limited to 'src/engine/events') 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; diff --git a/src/engine/events/RequestMetadata.cpp b/src/engine/events/RequestMetadata.cpp index 82165460..f51651fc 100644 --- a/src/engine/events/RequestMetadata.cpp +++ b/src/engine/events/RequestMetadata.cpp @@ -96,7 +96,7 @@ RequestMetadata::execute(ProcessContext& context) if (port) { if (port->type() == PortType::CONTROL || port->type() == PortType::AUDIO) _value = ((AudioBuffer*)port->buffer(0).get())->value_at(0); // TODO: offset - else if (port->type() == PortType::VALUE) + else if (port->type() == PortType::VALUE || port->type() == PortType::MESSAGE) LV2Object::to_atom(context.engine().world(), ((ObjectBuffer*)port->buffer(0).get())->object(), _value); } else { -- cgit v1.2.1