diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2020-02-21 11:50:52 -0700 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2020-02-21 11:54:08 -0700 |
commit | f0316430c62fcef19bd3eb79054f471bc5bdb34b (patch) | |
tree | 44e3dc27946feec42b4d4d1f416a1e2218503927 /libs/ardour/transport_fsm.cc | |
parent | 2fb260e6e8d0ba06a34696b2a4d20648fcbed0b3 (diff) |
make "reversing" back into a DirectionState and prohibit speed changes while reversing
Diffstat (limited to 'libs/ardour/transport_fsm.cc')
-rw-r--r-- | libs/ardour/transport_fsm.cc | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/libs/ardour/transport_fsm.cc b/libs/ardour/transport_fsm.cc index 6b8ee1fd61..85f004f082 100644 --- a/libs/ardour/transport_fsm.cc +++ b/libs/ardour/transport_fsm.cc @@ -203,16 +203,26 @@ TransportFSM::process_event (Event& ev, bool already_deferred, bool& deferred) switch (ev.type) { case SetSpeed: - switch (_motion_state) { - case Stopped: - case Rolling: - set_speed (ev); - break; - default: + switch (_direction_state) { + case Reversing: if (!already_deferred) { defer (ev); deferred = true; } + break; + default: + switch (_motion_state) { + case Stopped: + case Rolling: + set_speed (ev); + break; + default: + if (!already_deferred) { + defer (ev); + deferred = true; + } + } + break; } break; @@ -315,10 +325,7 @@ TransportFSM::process_event (Event& ev, bool already_deferred, bool& deferred) switch (_motion_state) { case WaitingForLocate: - if (_reversing) { - - _reversing = false; - transition (Rolling); + if (reversing()) { if (most_recently_requested_speed > 0) { transition (Forwards); @@ -326,6 +333,8 @@ TransportFSM::process_event (Event& ev, bool already_deferred, bool& deferred) transition (Forwards); } + transition (Rolling); + api->set_transport_speed (last_speed_request.speed, last_speed_request.abort_capture, last_speed_request.clear_state, last_speed_request.as_default); if (most_recently_requested_speed != 0.0) { @@ -617,7 +626,7 @@ TransportFSM::set_speed (Event const & ev) most_recently_requested_speed = ev.speed; last_speed_request = ev; - _reversing = true; + transition (Reversing); DEBUG_TRACE (DEBUG::TFSMState, string_compose ("reverse, target speed %1 MRRS %2 state %3\n", ev.speed, most_recently_requested_speed, current_state())); @@ -638,7 +647,7 @@ TransportFSM::set_speed (Event const & ev) bool TransportFSM::will_roll_fowards () const { - if (_reversing) { + if (reversing()) { return most_recently_requested_speed >= 0; /* note: future speed of zero is equivalent to Forwards */ } return (_direction_state == Forwards); |