summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2020-05-12 12:45:19 -0600
committerPaul Davis <paul@linuxaudiosystems.com>2020-05-12 12:45:19 -0600
commita9360eb6d6a4eb0c1b59c7f3a3f7be664c2c0bb8 (patch)
tree9877241550d94b76c6e2906d79ac96335d1d2e4e /libs/ardour
parentac915d7d55239776d33929b63b91fe3080ff59ae (diff)
find a different way to NOT unset play loop when locating to start of loop
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/session_transport.cc16
1 files changed, 10 insertions, 6 deletions
diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc
index 091d6ddd3b..28af0782dc 100644
--- a/libs/ardour/session_transport.cc
+++ b/libs/ardour/session_transport.cc
@@ -1475,7 +1475,15 @@ Session::non_realtime_stop (bool abort, int on_entry, bool& finished)
if (ptw & (PostTransportClearSubstate|PostTransportStop)) {
unset_play_range ();
if (!Config->get_loop_is_mode()) {
- unset_play_loop ();
+ if (get_play_loop()) {
+ /* do not unset loop playback if we've just
+ located back to the start of the loop (i.e. to
+ prepare to play the loop.
+ */
+ if (_transport_sample != _locations->auto_loop_location()->start()) {
+ unset_play_loop ();
+ }
+ }
}
}
@@ -1589,11 +1597,7 @@ Session::set_play_loop (bool yn, bool change_transport_state)
merge_event (new SessionEvent (SessionEvent::AutoLoop, SessionEvent::Replace, loc->end(), loc->start(), 0.0f));
if (!Config->get_loop_is_mode()) {
- /* args: positition, roll=true, flush=true, for_loop_end=false, force buffer, refill looping */
- /* set this so that when/if we stop for locate,
- we do not call unset_play_loop(). This is a
- crude mechanism. Got a better idea?
- */
+ /* args: positition, disposition, flush=true, for_loop_end=false, force=true */
TFSM_LOCATE (loc->start(), MustRoll, true, false, true);
} else if (!transport_rolling()) {
/* loop-is-mode: not rolling, just locate to loop start */