add VCA::full_name() which returns "VCA %n" : VCA %n" by default and "VCA %n : user...
[ardour.git] / libs / ardour / ltc_slave.cc
index b675f43489292101c750f01df76343244376ea6e..2501378017d9de198aefcc5032240207dc5c20f5 100644 (file)
 #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"
 #include "ardour/audio_port.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace std;
 using namespace ARDOUR;
@@ -44,7 +45,7 @@ using namespace Timecode;
 LTC_Slave::LTC_Slave (Session& s)
        : session (s)
 {
-       frames_per_ltc_frame = session.frames_per_timecode_frame();
+       frames_per_ltc_frame = session.samples_per_timecode_frame();
        timecode.rate = session.timecode_frames_per_second();
        timecode.drop  = session.timecode_drop_frames();
 
@@ -151,6 +152,8 @@ LTC_Slave::reset()
        ltc_speed = 0;
        engine_dll_initstate = 0;
        sync_lock_broken = false;
+
+       ActiveChanged (false); /* EMIT SIGNAL */
 }
 
 void
@@ -362,13 +365,13 @@ LTC_Slave::process_ltc(framepos_t const /*now*/)
                        ltc_frame_increment(&frame.ltc, fps_i, tv_standard, 0);
                        ltc_frame_to_time(&stime, &frame.ltc, 0);
                        transport_direction = 1;
-                       frame.off_start -= ltc_frame_alignment(session.frames_per_timecode_frame(), tv_standard);
-                       frame.off_end -= ltc_frame_alignment(session.frames_per_timecode_frame(), tv_standard);
+                       frame.off_start -= ltc_frame_alignment(session.samples_per_timecode_frame(), tv_standard);
+                       frame.off_end -= ltc_frame_alignment(session.samples_per_timecode_frame(), tv_standard);
                } else {
                        ltc_frame_decrement(&frame.ltc, fps_i, tv_standard, 0);
                        int off = frame.off_end - frame.off_start;
-                       frame.off_start += off - ltc_frame_alignment(session.frames_per_timecode_frame(), tv_standard);
-                       frame.off_end += off - ltc_frame_alignment(session.frames_per_timecode_frame(), tv_standard);
+                       frame.off_start += off - ltc_frame_alignment(session.samples_per_timecode_frame(), tv_standard);
+                       frame.off_end += off - ltc_frame_alignment(session.samples_per_timecode_frame(), tv_standard);
                        transport_direction = -1;
                }
 
@@ -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<span foreground=\"%s\" face=\"monospace\" >%s%s%lld</span>sm",
                                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);
 }