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 | |
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')
-rw-r--r-- | libs/ardour/ardour/transport_master.h | 5 | ||||
-rw-r--r-- | libs/ardour/ltc_slave.cc | 17 | ||||
-rw-r--r-- | libs/ardour/session_ltc.cc | 2 | ||||
-rw-r--r-- | libs/ardour/transport_master.cc | 8 |
4 files changed, 20 insertions, 12 deletions
diff --git a/libs/ardour/ardour/transport_master.h b/libs/ardour/ardour/transport_master.h index 9e745cbef5..c7c0c65175 100644 --- a/libs/ardour/ardour/transport_master.h +++ b/libs/ardour/ardour/transport_master.h @@ -443,9 +443,9 @@ protected: XMLNode port_node; - PBD::ScopedConnection port_connection; - bool connection_handler (boost::weak_ptr<ARDOUR::Port>, std::string name1, boost::weak_ptr<ARDOUR::Port>, std::string name2, bool yn); + virtual void connection_handler (boost::weak_ptr<ARDOUR::Port>, std::string name1, boost::weak_ptr<ARDOUR::Port>, std::string name2, bool yn); + PBD::ScopedConnection port_connection; PBD::ScopedConnection backend_connection; virtual void register_properties (); @@ -613,6 +613,7 @@ private: void resync_latency (bool); void parse_timecode_offset (); void parameter_changed (std::string const& p); + void connection_handler (boost::weak_ptr<ARDOUR::Port>, std::string, boost::weak_ptr<ARDOUR::Port>, std::string, bool); bool did_reset_tc_format; Timecode::TimecodeFormat saved_tc_format; 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; diff --git a/libs/ardour/session_ltc.cc b/libs/ardour/session_ltc.cc index 5c3da63f17..79f1264303 100644 --- a/libs/ardour/session_ltc.cc +++ b/libs/ardour/session_ltc.cc @@ -107,10 +107,10 @@ Session::ltc_tx_resync_latency (bool playback) if (deletion_in_progress() || !playback) { return; } - DEBUG_TRACE (DEBUG::TXLTC, "resync latency\n"); boost::shared_ptr<Port> ltcport = ltc_output_port(); if (ltcport) { ltcport->get_connected_latency_range(ltc_out_latency, true); + DEBUG_TRACE (DEBUG::TXLTC, string_compose ("resync latency: %1\n", ltc_out_latency.max)); } } diff --git a/libs/ardour/transport_master.cc b/libs/ardour/transport_master.cc index c0a9e4e02c..1794fca354 100644 --- a/libs/ardour/transport_master.cc +++ b/libs/ardour/transport_master.cc @@ -163,11 +163,11 @@ TransportMaster::set_name (std::string const & str) } } -bool +void TransportMaster::connection_handler (boost::weak_ptr<ARDOUR::Port>, std::string name1, boost::weak_ptr<ARDOUR::Port>, std::string name2, bool yn) { if (!_port) { - return false; + return; } const std::string fqn = ARDOUR::AudioEngine::instance()->make_port_name_non_relative (_port->name()); @@ -188,11 +188,7 @@ TransportMaster::connection_handler (boost::weak_ptr<ARDOUR::Port>, std::string } PropertyChanged (Properties::connected); - - return true; } - - return false; } bool |