diff options
author | David Robillard <d@drobilla.net> | 2007-10-01 03:23:30 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2007-10-01 03:23:30 +0000 |
commit | 344cdcbd4f2bc7a9203b4e98da2ac349581e521a (patch) | |
tree | 1d91bb47256094b8af4b3afe8a0e5514f0032d75 /src/libs/engine/PostProcessor.cpp | |
parent | 8ebd59309b153e7337f2e6668b7e2cb4301cc34a (diff) | |
download | ingen-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.cpp | 18 |
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()) { |