From 399ddfc5b1d4f1f131362d0439821778c6681b23 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 30 Sep 2007 21:12:16 +0000 Subject: Better design for process() signature (pass everything needed in a single object parameter). Working port "monitoring" (connect an output to a control input, GUI will animate controller). git-svn-id: http://svn.drobilla.net/lad/ingen@788 a436a847-0d15-0410-975c-d299462d15a1 --- src/libs/engine/PostProcessor.cpp | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'src/libs/engine/PostProcessor.cpp') diff --git a/src/libs/engine/PostProcessor.cpp b/src/libs/engine/PostProcessor.cpp index ccf3b0a5..d1b09271 100644 --- a/src/libs/engine/PostProcessor.cpp +++ b/src/libs/engine/PostProcessor.cpp @@ -20,16 +20,22 @@ #include #include //#include +#include "events/SendPortValueEvent.hpp" #include "Event.hpp" #include "PostProcessor.hpp" +#include "Engine.hpp" +#include "AudioDriver.hpp" +#include "ProcessContext.hpp" -using std::cerr; using std::cout; using std::endl; +using namespace std; namespace Ingen { -PostProcessor::PostProcessor(size_t queue_size) - : _events(queue_size) +PostProcessor::PostProcessor(Engine& engine, size_t queue_size) + : _engine(engine) + , _max_time(0) + , _events(queue_size) { } @@ -37,8 +43,21 @@ PostProcessor::PostProcessor(size_t queue_size) void PostProcessor::process() { + /* Process any audio thread generated events */ + /* FIXME: process events from all thread if parallel */ + /* TODO: obviously this needs work to be generic */ + SendPortValueEvent ev(_engine, 0, NULL, false, 0, 0.0f); + while (_engine.audio_driver()->context().event_sink().read_control_change(ev)) { + ev.post_process(); + } + + FrameTime end_time = _max_time.get(); + + /* Process normal events */ while ( ! _events.empty()) { Event* const ev = _events.front(); + if (ev->time() > end_time) + break; _events.pop(); assert(ev); ev->post_process(); -- cgit v1.2.1