From 9c3f49e5c78e21c4bfab3e5b7296b10d15f842bb Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 14 Oct 2016 15:07:57 -0400 Subject: Fix communication with connected sequence ports --- src/server/events/SetPortValue.cpp | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) (limited to 'src/server/events/SetPortValue.cpp') diff --git a/src/server/events/SetPortValue.cpp b/src/server/events/SetPortValue.cpp index 9530e2d3..2af9841b 100644 --- a/src/server/events/SetPortValue.cpp +++ b/src/server/events/SetPortValue.cpp @@ -55,6 +55,7 @@ SetPortValue::~SetPortValue() bool SetPortValue::pre_process(PreProcessContext& ctx) { + Ingen::URIs& uris = _engine.world()->uris(); if (_port->is_output()) { return Event::pre_process_done(Status::DIRECTION_MISMATCH, _port->path()); } @@ -65,6 +66,15 @@ SetPortValue::pre_process(PreProcessContext& ctx) _binding = _engine.control_bindings()->port_binding(_port); + if (_port->buffer_type() == uris.atom_Sequence) { + _buffer = _engine.buffer_factory()->get_buffer( + _port->buffer_type(), + _port->value_type(), + _engine.buffer_factory()->default_size(_port->buffer_type()), + false, + false); + } + return Event::pre_process_done(Status::SUCCESS); } @@ -84,7 +94,16 @@ SetPortValue::apply(RunContext& context) } Ingen::URIs& uris = _engine.world()->uris(); - Buffer* const buf = _port->buffer(0).get(); + Buffer* buf = _port->buffer(0).get(); + + if (_buffer) { + if (_port->user_buffer(context)) { + buf = _port->user_buffer(context).get(); + } else { + _port->set_user_buffer(context, _buffer); + buf = _buffer.get(); + } + } if (buf->type() == uris.atom_Sound || buf->type() == uris.atom_Float) { if (_value.type() == uris.forge.Float) { @@ -93,12 +112,10 @@ SetPortValue::apply(RunContext& context) _status = Status::TYPE_MISMATCH; } } else if (buf->type() == uris.atom_Sequence) { - if (buf->append_event(_time - context.start(), - _value.size(), - _value.type(), - (const uint8_t*)_value.get_body())) { - _port->raise_set_by_user_flag(); - } else { + if (!buf->append_event(_time - context.start(), + _value.size(), + _value.type(), + (const uint8_t*)_value.get_body())) { _status = Status::NO_SPACE; } } else if (buf->type() == uris.atom_URID) { -- cgit v1.2.1