summaryrefslogtreecommitdiffstats
path: root/src/engine/InputPort.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2008-11-22 06:54:01 +0000
committerDavid Robillard <d@drobilla.net>2008-11-22 06:54:01 +0000
commitfc397802d408441ce354c5b0328adc93f617aca5 (patch)
tree20c5e837ce7153d4989e4a290527d131353b727a /src/engine/InputPort.cpp
parent91575b926a29fab3d8cfab439b99198be032a45f (diff)
downloadingen-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.cpp16
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;