tweaks to be ready for more information timecode display in Timecode clock mode
[ardour.git] / libs / ardour / session_transport.cc
index 4f0fb90c53a6d76ccb2357be9aceff248c76ace7..6141716301c23615e5fb8db2331b50dbcf8c0386 100644 (file)
@@ -99,6 +99,7 @@ Session::request_sync_source (Slave* new_slave)
        _was_seamless = seamless;
 
        ev->slave = new_slave;
+       DEBUG_TRACE (DEBUG::Slave, "sent request for new slave\n");
        queue_event (ev);
 }
 
@@ -645,8 +646,12 @@ Session::non_realtime_stop (bool abort, int on_entry, bool& finished)
 
        if ((ptw & PostTransportLocate) && !config.get_external_sync() && pending_locate_roll) {
                request_transport_speed (1.0);
-               pending_locate_roll = false;
        }
+
+       /* Even if we didn't do a pending locate roll this time, we don't want it hanging
+          around for next time.
+       */
+       pending_locate_roll = false;
 }
 
 void
@@ -850,7 +855,7 @@ Session::locate (framepos_t target_frame, bool with_roll, bool with_flush, bool
         * though, is all the housekeeping that is associated with non-linear
         * changes in the value of _transport_frame. 
         */
-        
+
        if (actively_recording() && !for_seamless_loop) {
                return;
        }
@@ -1013,6 +1018,8 @@ Session::set_transport_speed (double speed, bool abort, bool clear_state, bool a
 
        if (actively_recording() && speed != 1.0 && speed != 0.0) {
                /* no varispeed during recording */
+               DEBUG_TRACE (DEBUG::Transport, string_compose ("No varispeed during recording cur_speed %1, frame %2\n", 
+                                                      _transport_speed, _transport_frame));
                return;
        }
 
@@ -1317,6 +1324,8 @@ Session::use_sync_source (Slave* new_slave)
        delete _slave;
        _slave = new_slave;
 
+       DEBUG_TRACE (DEBUG::Slave, string_compose ("set new slave to %1\n", _slave));
+
        send_full_time_code (_transport_frame);
 
        boost::shared_ptr<RouteList> rl = routes.reader();
@@ -1366,6 +1375,24 @@ Session::switch_to_sync_source (SyncSource src)
                }
                break;
 
+       case LTC:
+#ifdef HAVE_LTC
+               if (_slave && dynamic_cast<LTC_Slave*>(_slave)) {
+                       return;
+               }
+
+               try {
+                       new_slave = new LTC_Slave (*this);
+               }
+
+               catch (failed_constructor& err) {
+                       return;
+               }
+#else
+               return;
+#endif
+               break;
+
        case MIDIClock:
                if (_slave && dynamic_cast<MIDIClock_Slave*>(_slave)) {
                        return;