summaryrefslogtreecommitdiffstats
path: root/src/engine/events
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/events')
-rw-r--r--src/engine/events/Connect.cpp18
-rw-r--r--src/engine/events/RequestMetadata.cpp2
2 files changed, 16 insertions, 4 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;
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 {