fix crash when copy'ing latent plugins
[ardour.git] / libs / ardour / mtc_slave.cc
index 0dee2a071bdd4e3ce5035a25589cde25ee5d8009..102694e7ac7d9a9ab637871f2e085eede99bc400 100644 (file)
@@ -34,7 +34,7 @@
 
 #include <glibmm/timer.h>
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace std;
 using namespace ARDOUR;
@@ -213,6 +213,7 @@ MTC_Slave::reset (bool with_position)
        window_end = 0;
        transport_direction = 1;
        current_delta = 0;
+       ActiveChanged(false);
 }
 
 void
@@ -309,11 +310,7 @@ MTC_Slave::update_mtc_time (const MIDI::byte *msg, bool was_full, framepos_t now
           to use a timestamp indicating when this MTC time was received. example: when we received
           a locate command via MMC.
        */
-#ifdef COMPILER_MSVC
-       DEBUG_TRACE (DEBUG::MTC, string_compose ("MTC::update_mtc_time - TID:%1\n", ::pthread_self().p));
-#else
-       DEBUG_TRACE (DEBUG::MTC, string_compose ("MTC::update_mtc_time - TID:%1\n", ::pthread_self()));
-#endif
+       DEBUG_TRACE (DEBUG::MTC, string_compose ("MTC::update_mtc_time - TID:%1\n", pthread_name()));
        TimecodeFormat tc_format;
        bool reset_tc = true;
 
@@ -472,6 +469,7 @@ MTC_Slave::update_mtc_time (const MIDI::byte *msg, bool was_full, framepos_t now
                                first_mtc_timestamp = now;
                                init_mtc_dll(mtc_frame, qtr);
                                mtc_frame_dll = mtc_frame;
+                               ActiveChanged (true); // emit signal
                        }
                        current.guard1++;
                        current.position = mtc_frame;
@@ -598,7 +596,7 @@ MTC_Slave::speed_and_position (double& speed, framepos_t& pos)
        read_current (&last);
 
        DEBUG_TRACE (DEBUG::MTC, string_compose ("speed&pos: timestamp %1 speed %2 initstate %3 dir %4 tpos %5 now %6 last-in %7\n",
-                                                last.timestamp, 
+                                                last.timestamp,
                                                 last.speed,
                                                 engine_dll_initstate,
                                                 transport_direction,
@@ -607,8 +605,8 @@ MTC_Slave::speed_and_position (double& speed, framepos_t& pos)
                                                 last_inbound_frame));
 
        /* re-init engine DLL here when state changed (direction, first_mtc_timestamp) */
-       if (last.timestamp == 0) { 
-               engine_dll_initstate = 0; 
+       if (last.timestamp == 0) {
+               engine_dll_initstate = 0;
        } else if (engine_dll_initstate != transport_direction && last.speed != 0) {
                engine_dll_initstate = transport_direction;
                init_engine_dll(last.position, session.engine().samples_per_cycle());
@@ -630,6 +628,7 @@ MTC_Slave::speed_and_position (double& speed, framepos_t& pos)
                session.request_transport_speed (0);
                engine_dll_initstate = 0;
                queue_reset (false);
+        ActiveChanged (false);
                DEBUG_TRACE (DEBUG::MTC, "MTC not seen for 2 frames - reset pending\n");
                return false;
        }