diff options
author | David Robillard <d@drobilla.net> | 2010-02-24 23:12:34 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2010-02-24 23:12:34 +0000 |
commit | e853d3dfcf450f6160e19f20b6b67e251c906169 (patch) | |
tree | 6b62d2d1a7f3a047f141e58caee4e5e71ac1f4de /src/engine/JackDriver.cpp | |
parent | 784dc03a78dc338b45111ebdca45371dfaaa6fa9 (diff) | |
download | ingen-e853d3dfcf450f6160e19f20b6b67e251c906169.tar.gz ingen-e853d3dfcf450f6160e19f20b6b67e251c906169.tar.bz2 ingen-e853d3dfcf450f6160e19f20b6b67e251c906169.zip |
Add new Delay internal.
Preliminary work towards split cycles.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2485 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/JackDriver.cpp')
-rw-r--r-- | src/engine/JackDriver.cpp | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/engine/JackDriver.cpp b/src/engine/JackDriver.cpp index 18426bf4..78b14121 100644 --- a/src/engine/JackDriver.cpp +++ b/src/engine/JackDriver.cpp @@ -417,11 +417,11 @@ JackDriver::_process_cb(jack_nframes_t nframes) _transport_state = jack_transport_query(_client, &_position); - _process_context.set_time_slice(nframes, start_of_current_cycle, end_of_current_cycle); + _process_context.set_time_slice(nframes, 0, start_of_current_cycle, end_of_current_cycle); for (Engine::ProcessSlaves::iterator i = _engine.process_slaves().begin(); i != _engine.process_slaves().end(); ++i) { - (*i)->context().set_time_slice(nframes, start_of_current_cycle, end_of_current_cycle); + (*i)->context().set_time_slice(nframes, 0, start_of_current_cycle, end_of_current_cycle); } // Read input @@ -432,13 +432,29 @@ JackDriver::_process_cb(jack_nframes_t nframes) _engine.control_bindings()->pre_process(_process_context, PtrCast<EventBuffer>(_root_patch->port_impl(0)->buffer(0)).get()); + _engine.post_processor()->set_end_time(_process_context.end()); + // Process events that came in during the last cycle // (Aiming for jitter-free 1 block event latency, ideally) _engine.process_events(_process_context); // Run root patch - if (_root_patch) + if (_root_patch) { _root_patch->process(_process_context); +#if 0 + const FrameTime cycle_start = _process_context.start(); + static const SampleCount control_block_size = nframes / 2; + for (jack_nframes_t i = 0; i < nframes; i += control_block_size) { + const SampleCount block_size = (i + control_block_size < nframes) + ? control_block_size + : nframes - i; + _process_context.set_time_slice(block_size, i, + cycle_start + i, + cycle_start + i + block_size); + _root_patch->process(_process_context); + } +#endif + } // Emit control binding feedback _engine.control_bindings()->post_process(_process_context, @@ -452,7 +468,6 @@ JackDriver::_process_cb(jack_nframes_t nframes) for (Raul::List<JackPort*>::iterator i = _ports.begin(); i != _ports.end(); ++i) (*i)->post_process(_process_context); - _engine.post_processor()->set_end_time(_process_context.end()); return 0; } |