summaryrefslogtreecommitdiffstats
path: root/src/libs/engine/PostProcessor.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-10-01 03:23:30 +0000
committerDavid Robillard <d@drobilla.net>2007-10-01 03:23:30 +0000
commit344cdcbd4f2bc7a9203b4e98da2ac349581e521a (patch)
tree1d91bb47256094b8af4b3afe8a0e5514f0032d75 /src/libs/engine/PostProcessor.cpp
parent8ebd59309b153e7337f2e6668b7e2cb4301cc34a (diff)
downloadingen-344cdcbd4f2bc7a9203b4e98da2ac349581e521a.tar.gz
ingen-344cdcbd4f2bc7a9203b4e98da2ac349581e521a.tar.bz2
ingen-344cdcbd4f2bc7a9203b4e98da2ac349581e521a.zip
Generic audio thread generated Event sending system.
git-svn-id: http://svn.drobilla.net/lad/ingen@793 a436a847-0d15-0410-975c-d299462d15a1
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()) {