diff options
author | Hans Baier <hansfbaier@googlemail.com> | 2009-01-05 09:22:27 +0000 |
---|---|---|
committer | Hans Baier <hansfbaier@googlemail.com> | 2009-01-05 09:22:27 +0000 |
commit | 598b412e6b2ee0f042e983b69cd6e2d84228e18f (patch) | |
tree | fbb84882a1955f36df74fa939d9f5882db1fc787 /libs/ardour/session_process.cc | |
parent | 5f5a570e5094aa6165f44bb6dbcab4a28c617bfa (diff) |
* further reduce the spaghettiness of Session::follow_slave
git-svn-id: svn://localhost/ardour2/branches/3.0@4386 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/session_process.cc')
-rw-r--r-- | libs/ardour/session_process.cc | 84 |
1 files changed, 45 insertions, 39 deletions
diff --git a/libs/ardour/session_process.cc b/libs/ardour/session_process.cc index 0be6c8abdc..1f80f9b60a 100644 --- a/libs/ardour/session_process.cc +++ b/libs/ardour/session_process.cc @@ -583,45 +583,8 @@ Session::follow_slave (nframes_t nframes, nframes_t offset) cerr << "reached silent_motion:" <<endl; #endif - if (slave_speed && _transport_speed) { - - /* something isn't right, but we should move with the master - for now. - */ - - bool need_butler; - - prepare_diskstreams (); - silent_process_routes (nframes, offset); - commit_diskstreams (nframes, need_butler); - - if (need_butler) { - summon_butler (); - } - - int32_t frames_moved = (int32_t) floor (_transport_speed * nframes); - - if (frames_moved < 0) { - decrement_transport_position (-frames_moved); - } else { - increment_transport_position (frames_moved); - } - - nframes_t stop_limit; - - if (actively_recording()) { - stop_limit = max_frames; - } else { - if (Config->get_stop_at_session_end()) { - stop_limit = current_end_frame(); - } else { - stop_limit = max_frames; - } - } - - maybe_stop (stop_limit); - } - + follow_slave_silently(nframes, offset, slave_speed); + noroll: /* don't move at all */ #ifdef DEBUG_SLAVES @@ -780,6 +743,49 @@ Session::track_slave_state( } void +Session::follow_slave_silently(nframes_t nframes, nframes_t offset, float slave_speed) +{ + if (slave_speed && _transport_speed) { + + /* something isn't right, but we should move with the master + for now. + */ + + bool need_butler; + + prepare_diskstreams (); + silent_process_routes (nframes, offset); + commit_diskstreams (nframes, need_butler); + + if (need_butler) { + summon_butler (); + } + + int32_t frames_moved = (int32_t) floor (_transport_speed * nframes); + + if (frames_moved < 0) { + decrement_transport_position (-frames_moved); + } else { + increment_transport_position (frames_moved); + } + + nframes_t stop_limit; + + if (actively_recording()) { + stop_limit = max_frames; + } else { + if (Config->get_stop_at_session_end()) { + stop_limit = current_end_frame(); + } else { + stop_limit = max_frames; + } + } + + maybe_stop (stop_limit); + } +} + +void Session::process_without_events (nframes_t nframes) { bool session_needs_butler = false; |