volatile in stupid
[ardour.git] / libs / ardour / session_process.cc
index 4af6b10b89c840b36d1ead9dac1c8ba35ba7c1d1..05b800fead11b248af4a308ec58047a57ff56528 100644 (file)
@@ -116,6 +116,8 @@ Session::no_roll (pframes_t nframes)
                _click_io->silence (nframes);
        }
 
+       ltc_tx_send_time_code_for_cycle (_transport_frame, end_frame, _target_transport_speed, _transport_speed, nframes);
+
        if (_process_graph) {
                DEBUG_TRACE(DEBUG::ProcessThreads,"calling graph/no-roll\n");
                _process_graph->routes_no_roll( nframes, _transport_frame, end_frame, non_realtime_work_pending(), declick);
@@ -341,8 +343,8 @@ Session::process_with_events (pframes_t nframes)
        if (_transport_speed == 1.0) {
                frames_moved = (framecnt_t) nframes;
        } else {
-               interpolation.set_target_speed (fabs(_target_transport_speed));
-               interpolation.set_speed (fabs(_transport_speed));
+               interpolation.set_target_speed (_target_transport_speed);
+               interpolation.set_speed (_transport_speed);
                frames_moved = (framecnt_t) interpolation.interpolate (0, nframes, 0, 0);
        }
 
@@ -666,6 +668,7 @@ Session::track_slave_state (float slave_speed, framepos_t slave_transport_frame,
                                }
 
                                if (slave_transport_frame != _transport_frame) {
+                                       DEBUG_TRACE (DEBUG::Slave, string_compose ("require locate to run. eng: %1 -> sl: %2\n", _transport_frame, slave_transport_frame));
                                        locate (slave_transport_frame, false, false);
                                }
                                _slave_state = Running;
@@ -788,6 +791,7 @@ Session::process_without_events (pframes_t nframes)
 
        if (!_exporting && _slave) {
                if (!follow_slave (nframes)) {
+                       ltc_tx_send_time_code_for_cycle (_transport_frame, _transport_frame, 0, 0 , nframes);
                        return;
                }
        }
@@ -800,8 +804,8 @@ Session::process_without_events (pframes_t nframes)
        if (_transport_speed == 1.0) {
                frames_moved = (framecnt_t) nframes;
        } else {
-               interpolation.set_target_speed (fabs(_target_transport_speed));
-               interpolation.set_speed (fabs(_transport_speed));
+               interpolation.set_target_speed (_target_transport_speed);
+               interpolation.set_speed (_transport_speed);
                frames_moved = (framecnt_t) interpolation.interpolate (0, nframes, 0, 0);
        }
 
@@ -809,6 +813,8 @@ Session::process_without_events (pframes_t nframes)
                send_midi_time_code_for_cycle (_transport_frame, _transport_frame + frames_moved, nframes);
        }
 
+       ltc_tx_send_time_code_for_cycle (_transport_frame, _transport_frame + frames_moved, _target_transport_speed, _transport_speed, nframes);
+
        framepos_t const stop_limit = compute_stop_limit ();
 
        if (maybe_stop (stop_limit)) {
@@ -829,16 +835,6 @@ Session::process_without_events (pframes_t nframes)
 
        get_track_statistics ();
 
-       /* XXX: I'm not sure whether this is correct, but at least it
-          matches process_with_events, so that this new frames_moved
-          is -ve when transport speed is -ve.  This means that the
-          transport position is updated correctly when we are in
-          reverse.  It seems a bit wrong that we're not using the
-          interpolator to compute this.
-       */
-
-       frames_moved = (framecnt_t) floor (_transport_speed * nframes);
-
        if (frames_moved < 0) {
                decrement_transport_position (-frames_moved);
        } else {