diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2019-11-01 13:24:05 -0600 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2019-11-01 14:04:28 -0600 |
commit | d30f2180bf729276c008bd261cd18def265e87ab (patch) | |
tree | cb4b44703459fa53805d7eaa8a834e83437f2b61 | |
parent | 0041e8b3ae2516c9d6b8023bde4a675c249e3d66 (diff) |
transportFSM: when locating due to end-of-loop, skip declick and do not transition states
-rw-r--r-- | libs/ardour/ardour/transport_fsm.h | 1 | ||||
-rw-r--r-- | libs/ardour/transport_fsm.cc | 22 |
2 files changed, 21 insertions, 2 deletions
diff --git a/libs/ardour/ardour/transport_fsm.h b/libs/ardour/ardour/transport_fsm.h index 869611a8ab..d6d49fa012 100644 --- a/libs/ardour/ardour/transport_fsm.h +++ b/libs/ardour/ardour/transport_fsm.h @@ -133,6 +133,7 @@ struct TransportFSM void start_playback (); void stop_playback (); void start_locate_after_declick () const; + void locate_for_loop (Event const &); void roll_after_locate () const; void start_locate_while_stopped (Event const &) const; void interrupt_locate (Event const &) const; diff --git a/libs/ardour/transport_fsm.cc b/libs/ardour/transport_fsm.cc index c8b5c65035..f80f6e7a90 100644 --- a/libs/ardour/transport_fsm.cc +++ b/libs/ardour/transport_fsm.cc @@ -260,8 +260,17 @@ TransportFSM::process_event (Event& ev, bool already_deferred, bool& deferred) start_locate_while_stopped (ev); break; case Rolling: - transition (DeclickToLocate); - start_declick_for_locate (ev); + if (ev.with_loop) { + /* no state transitions. Just do a realtime + locate and continue rolling. Note that + ev.with_roll is ignored and assumed to be + true because we're looping. + */ + locate_for_loop (ev); + } else { + transition (DeclickToLocate); + start_declick_for_locate (ev); + } break; case WaitingForLocate: case DeclickToLocate: @@ -396,6 +405,15 @@ TransportFSM::start_locate_while_stopped (Event const & l) const } void +TransportFSM::locate_for_loop (Event const & l) +{ + assert (l.type == Locate); + DEBUG_TRACE (DEBUG::TFSMEvents, "locate_for_loop\n"); + current_roll_after_locate_status = l.with_roll; + api->locate (l.target, l.with_roll, l.with_flush, l.with_loop, l.force); +} + +void TransportFSM::start_locate_after_declick () const { DEBUG_TRACE (DEBUG::TFSMEvents, "start_locate_after_declick\n"); |