diff options
author | Robin Gareus <robin@gareus.org> | 2020-05-09 03:53:30 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2020-05-09 05:10:04 +0200 |
commit | 3ca33c07dcf0d593c73f15eb62123dc59fc73fe4 (patch) | |
tree | e4598866e8e27576b80debae33a7ea2b1daeacf2 /libs/ardour/ltc_slave.cc | |
parent | a46091b86a897d8d2886205ed0c277ddaf6f17cd (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.cc | 17 |
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 (<C_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; |