X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fltc_slave.cc;h=ab84cf6201b11aa4153b82561a019446d7f7af70;hb=00b703ebe8b1e65e8f50ce92c92366844fd9e351;hp=b675f43489292101c750f01df76343244376ea6e;hpb=b8bec75aa36e64ad8e333b528e3ff50d1429c88d;p=ardour.git diff --git a/libs/ardour/ltc_slave.cc b/libs/ardour/ltc_slave.cc index b675f43489..ab84cf6201 100644 --- a/libs/ardour/ltc_slave.cc +++ b/libs/ardour/ltc_slave.cc @@ -26,6 +26,7 @@ #include "pbd/pthread_utils.h" #include "ardour/debug.h" +#include "ardour/profile.h" #include "ardour/slave.h" #include "ardour/session.h" #include "ardour/audioengine.h" @@ -151,6 +152,8 @@ LTC_Slave::reset() ltc_speed = 0; engine_dll_initstate = 0; sync_lock_broken = false; + + ActiveChanged (false); /* EMIT SIGNAL */ } void @@ -443,8 +446,10 @@ LTC_Slave::speed_and_position (double& speed, framepos_t& pos) if (last_timestamp == 0) { engine_dll_initstate = 0; if (delayedlocked < 10) ++delayedlocked; - } - else if (engine_dll_initstate != transport_direction && ltc_speed != 0) { + } else if (engine_dll_initstate != transport_direction && ltc_speed != 0) { + + ActiveChanged (true); /* EMIT SIGNAL */ + engine_dll_initstate = transport_direction; init_engine_dll(last_ltc_frame + rint(ltc_speed * double(2 * nframes + now - last_timestamp)), session.engine().samples_per_cycle()); @@ -479,7 +484,8 @@ LTC_Slave::speed_and_position (double& speed, framepos_t& pos) pos = session.transport_frame(); return true; } else if (ltc_speed != 0) { - if (delayedlocked > 0) delayedlocked--; + if (delayedlocked > 1) delayedlocked--; + else if (current_delta == 0) delayedlocked = 0; } if (abs(now - last_timestamp) > FLYWHEEL_TIMEOUT) { @@ -487,6 +493,7 @@ LTC_Slave::speed_and_position (double& speed, framepos_t& pos) reset(); speed = 0; pos = session.transport_frame(); + ActiveChanged (false); /* EMIT SIGNAL */ return true; } @@ -555,7 +562,7 @@ LTC_Slave::speed_and_position (double& speed, framepos_t& pos) speed = 1.0; } - if (speed != 0 && delayedlocked == 0 && fabsf(speed) != 1.0) { + if (speed != 0 && delayedlocked == 0 && fabs(speed) != 1.0) { sync_lock_broken = true; DEBUG_TRACE (DEBUG::LTC, string_compose ("LTC speed not locked %1 %2\n", speed, ltc_speed)); } @@ -603,7 +610,7 @@ LTC_Slave::approximate_current_delta() const } else { snprintf(delta, sizeof(delta), "\u0394%s%s%lldsm", sync_lock_broken ? "red" : "green", - LEADINGZERO(llabs(current_delta)), PLUSMINUS(-current_delta), llabs(current_delta)); + LEADINGZERO(::llabs(current_delta)), PLUSMINUS(-current_delta), ::llabs(current_delta)); } return std::string(delta); }