summaryrefslogtreecommitdiffstats
path: root/src/engine/DuplexPort.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2009-11-16 00:30:35 +0000
committerDavid Robillard <d@drobilla.net>2009-11-16 00:30:35 +0000
commit3d89115a67a9c947a28539ffdd2399808a53279b (patch)
tree826b900de3979eed9c31aae0d3ac560d39b53460 /src/engine/DuplexPort.cpp
parent597fa9212f27d2448c0cdd20fbf616928c662cc1 (diff)
downloadingen-3d89115a67a9c947a28539ffdd2399808a53279b.tar.gz
ingen-3d89115a67a9c947a28539ffdd2399808a53279b.tar.bz2
ingen-3d89115a67a9c947a28539ffdd2399808a53279b.zip
Rework objects extension to have "value ports" and "message ports".
Make audio and control buffers in ingen actually object buffers (towards interop). Overhaul the hell out of ingen buffer and mixing stuff. git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2266 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/DuplexPort.cpp')
-rw-r--r--src/engine/DuplexPort.cpp53
1 files changed, 12 insertions, 41 deletions
diff --git a/src/engine/DuplexPort.cpp b/src/engine/DuplexPort.cpp
index 78a2bb94..6cf1d908 100644
--- a/src/engine/DuplexPort.cpp
+++ b/src/engine/DuplexPort.cpp
@@ -34,6 +34,7 @@ using namespace Shared;
DuplexPort::DuplexPort(
+ BufferFactory& bufs,
NodeImpl* parent,
const string& name,
uint32_t index,
@@ -42,13 +43,12 @@ DuplexPort::DuplexPort(
const Raul::Atom& value,
size_t buffer_size,
bool is_output)
- : PortImpl(parent, name, index, poly, type, value, buffer_size)
- , InputPort(parent, name, index, poly, type, value, buffer_size)
- , OutputPort(parent, name, index, poly, type, value, buffer_size)
+ : PortImpl(bufs, parent, name, index, poly, type, value, buffer_size)
+ , InputPort(bufs, parent, name, index, poly, type, value, buffer_size)
+ , OutputPort(bufs, parent, name, index, poly, type, value, buffer_size)
, _is_output(is_output)
{
assert(PortImpl::_parent == parent);
- _fixed_buffers = true;
}
@@ -56,30 +56,17 @@ DuplexPort::DuplexPort(
void
DuplexPort::pre_process(Context& context)
{
- /*cerr << endl << "{ duplex pre" << endl;
- cerr << path() << " duplex pre: fixed buffers: " << fixed_buffers() << endl;
- cerr << path() << " duplex pre: buffer: " << buffer(0) << endl;
- cerr << path() << " duplex pre: is_output: " << _is_output << " { " << endl;*/
-
- // If we're a patch output, prepare buffers for write (so plugins can deliver to them)
+ // If we're a patch output, we're an input from the internal perspective.
+ // Prepare buffers for write (so plugins can deliver to them)
if (_is_output) {
- for (uint32_t i=0; i < _poly; ++i)
- if (!_buffers->at(i)->is_joined())
- _buffers->at(i)->prepare_write(context);
+ for (uint32_t v = 0; v < _poly; ++v)
+ _buffers->at(v)->prepare_write(context);
- // Otherwise, we're a patch input, do whatever a normal node's input port does
- // (mix down inputs from an outside "patch is a node" perspective)
+ // If we're a patch input, were an output from the internal perspective.
+ // Do whatever a normal node's input port does to prepare input for reading.
} else {
InputPort::pre_process(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()
- << ", is_output: " << _is_output << endl;*/
- //cerr << "} duplex pre " << path() << endl;
}
@@ -87,30 +74,14 @@ DuplexPort::pre_process(Context& context)
void
DuplexPort::post_process(Context& context)
{
- /*cerr << endl << "{ duplex post" << endl;
- cerr << path() << " duplex post: fixed buffers: " << fixed_buffers() << endl;
- cerr << path() << " duplex post: buffer: " << buffer(0) << endl;
- cerr << path() << " duplex post: is_output: " << _is_output << " { " << endl;
-
- 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 we're a patch output
-
-
+ // If we're a patch output, we're an input from the internal perspective.
+ // Mix down input delivered by plugins so output (external perspective) is ready.
if (_is_output) {
- // Then we've been delivered to as an input (internal perspective)
- // Mix down this input so patch output ports (external perspective) are ready
InputPort::pre_process(context);
if (_broadcast)
broadcast_value(context, false);
}
-
- //cerr << "} duplex post " << path() << endl;
}