From f982e4b62ebba89ead634169ebe4e281cc7df46a Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 26 Feb 2010 02:23:52 +0000 Subject: Fix queued connections (e.g. event input => print). git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2495 a436a847-0d15-0410-975c-d299462d15a1 --- src/engine/ConnectionImpl.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'src/engine/ConnectionImpl.cpp') diff --git a/src/engine/ConnectionImpl.cpp b/src/engine/ConnectionImpl.cpp index c6ccf3ba..8fa770f7 100644 --- a/src/engine/ConnectionImpl.cpp +++ b/src/engine/ConnectionImpl.cpp @@ -72,12 +72,17 @@ ConnectionImpl::dump() const void ConnectionImpl::get_sources(Context& context, uint32_t voice, - Buffer** srcs, uint32_t max_num_srcs, uint32_t& num_srcs) + IntrusivePtr* srcs, uint32_t max_num_srcs, uint32_t& num_srcs) { - if (must_queue()) - return; - - if (must_mix()) { + if (must_queue() && _queue->read_space() > 0) { + LV2_Object obj; + _queue->peek(sizeof(LV2_Object), &obj); + IntrusivePtr buf = context.engine().buffer_factory()->get( + dst_port()->buffer_type(), sizeof(LV2_Object) + obj.size); + void* data = buf->port_data(PortType::MESSAGE, context.offset()); + _queue->full_read(sizeof(LV2_Object) + obj.size, (LV2_Object*)data); + srcs[num_srcs++] = buf; + } else if (must_mix()) { // Mixing down voices: every src voice mixed into every dst voice for (uint32_t v = 0; v < _src_port->poly(); ++v) { assert(num_srcs < max_num_srcs); -- cgit v1.2.1