diff options
Diffstat (limited to 'src/libs/engine/PostProcessor.cpp')
-rw-r--r-- | src/libs/engine/PostProcessor.cpp | 25 |
1 files changed, 22 insertions, 3 deletions
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 <pthread.h> #include <raul/SRSWQueue.hpp> //#include <raul/Maid.hpp> +#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(); |