diff options
author | David Robillard <d@drobilla.net> | 2012-05-09 01:14:30 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2012-05-09 01:14:30 +0000 |
commit | baeb3c1872a989b69eb89fae04f93c59b06f258e (patch) | |
tree | 83720f9c7bad7ab26c910180d8caea2fd4cb7e70 /src/server/ingen_lv2.cpp | |
parent | 4d46a232b30be99bc34e581cbc636345f77c6bc4 (diff) | |
download | ingen-baeb3c1872a989b69eb89fae04f93c59b06f258e.tar.gz ingen-baeb3c1872a989b69eb89fae04f93c59b06f258e.tar.bz2 ingen-baeb3c1872a989b69eb89fae04f93c59b06f258e.zip |
Simply event interface design and make only one pre-process thread.
This makes event pre-processing actually safe for multiple interfaces since multiple events will never be pre-processed simultaneously and the pre-process order is definitely the same as the execute order.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@4323 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/server/ingen_lv2.cpp')
-rw-r--r-- | src/server/ingen_lv2.cpp | 16 |
1 files changed, 5 insertions, 11 deletions
diff --git a/src/server/ingen_lv2.cpp b/src/server/ingen_lv2.cpp index 94e7344d..731c2f6f 100644 --- a/src/server/ingen_lv2.cpp +++ b/src/server/ingen_lv2.cpp @@ -45,7 +45,6 @@ #include "AudioBuffer.hpp" #include "Driver.hpp" #include "Engine.hpp" -#include "EventQueue.hpp" #include "EventWriter.hpp" #include "PatchImpl.hpp" #include "PostProcessor.hpp" @@ -426,12 +425,10 @@ ingen_instantiate(const LV2_Descriptor* descriptor, plugin->main = new MainThread(engine); plugin->main->set_name("Main"); - SharedPtr<Server::EventQueue> queue(new Server::EventQueue()); - SharedPtr<Server::EventWriter> interface( - new Server::EventWriter(*engine.get(), *queue.get())); + SharedPtr<EventWriter> interface = + SharedPtr<EventWriter>(engine->interface(), NullDeleter<EventWriter>); plugin->world->set_engine(interface); - engine->add_event_source(queue); Raul::Thread::get().set_context(Server::THREAD_PRE_PROCESS); Server::ThreadManager::single_threaded = true; @@ -451,23 +448,20 @@ ingen_instantiate(const LV2_Descriptor* descriptor, context.locate(0, UINT_MAX, 0); engine->post_processor()->set_end_time(UINT_MAX); - - queue->process(*engine->post_processor(), context, false); + engine->process_events(context); engine->post_processor()->process(); plugin->world->parser()->parse_file(plugin->world, plugin->world->engine().get(), patch->filename); - while (!queue->empty()) { - queue->process(*engine->post_processor(), context, false); + while (engine->pending_events()) { + engine->process_events(context); engine->post_processor()->process(); } engine->deactivate(); - //plugin->world->load_module("osc_server"); - return (LV2_Handle)plugin; } |