From c69227fd8ddc73f3d98a7959f5b71fd1df6a4017 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 11 Nov 2019 18:21:47 -0700 Subject: [PATCH] eliminate hacky design for being able to deliver the correct time as JACK timebase master --- libs/ardour/ardour/session.h | 2 ++ libs/ardour/session_transport.cc | 1 + libs/backends/jack/jack_session.cc | 9 +++++++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 62742109be..407333c397 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -717,6 +717,7 @@ public: samplepos_t audible_sample (bool* latent_locate = NULL) const; samplepos_t requested_return_sample() const { return _requested_return_sample; } void set_requested_return_sample(samplepos_t return_to); + boost::optional const & nominal_jack_transport_sample() { return _nominal_jack_transport_sample; } bool compute_audible_delta (samplepos_t& pos_and_delta) const; samplecnt_t remaining_latency_preroll () const { return _remaining_latency_preroll; } @@ -2108,6 +2109,7 @@ private: CoreSelection* _selection; bool _global_locate_pending; + boost::optional _nominal_jack_transport_sample; }; diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc index 6b0d81172b..9cc46f2f5c 100644 --- a/libs/ardour/session_transport.cc +++ b/libs/ardour/session_transport.cc @@ -244,6 +244,7 @@ Session::do_locate (samplepos_t target_sample, bool with_roll, bool with_flush, // Update Timecode time _transport_sample = target_sample; + _nominal_jack_transport_sample = boost::none; // Bump seek counter so that any in-process locate in the butler // thread(s?) can restart. g_atomic_int_inc (&_seek_counter); diff --git a/libs/backends/jack/jack_session.cc b/libs/backends/jack/jack_session.cc index 2ea6ae9f6b..f3c5c2553f 100644 --- a/libs/backends/jack/jack_session.cc +++ b/libs/backends/jack/jack_session.cc @@ -115,7 +115,13 @@ JACKSession::timebase_callback (jack_transport_state_t /*state*/, { Timecode::BBT_Time bbt; TempoMap& tempo_map (_session->tempo_map()); - samplepos_t tf = _session->transport_sample (); + samplepos_t tf; + + /* see commit msg for e2c26e1b9 and Session::start_locate() for + details. + */ + + tf = _session->nominal_jack_transport_sample().value_or (_session->transport_sample()); /* BBT info */ @@ -191,4 +197,3 @@ JACKSession::timebase_callback (jack_transport_state_t /*state*/, } #endif } -