allow to query export profile type
[ardour.git] / libs / ardour / session_transport.cc
index f1486ada78144abc89636c940f4d92d9f0b4a5e0..8771af46aa7138df63c17c386571d89a52cb982e 100644 (file)
@@ -47,7 +47,7 @@
 #include "ardour/slave.h"
 #include "ardour/operations.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace std;
 using namespace ARDOUR;
@@ -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;
+                       }
                }
        }
 
@@ -1144,12 +1156,9 @@ Session::locate (framepos_t target_frame, bool with_roll, bool with_flush, bool
        }
 
        // Update Timecode time
-       // [DR] FIXME: find out exactly where this should go below
        _transport_frame = target_frame;
        _last_roll_or_reversal_location = target_frame;
        timecode_time(_transport_frame, transmitting_timecode_time);
-       outbound_mtc_timecode_frame = _transport_frame;
-       next_quarter_frame_to_send = 0;
 
        /* do "stopped" stuff if:
         *
@@ -1256,7 +1265,7 @@ Session::locate (framepos_t target_frame, bool with_roll, bool with_flush, bool
                                for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
                                        boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
 
-                                       if (tr && tr->record_enabled ()) {
+                                       if (tr && tr->rec_enable_control()->get_value()) {
                                                // tell it we've looped, so it can deal with the record state
                                                tr->transport_looped (_transport_frame);
                                        }