summaryrefslogtreecommitdiffstats
path: root/src/server/events/CreatePort.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2015-10-24 19:27:39 +0000
committerDavid Robillard <d@drobilla.net>2015-10-24 19:27:39 +0000
commit732bfb33105b4a534bc17caae9a50a1ccfcd7570 (patch)
treebad9715a99f11d17342adaef372361c3697beee9 /src/server/events/CreatePort.cpp
parentade7143eb2af64fd6743a64ebf1786dd5bbe1092 (diff)
downloadingen-732bfb33105b4a534bc17caae9a50a1ccfcd7570.tar.gz
ingen-732bfb33105b4a534bc17caae9a50a1ccfcd7570.tar.bz2
ingen-732bfb33105b4a534bc17caae9a50a1ccfcd7570.zip
Zero-copy to/from driver ports where possible
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@5778 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/server/events/CreatePort.cpp')
-rw-r--r--src/server/events/CreatePort.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/server/events/CreatePort.cpp b/src/server/events/CreatePort.cpp
index 173b8a73..0b58ee89 100644
--- a/src/server/events/CreatePort.cpp
+++ b/src/server/events/CreatePort.cpp
@@ -125,12 +125,19 @@ CreatePort::pre_process()
poly_i->second.type() == uris.forge.Bool &&
poly_i->second.get<int32_t>());
- if (!(_graph_port = _graph->create_port(
- bufs, Raul::Symbol(_path.symbol()),
- _port_type, _buf_type, buf_size, _is_output, polyphonic))) {
- return Event::pre_process_done(Status::CREATION_FAILED, _path);
+ // Create 0 value if the port requires one
+ Atom value;
+ if (_port_type == PortType::CONTROL || _port_type == PortType::CV) {
+ value = bufs.forge().make(0.0f);
}
+ // Create port
+ _graph_port = new DuplexPort(bufs, _graph, Raul::Symbol(_path.symbol()),
+ _graph->num_ports_non_rt(),
+ polyphonic,
+ _port_type, _buf_type, buf_size,
+ value, _is_output);
+
_graph_port->properties().insert(_properties.begin(), _properties.end());
_engine.store()->add(_graph_port);
@@ -141,8 +148,7 @@ CreatePort::pre_process()
}
if (!_graph->parent()) {
- _engine_port = _engine.driver()->create_port(
- dynamic_cast<DuplexPort*>(_graph_port));
+ _engine_port = _engine.driver()->create_port(_graph_port);
}
_ports_array = new Raul::Array<PortImpl*>(old_n_ports + 1, NULL);