* further reduce the spaghettiness of Session::follow_slave
authorHans Baier <hansfbaier@googlemail.com>
Mon, 5 Jan 2009 09:22:27 +0000 (09:22 +0000)
committerHans Baier <hansfbaier@googlemail.com>
Mon, 5 Jan 2009 09:22:27 +0000 (09:22 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@4386 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/ardour/ardour/session.h
libs/ardour/session_process.cc

index 87bf7972a228b92a0b0798c7ad94409950dde832..81134d16fdfa209bf42c7c173bfa47e5aaf4957a 100644 (file)
@@ -1084,6 +1084,7 @@ class Session : public PBD::StatefulDestructible
                        nframes_t slave_transport_frame, 
                        nframes_t this_delta,
                        bool starting);
+       void follow_slave_silently(nframes_t nframes, nframes_t offset, float slave_speed);
        
        void set_slave_source (SlaveSource);
 
index 0be6c8abdc5a24d0b7fb4927bfbf4a1c676f6a9e..1f80f9b60a4ce16f1ef486c78998c76260645304 100644 (file)
@@ -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     
@@ -779,6 +742,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)
 {