summaryrefslogtreecommitdiff
path: root/libs/ardour/transport_fsm.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2019-11-01 13:24:05 -0600
committerPaul Davis <paul@linuxaudiosystems.com>2019-11-01 14:04:28 -0600
commitd30f2180bf729276c008bd261cd18def265e87ab (patch)
treecb4b44703459fa53805d7eaa8a834e83437f2b61 /libs/ardour/transport_fsm.cc
parent0041e8b3ae2516c9d6b8023bde4a675c249e3d66 (diff)
transportFSM: when locating due to end-of-loop, skip declick and do not transition states
Diffstat (limited to 'libs/ardour/transport_fsm.cc')
-rw-r--r--libs/ardour/transport_fsm.cc22
1 files changed, 20 insertions, 2 deletions
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");