summaryrefslogtreecommitdiff
path: root/libs/ardour/session_transport.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2020-02-27 02:36:16 +0100
committerRobin Gareus <robin@gareus.org>2020-02-27 02:36:16 +0100
commitbc2cbfc7ec044692e959d5d1e55f5ea4fc76fe85 (patch)
tree9f4ec69c6f2213b6031d55c8ff998c24bb866927 /libs/ardour/session_transport.cc
parentb10d9cf09bf6150f0ba0eae5dc34fd8db8b2fa91 (diff)
Prevent concurrent loop and punch recording (backend)
This also prevents switching between punch-in/out record and looping without transport-stop.
Diffstat (limited to 'libs/ardour/session_transport.cc')
-rw-r--r--libs/ardour/session_transport.cc9
1 files changed, 9 insertions, 0 deletions
diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc
index 8cdca5d79e..a79e39a4c2 100644
--- a/libs/ardour/session_transport.cc
+++ b/libs/ardour/session_transport.cc
@@ -145,6 +145,8 @@ Session::realtime_stop (bool abort, bool clear_state)
reset_slave_state ();
+ g_atomic_int_set (&_punch_or_loop, NoConstraint);
+
_transport_speed = 0;
_target_transport_speed = 0;
_engine_speed = 1.0;
@@ -604,6 +606,9 @@ Session::start_transport ()
break;
}
+ maybe_allow_only_loop ();
+ maybe_allow_only_punch ();
+
_transport_speed = _default_transport_speed;
_target_transport_speed = _transport_speed;
@@ -1575,6 +1580,10 @@ Session::set_play_loop (bool yn, bool change_transport_state)
return;
}
+ if (yn && !maybe_allow_only_loop (true)) {
+ return;
+ }
+
if (yn) {
play_loop = true;