summaryrefslogtreecommitdiff
path: root/libs/ardour/session_process.cc
diff options
context:
space:
mode:
authorHans Baier <hansfbaier@googlemail.com>2009-01-05 09:22:27 +0000
committerHans Baier <hansfbaier@googlemail.com>2009-01-05 09:22:27 +0000
commit598b412e6b2ee0f042e983b69cd6e2d84228e18f (patch)
treefbb84882a1955f36df74fa939d9f5882db1fc787 /libs/ardour/session_process.cc
parent5f5a570e5094aa6165f44bb6dbcab4a28c617bfa (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.cc84
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;