debug instrumentation for locate time
[ardour.git] / libs / ardour / ltc_slave.cc
index 5f15f460f819f765aeec5c54a7ff580a9a8ace06..04af930f0ea2d32626f75e59733af14aa560b29a 100644 (file)
@@ -32,7 +32,7 @@
 #include "ardour/audioengine.h"
 #include "ardour/audio_port.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace std;
 using namespace ARDOUR;
@@ -45,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();
 
@@ -143,11 +143,13 @@ LTC_Slave::resync_latency()
 }
 
 void
-LTC_Slave::reset()
+LTC_Slave::reset (bool with_ts)
 {
        DEBUG_TRACE (DEBUG::LTC, "LTC reset()\n");
-       last_timestamp = 0;
-       current_delta = 0;
+       if (with_ts) {
+               last_timestamp = 0;
+               current_delta = 0;
+       }
        transport_direction = 0;
        ltc_speed = 0;
        engine_dll_initstate = 0;
@@ -365,13 +367,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;
                }
 
@@ -466,7 +468,7 @@ LTC_Slave::speed_and_position (double& speed, framepos_t& pos)
                        DEBUG_TRACE (DEBUG::LTC, string_compose("engine skipped %1 frames. Feeding silence to LTC parser.\n", skip));
                        if (skip >= 8192) skip = 8192;
                        unsigned char sound[8192];
-                       memset(sound, 0, sizeof(char) * skip);
+                       memset(sound, 0x80, sizeof(char) * skip);
                        ltc_decoder_write(decoder, sound, nframes, now);
                } else if (skip != 0) {
                        /* this should never happen. it may if monotonic_cnt, now overflow on 64bit */
@@ -548,9 +550,8 @@ LTC_Slave::speed_and_position (double& speed, framepos_t& pos)
 
        if (((pos < 0) || (labs(current_delta) > 2 * session.frame_rate()))) {
                DEBUG_TRACE (DEBUG::LTC, string_compose ("LTC large drift: %1\n", current_delta));
-               reset();
+               reset(false);
                speed = 0;
-               pos = session.transport_frame();
                return true;
        }
 
@@ -562,7 +563,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));
        }
@@ -610,7 +611,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);
 }