use new _requested_transport_speed member in Session to correctly apply speed after changing direction

This commit is contained in:
Paul Davis 2021-02-12 09:36:41 -07:00
parent 07c16d38a2
commit d8eb016aaa

View file

@ -380,7 +380,8 @@ Session::set_transport_speed (double speed, bool abort, bool clear_state, bool a
if (speed != 0) { if (speed != 0) {
new_engine_speed = fabs (speed); new_engine_speed = fabs (speed);
if (speed < 0) speed = -1; _requested_transport_speed = speed;
if (speed < 0) speed = -1;
if (speed > 0) speed = 1; if (speed > 0) speed = 1;
} }
@ -425,6 +426,10 @@ Session::set_transport_speed (double speed, bool abort, bool clear_state, bool a
} }
} }
/* we are immediately honoring the speed request, there's nothing to keep track of. */
_requested_transport_speed = 0;
TFSM_STOP (abort, false); TFSM_STOP (abort, false);
} else if (transport_stopped() && speed == 1.0) { } else if (transport_stopped() && speed == 1.0) {
@ -457,6 +462,10 @@ Session::set_transport_speed (double speed, bool abort, bool clear_state, bool a
set_track_monitor_input_status (false); set_track_monitor_input_status (false);
} }
/* we are immediately honoring the speed request, there's nothing to keep track of. */
_requested_transport_speed = 0;
TFSM_EVENT (TransportFSM::StartTransport); TFSM_EVENT (TransportFSM::StartTransport);
} else { } else {
@ -490,10 +499,6 @@ Session::set_transport_speed (double speed, bool abort, bool clear_state, bool a
clear_clicks (); clear_clicks ();
/* if we are reversing relative to the current speed, or relative to the speed
before the last stop, then we have to do extra work.
*/
_transport_speed = speed; _transport_speed = speed;
if (as_default) { if (as_default) {
@ -585,8 +590,14 @@ Session::start_transport ()
maybe_allow_only_loop (); maybe_allow_only_loop ();
maybe_allow_only_punch (); maybe_allow_only_punch ();
_transport_speed = _default_transport_speed; if (_requested_transport_speed) {
_engine_speed = _default_engine_speed; _engine_speed = fabs (_requested_transport_speed);
_transport_speed = _requested_transport_speed > 0 ? 1 : -1;
_requested_transport_speed = 0;
} else {
_transport_speed = _default_transport_speed;
_engine_speed = _default_engine_speed;
}
if (!_engine.freewheeling()) { if (!_engine.freewheeling()) {
Timecode::Time time; Timecode::Time time;