summaryrefslogtreecommitdiffstats
path: root/src/engine/Engine.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2010-02-04 01:29:34 +0000
committerDavid Robillard <d@drobilla.net>2010-02-04 01:29:34 +0000
commit36dc6bdb6d9b96e2a18acbe6c681a842d1590fb6 (patch)
treeeb01898024d18a0d1463a03cbcfaeb0a7e3956c4 /src/engine/Engine.cpp
parentaef3c9348218029a077f40081fd078a9e2ee85ca (diff)
downloadingen-36dc6bdb6d9b96e2a18acbe6c681a842d1590fb6.tar.gz
ingen-36dc6bdb6d9b96e2a18acbe6c681a842d1590fb6.tar.bz2
ingen-36dc6bdb6d9b96e2a18acbe6c681a842d1590fb6.zip
MIDI feedback.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2418 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/Engine.cpp')
-rw-r--r--src/engine/Engine.cpp40
1 files changed, 29 insertions, 11 deletions
diff --git a/src/engine/Engine.cpp b/src/engine/Engine.cpp
index 78420e3a..3f65b587 100644
--- a/src/engine/Engine.cpp
+++ b/src/engine/Engine.cpp
@@ -151,6 +151,16 @@ Engine::add_event_source(SharedPtr<EventSource> source)
}
+static void
+execute_and_delete_event(ProcessContext& context, QueuedEvent* ev)
+{
+ ev->pre_process();
+ ev->execute(context);
+ ev->post_process();
+ delete ev;
+}
+
+
bool
Engine::activate()
{
@@ -178,18 +188,26 @@ Engine::activate()
root_patch->compiled_patch(root_patch->compile());
_driver->set_root_patch(root_patch);
- // Add control port
- Shared::Resource::Properties properties;
- properties.insert(make_pair(uris.lv2_name, "Control"));
- properties.insert(make_pair(uris.rdf_type, uris.lv2ev_EventPort));
- properties.insert(make_pair(uris.rdf_type, uris.lv2_InputPort));
- Events::CreatePort* ev = new Events::CreatePort(*this, SharedPtr<Request>(), 0,
- "/ingen_control", uris.lv2ev_EventPort, false, properties);
- ev->pre_process();
ProcessContext context(*this);
- ev->execute(context);
- ev->post_process();
- delete ev;
+
+ Shared::Resource::Properties control_properties;
+ control_properties.insert(make_pair(uris.lv2_name, "Control"));
+ control_properties.insert(make_pair(uris.rdf_type, uris.lv2ev_EventPort));
+
+ // Add control input
+ Shared::Resource::Properties in_properties(control_properties);
+ in_properties.insert(make_pair(uris.rdf_type, uris.lv2_InputPort));
+
+ execute_and_delete_event(context, new Events::CreatePort(
+ *this, SharedPtr<Request>(), 0,
+ "/control_in", uris.lv2ev_EventPort, false, in_properties));
+
+ // Add control out
+ Shared::Resource::Properties out_properties(control_properties);
+ out_properties.insert(make_pair(uris.rdf_type, uris.lv2_OutputPort));
+ execute_and_delete_event(context, new Events::CreatePort(
+ *this, SharedPtr<Request>(), 0,
+ "/control_out", uris.lv2ev_EventPort, true, out_properties));
}
_driver->activate();