|
|
|
|
@@ -373,6 +373,12 @@ Session::butler_transport_work ()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ptw & PostTransportAdjustPlaybackBuffering) {
|
|
|
|
|
/* non_realtime_locate() calls Automatable::transport_located()
|
|
|
|
|
* for every route. This eventually calls
|
|
|
|
|
* ARDOUR::AutomationList::state () which has a LocaleGuard,
|
|
|
|
|
* and would switch locales forth/back every time.
|
|
|
|
|
*/
|
|
|
|
|
LocaleGuard lg;
|
|
|
|
|
for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
|
|
|
|
|
boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
|
|
|
|
|
if (tr) {
|
|
|
|
|
@@ -421,7 +427,7 @@ Session::butler_transport_work ()
|
|
|
|
|
/* don't seek if locate will take care of that in non_realtime_stop() */
|
|
|
|
|
|
|
|
|
|
if (!(ptw & PostTransportLocate)) {
|
|
|
|
|
|
|
|
|
|
LocaleGuard lg; // see note for non_realtime_locate() above
|
|
|
|
|
for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
|
|
|
|
|
(*i)->non_realtime_locate (_transport_frame);
|
|
|
|
|
|
|
|
|
|
@@ -530,9 +536,12 @@ Session::non_realtime_locate ()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
boost::shared_ptr<RouteList> rl = routes.reader();
|
|
|
|
|
for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
|
|
|
|
|
(*i)->non_realtime_locate (_transport_frame);
|
|
|
|
|
{
|
|
|
|
|
LocaleGuard lg; // see note for non_realtime_locate() above
|
|
|
|
|
boost::shared_ptr<RouteList> rl = routes.reader();
|
|
|
|
|
for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
|
|
|
|
|
(*i)->non_realtime_locate (_transport_frame);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_scene_changer->locate (_transport_frame);
|
|
|
|
|
@@ -789,15 +798,18 @@ Session::non_realtime_stop (bool abort, int on_entry, bool& finished)
|
|
|
|
|
|
|
|
|
|
/* this for() block can be put inside the previous if() and has the effect of ... ??? what */
|
|
|
|
|
|
|
|
|
|
DEBUG_TRACE (DEBUG::Transport, X_("Butler PTW: locate\n"));
|
|
|
|
|
for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
|
|
|
|
|
DEBUG_TRACE (DEBUG::Transport, string_compose ("Butler PTW: locate on %1\n", (*i)->name()));
|
|
|
|
|
(*i)->non_realtime_locate (_transport_frame);
|
|
|
|
|
{
|
|
|
|
|
LocaleGuard lg; // see note for non_realtime_locate() above
|
|
|
|
|
DEBUG_TRACE (DEBUG::Transport, X_("Butler PTW: locate\n"));
|
|
|
|
|
for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
|
|
|
|
|
DEBUG_TRACE (DEBUG::Transport, string_compose ("Butler PTW: locate on %1\n", (*i)->name()));
|
|
|
|
|
(*i)->non_realtime_locate (_transport_frame);
|
|
|
|
|
|
|
|
|
|
if (on_entry != g_atomic_int_get (&_butler->should_do_transport_work)) {
|
|
|
|
|
finished = false;
|
|
|
|
|
/* we will be back */
|
|
|
|
|
return;
|
|
|
|
|
if (on_entry != g_atomic_int_get (&_butler->should_do_transport_work)) {
|
|
|
|
|
finished = false;
|
|
|
|
|
/* we will be back */
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|