summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/ardour/session.cc16
-rw-r--r--libs/ardour/session_transport.cc71
2 files changed, 38 insertions, 49 deletions
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index 10fa5ed829..af02a33605 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -1430,7 +1430,7 @@ Session::auto_loop_changed (Location* location)
if (rolling) {
- if (play_loop) {
+ if (get_play_loop ()) {
if (_transport_sample < location->start() || _transport_sample > location->end()) {
@@ -1563,15 +1563,9 @@ Session::set_auto_loop_location (Location* location)
location->set_auto_loop (true, this);
- if (Config->get_loop_is_mode() && play_loop) {
- // set all tracks to use internal looping
- boost::shared_ptr<RouteList> rl = routes.reader ();
- for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
- boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
- if (tr && !tr->is_private_route()) {
- tr->set_loop (location);
- }
- }
+ if (Config->get_loop_is_mode() && get_play_loop ()) {
+ /* set all tracks to use internal looping */
+ set_track_loop (true);
}
/* take care of our stuff first */
@@ -1734,7 +1728,7 @@ Session::location_removed (Location *location)
{
if (location->is_auto_loop()) {
set_auto_loop_location (0);
- if (!play_loop) {
+ if (!get_play_loop ()) {
set_track_loop (false);
}
unset_play_loop ();
diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc
index b48079318a..8cdca5d79e 100644
--- a/libs/ardour/session_transport.cc
+++ b/libs/ardour/session_transport.cc
@@ -233,7 +233,7 @@ Session::locate (samplepos_t target_sample, bool with_roll, bool with_flush, boo
if (!transport_was_stopped &&
(!auto_play_legal || !config.get_auto_play()) &&
!with_roll &&
- !(synced_to_engine() && play_loop) &&
+ !(synced_to_engine() && get_play_loop ()) &&
!(config.get_external_sync() && !synced_to_engine())) {
realtime_stop (false, true); // XXX paul - check if the 2nd arg is really correct
@@ -289,7 +289,7 @@ Session::locate (samplepos_t target_sample, bool with_roll, bool with_flush, boo
}
/* cancel looped playback if transport pos outside of loop range */
- if (play_loop) {
+ if (get_play_loop ()) {
Location* al = _locations->auto_loop_location();
@@ -457,7 +457,7 @@ Session::set_transport_speed (double speed, bool abort, bool clear_state, bool a
/* we are stopped and we want to start rolling at speed 1 */
- if (Config->get_loop_is_mode() && play_loop) {
+ if (Config->get_loop_is_mode() && get_play_loop ()) {
Location *location = _locations->auto_loop_location();
@@ -595,7 +595,7 @@ Session::start_transport ()
break;
case Recording:
- if (!play_loop) {
+ if (!get_play_loop ()) {
disable_record (false);
}
break;
@@ -1562,7 +1562,7 @@ Session::set_play_loop (bool yn, bool change_transport_state)
Location *loc;
- if (yn == play_loop || (actively_recording() && yn) || (loc = _locations->auto_loop_location()) == 0) {
+ if (yn == get_play_loop () || (actively_recording() && yn) || (loc = _locations->auto_loop_location()) == 0) {
/* nothing to do, or can't change loop status while recording */
return;
}
@@ -1580,56 +1580,51 @@ Session::set_play_loop (bool yn, bool change_transport_state)
play_loop = true;
have_looped = false;
- if (loc) {
-
- unset_play_range ();
- /* set all tracks to use internal looping */
- set_track_loop (true);
+ unset_play_range ();
+ /* set all tracks to use internal looping */
+ set_track_loop (true);
- merge_event (new SessionEvent (SessionEvent::AutoLoop, SessionEvent::Replace, loc->end(), loc->start(), 0.0f));
+ 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?
- */
- loop_changing = true;
- TFSM_LOCATE (loc->start(), MustRoll, true, false, true);
- } else if (!transport_rolling()) {
- /* loop-is-mode: not rolling, just locate to loop start */
- TFSM_LOCATE (loc->start(), MustStop, true, false, true);
- }
+ 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?
+ */
+ loop_changing = true;
+ TFSM_LOCATE (loc->start(), MustRoll, true, false, true);
+ } else if (!transport_rolling()) {
+ /* loop-is-mode: not rolling, just locate to loop start */
+ TFSM_LOCATE (loc->start(), MustStop, true, false, true);
}
-
+ TransportStateChange (); /* EMIT SIGNAL */
} else {
-
unset_play_loop ();
}
DEBUG_TRACE (DEBUG::Transport, string_compose ("send TSC2 with speed = %1\n", _transport_speed));
- TransportStateChange (); /* EMIT SIGNAL */
}
void
Session::unset_play_loop (bool change_transport_state)
{
- if (play_loop) {
-
- play_loop = false;
- clear_events (SessionEvent::AutoLoop);
- set_track_loop (false);
+ if (!get_play_loop()) {
+ return;
+ }
- /* likely need to flush track buffers: this will locate us to wherever we are */
+ play_loop = false;
+ clear_events (SessionEvent::AutoLoop);
+ set_track_loop (false);
- if (change_transport_state && transport_rolling ()) {
- TFSM_STOP (false, false);
- }
+ /* likely need to flush track buffers: this will locate us to wherever we are */
- overwrite_some_buffers (boost::shared_ptr<Route>(), LoopDisabled);
-
- TransportStateChange (); /* EMIT SIGNAL */
+ if (change_transport_state && transport_rolling ()) {
+ TFSM_STOP (false, false);
}
+
+ overwrite_some_buffers (boost::shared_ptr<Route>(), LoopDisabled);
+ TransportStateChange (); /* EMIT SIGNAL */
}
void