summaryrefslogtreecommitdiff
path: root/libs/ardour/ltc_slave.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2020-05-09 03:53:30 +0200
committerRobin Gareus <robin@gareus.org>2020-05-09 05:10:04 +0200
commit3ca33c07dcf0d593c73f15eb62123dc59fc73fe4 (patch)
treee4598866e8e27576b80debae33a7ea2b1daeacf2 /libs/ardour/ltc_slave.cc
parenta46091b86a897d8d2886205ed0c277ddaf6f17cd (diff)
Update LTC reader port latency on connection change
This mechanism adds infrastructure that can later also be used for MTC and MIDIClock. PS. The LTC Generator port's latency is queried after the port is created, and later kept in sync via LatencyUpdated signal.
Diffstat (limited to 'libs/ardour/ltc_slave.cc')
-rw-r--r--libs/ardour/ltc_slave.cc17
1 files changed, 14 insertions, 3 deletions
diff --git a/libs/ardour/ltc_slave.cc b/libs/ardour/ltc_slave.cc
index bc0a8fb724..1fa3c741c3 100644
--- a/libs/ardour/ltc_slave.cc
+++ b/libs/ardour/ltc_slave.cc
@@ -66,9 +66,8 @@ LTC_TransportMaster::LTC_TransportMaster (std::string const & name)
{
memset (&prev_frame, 0, sizeof(LTCFrameExt));
- resync_latency (false);
-
AudioEngine::instance()->Xrun.connect_same_thread (port_connection, boost::bind (&LTC_TransportMaster::resync_xrun, this));
+
}
void
@@ -126,6 +125,18 @@ LTC_TransportMaster::~LTC_TransportMaster()
}
void
+LTC_TransportMaster::connection_handler (boost::weak_ptr<ARDOUR::Port> w0, std::string n0, boost::weak_ptr<ARDOUR::Port> w1, std::string n1, bool con)
+{
+ TransportMaster::connection_handler(w0, n0, w1, n1, con);
+
+ boost::shared_ptr<Port> p0 = w0.lock ();
+ boost::shared_ptr<Port> p1 = w1.lock ();
+ if (p0 == _port || p1 == _port) {
+ resync_latency (false);
+ }
+}
+
+void
LTC_TransportMaster::parse_timecode_offset()
{
if (_session) {
@@ -190,11 +201,11 @@ LTC_TransportMaster::resync_latency (bool playback)
if (playback) {
return;
}
- DEBUG_TRACE (DEBUG::LTC, "LTC resync_latency()\n");
uint32_t old = ltc_slave_latency.max;
if (_port) {
_port->get_connected_latency_range (ltc_slave_latency, false);
+ DEBUG_TRACE (DEBUG::LTC, string_compose ("LTC resync_latency: %1\n", ltc_slave_latency.max));
}
if (old != ltc_slave_latency.max) {
sync_lock_broken = false;