diff options
author | David Robillard <d@drobilla.net> | 2008-11-22 06:54:01 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2008-11-22 06:54:01 +0000 |
commit | fc397802d408441ce354c5b0328adc93f617aca5 (patch) | |
tree | 20c5e837ce7153d4989e4a290527d131353b727a /src/engine/InputPort.cpp | |
parent | 91575b926a29fab3d8cfab439b99198be032a45f (diff) | |
download | ingen-fc397802d408441ce354c5b0328adc93f617aca5.tar.gz ingen-fc397802d408441ce354c5b0328adc93f617aca5.tar.bz2 ingen-fc397802d408441ce354c5b0328adc93f617aca5.zip |
Fix event loss for outputs connected directly to several inputs (fix ticket #231).
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@1763 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/InputPort.cpp')
-rw-r--r-- | src/engine/InputPort.cpp | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/engine/InputPort.cpp b/src/engine/InputPort.cpp index 3257144c..531ca468 100644 --- a/src/engine/InputPort.cpp +++ b/src/engine/InputPort.cpp @@ -207,6 +207,8 @@ InputPort::pre_process(ProcessContext& context) if (can_direct()) { for (uint32_t i=0; i < _poly; ++i) { _buffers->at(i)->join(_connections.front()->buffer(i)); + _connections.front()->buffer(i)->prepare_read(context.start(), context.nframes()); + _buffers->at(i)->prepare_read(context.start(), context.nframes()); } do_mixdown = false; } @@ -224,9 +226,10 @@ InputPort::pre_process(ProcessContext& context) /*if (type() == DataType::EVENT) for (uint32_t i=0; i < _poly; ++i) - cerr << path() << " (" << buffer(i) << ") # events: " - << ((EventBuffer*)buffer(i))->event_count() - << ", joined: " << _buffers->at(i)->is_joined() << endl;*/ + if (((EventBuffer*)buffer(i))->event_count() > 0) + cerr << path() << " (" << buffer(i) << ") # events: " + << ((EventBuffer*)buffer(i))->event_count() + << ", joined: " << _buffers->at(i)->is_joined() << endl;*/ if (!do_mixdown) { /*#ifndef NDEBUG @@ -270,9 +273,10 @@ InputPort::post_process(ProcessContext& context) { broadcast(context); - // Prepare for next cycle - for (uint32_t i=0; i < _poly; ++i) - buffer(i)->prepare_write(context.start(), context.nframes()); + // Prepare buffers for next cycle + if (!can_direct()) + for (uint32_t i=0; i < _poly; ++i) + buffer(i)->prepare_write(context.start(), context.nframes()); _set_by_user = false; |