summaryrefslogtreecommitdiff
path: root/libs/ardour/ltc_slave.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-01-12 20:27:23 +0100
committerRobin Gareus <robin@gareus.org>2015-01-12 20:27:23 +0100
commitb8bec75aa36e64ad8e333b528e3ff50d1429c88d (patch)
treed61905daaeddb30e233e3f78489c488dc88dc4b3 /libs/ardour/ltc_slave.cc
parentf1b5f90a3e723075b0dc32bbd7fb240895324063 (diff)
add an explicit indicator for LTC lock
Diffstat (limited to 'libs/ardour/ltc_slave.cc')
-rw-r--r--libs/ardour/ltc_slave.cc16
1 files changed, 13 insertions, 3 deletions
diff --git a/libs/ardour/ltc_slave.cc b/libs/ardour/ltc_slave.cc
index e0da586f3e..b675f43489 100644
--- a/libs/ardour/ltc_slave.cc
+++ b/libs/ardour/ltc_slave.cc
@@ -52,6 +52,7 @@ LTC_Slave::LTC_Slave (Session& s)
delayedlocked = 10;
monotonic_cnt = 0;
fps_detected=false;
+ sync_lock_broken = false;
ltc_timecode = session.config.get_timecode_format();
a3e_timecode = session.config.get_timecode_format();
@@ -124,6 +125,7 @@ LTC_Slave::resync_xrun()
{
DEBUG_TRACE (DEBUG::LTC, "LTC resync_xrun()\n");
engine_dll_initstate = 0;
+ sync_lock_broken = false;
}
void
@@ -131,6 +133,7 @@ LTC_Slave::resync_latency()
{
DEBUG_TRACE (DEBUG::LTC, "LTC resync_latency()\n");
engine_dll_initstate = 0;
+ sync_lock_broken = false;
if (!session.deletion_in_progress() && session.ltc_output_io()) { /* check if Port exits */
boost::shared_ptr<Port> ltcport = session.ltc_input_port();
@@ -147,6 +150,7 @@ LTC_Slave::reset()
transport_direction = 0;
ltc_speed = 0;
engine_dll_initstate = 0;
+ sync_lock_broken = false;
}
void
@@ -438,7 +442,7 @@ LTC_Slave::speed_and_position (double& speed, framepos_t& pos)
if (last_timestamp == 0) {
engine_dll_initstate = 0;
- delayedlocked++;
+ if (delayedlocked < 10) ++delayedlocked;
}
else if (engine_dll_initstate != transport_direction && ltc_speed != 0) {
engine_dll_initstate = transport_direction;
@@ -475,7 +479,7 @@ LTC_Slave::speed_and_position (double& speed, framepos_t& pos)
pos = session.transport_frame();
return true;
} else if (ltc_speed != 0) {
- delayedlocked = 0;
+ if (delayedlocked > 0) delayedlocked--;
}
if (abs(now - last_timestamp) > FLYWHEEL_TIMEOUT) {
@@ -551,6 +555,11 @@ LTC_Slave::speed_and_position (double& speed, framepos_t& pos)
speed = 1.0;
}
+ if (speed != 0 && delayedlocked == 0 && fabsf(speed) != 1.0) {
+ sync_lock_broken = true;
+ DEBUG_TRACE (DEBUG::LTC, string_compose ("LTC speed not locked %1 %2\n", speed, ltc_speed));
+ }
+
return true;
}
@@ -592,7 +601,8 @@ LTC_Slave::approximate_current_delta() const
} else if ((monotonic_cnt - last_timestamp) > 2 * frames_per_ltc_frame) {
snprintf(delta, sizeof(delta), "%s", _("flywheel"));
} else {
- snprintf(delta, sizeof(delta), "\u0394<span foreground=\"green\" face=\"monospace\" >%s%s%lld</span>sm",
+ 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));
}
return std::string(delta);