summaryrefslogtreecommitdiffstats
path: root/src/libs/engine/PostProcessor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/engine/PostProcessor.cpp')
-rw-r--r--src/libs/engine/PostProcessor.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/libs/engine/PostProcessor.cpp b/src/libs/engine/PostProcessor.cpp
index d1b09271..96aee3b1 100644
--- a/src/libs/engine/PostProcessor.cpp
+++ b/src/libs/engine/PostProcessor.cpp
@@ -36,6 +36,8 @@ PostProcessor::PostProcessor(Engine& engine, size_t queue_size)
: _engine(engine)
, _max_time(0)
, _events(queue_size)
+ , _event_buffer_size(sizeof(SendPortValueEvent)) // FIXME: make generic
+ , _event_buffer((uint8_t*)malloc(_event_buffer_size))
{
}
@@ -43,15 +45,19 @@ PostProcessor::PostProcessor(Engine& engine, size_t queue_size)
void
PostProcessor::process()
{
+ const FrameTime end_time = _max_time.get();
+
/* 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();
+ /* FIXME: process events from all threads if parallel */
+
+ while (_engine.audio_driver()->context().event_sink().read(
+ _event_buffer_size, _event_buffer)) {
+ if (((Event*)_event_buffer)->time() > end_time)
+ break;
+ ((Event*)_event_buffer)->post_process();
}
- FrameTime end_time = _max_time.get();
+
/* Process normal events */
while ( ! _events.empty()) {