summaryrefslogtreecommitdiffstats
path: root/src/libs/engine/LV2Node.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-09-20 02:43:59 +0000
committerDavid Robillard <d@drobilla.net>2007-09-20 02:43:59 +0000
commit8e747504412c62f27c599f3f5e001ff3e2e36a82 (patch)
tree78c96ae09ae1c3c52ccdee28dbf0851651d3c3c9 /src/libs/engine/LV2Node.cpp
parented782b485becdaa2db064adaa00f1ffcd4880c26 (diff)
downloadingen-8e747504412c62f27c599f3f5e001ff3e2e36a82.tar.gz
ingen-8e747504412c62f27c599f3f5e001ff3e2e36a82.tar.bz2
ingen-8e747504412c62f27c599f3f5e001ff3e2e36a82.zip
Fix voice-specific polyphony controls.
Restore patch polyphony correctly on client reattach. Fix crash on multiple polyphony changes w/ LV2 plugins. git-svn-id: http://svn.drobilla.net/lad/ingen@737 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/libs/engine/LV2Node.cpp')
-rw-r--r--src/libs/engine/LV2Node.cpp24
1 files changed, 14 insertions, 10 deletions
diff --git a/src/libs/engine/LV2Node.cpp b/src/libs/engine/LV2Node.cpp
index c8c13f38..146bc4bf 100644
--- a/src/libs/engine/LV2Node.cpp
+++ b/src/libs/engine/LV2Node.cpp
@@ -43,9 +43,11 @@ LV2Node::LV2Node(const Plugin* plugin,
Patch* parent,
SampleRate srate,
size_t buffer_size)
-: NodeBase(plugin, name, poly, parent, srate, buffer_size),
- _lv2_plugin(plugin->slv2_plugin()),
- _instances(NULL)
+ : NodeBase(plugin, name, poly, parent, srate, buffer_size)
+ , _lv2_plugin(plugin->slv2_plugin())
+ , _instances(NULL)
+ , _prepared_instances(NULL)
+ , _prepared_poly(poly)
{
assert(_lv2_plugin);
}
@@ -83,13 +85,15 @@ LV2Node::apply_poly(Raul::Maid& maid, uint32_t poly)
NodeBase::apply_poly(maid, poly);
- maid.push(_instances);
- _instances = _prepared_instances;
-
- for (uint32_t port=0; port < num_ports(); ++port)
- for (uint32_t voice = _polyphony; voice < _prepared_poly; ++voice)
- slv2_instance_connect_port((*_instances)[voice], port,
- _ports->at(port)->buffer(voice)->raw_data());
+ if (_prepared_instances) {
+ maid.push(_instances);
+ _instances = _prepared_instances;
+
+ for (uint32_t port=0; port < num_ports(); ++port)
+ for (uint32_t voice = _polyphony; voice < _prepared_poly; ++voice)
+ slv2_instance_connect_port((*_instances)[voice], port,
+ _ports->at(port)->buffer(voice)->raw_data());
+ }
_polyphony = poly;
_prepared_instances = NULL;