eliminate hacky design for being able to deliver the correct time as JACK timebase...
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 12 Nov 2019 01:21:47 +0000 (18:21 -0700)
committerPaul Davis <paul@linuxaudiosystems.com>
Fri, 15 Nov 2019 23:04:58 +0000 (16:04 -0700)
libs/ardour/ardour/session.h
libs/ardour/session_transport.cc
libs/backends/jack/jack_session.cc

index 62742109be23ccccc693d633bb06431f3efe4264..407333c39700eab2ee5f47a4014a29c6eafe57a4 100644 (file)
@@ -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<samplepos_t> 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<samplepos_t> _nominal_jack_transport_sample;
 };
 
 
index 6b0d81172be3bf13b85e890180ff6710b0f355f4..9cc46f2f5c950beefac58fa7da0ec36eae44ea1b 100644 (file)
@@ -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);
index 2ea6ae9f6b21b1668c2326e2ba81176b3730924d..f3c5c2553f74975771b8039232ae392cab611adf 100644 (file)
@@ -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
 }
-