ensure that Session handles tempo map changes synchronously in the main RT process thread

This commit is contained in:
Paul Davis 2022-03-14 14:02:09 -06:00
parent 10dc09fcd4
commit 22b50c1716
4 changed files with 8 additions and 8 deletions

View File

@ -1384,6 +1384,7 @@ protected:
void set_transport_speed (double speed);
void set_default_play_speed (double spd);
bool need_declick_before_locate () const;
void tempo_map_changed ();
private:
int create (const std::string& mix_template, BusProfile const *, bool unnamed);
@ -1892,8 +1893,6 @@ private:
int send_full_time_code (samplepos_t, pframes_t nframes);
void send_song_position_pointer (samplepos_t);
void tempo_map_changed ();
/* edit/mix groups */
int load_route_groups (const XMLNode&, int);

View File

@ -289,7 +289,13 @@ AudioEngine::process_callback (pframes_t nframes)
thread_init_callback (NULL);
}
Temporal::TempoMap::fetch ();
Temporal::TempoMap::SharedPtr current_map = Temporal::TempoMap::read ();
if (current_map != Temporal::TempoMap::use()) {
Temporal::TempoMap::set (current_map);
if (_session) {
_session->tempo_map_changed ();
}
}
/* This is for JACK, where the latency callback arrives in sync with
* port registration (usually while ardour holds the process-lock

View File

@ -476,8 +476,6 @@ Session::Session (AudioEngine &eng,
Config->ParameterChanged.connect_same_thread (*this, boost::bind (&Session::config_changed, this, _1, false));
config.ParameterChanged.connect_same_thread (*this, boost::bind (&Session::config_changed, this, _1, true));
TempoMap::MapChanged.connect_same_thread (*this, boost::bind (&Session::tempo_map_changed, this));
if (was_dirty) {
DirtyChanged (); /* EMIT SIGNAL */
}

View File

@ -1628,10 +1628,7 @@ Session::implement_master_strategy ()
void
Session::sync_cues ()
{
std::cerr << "Need to sync cues!\n";
_locations->apply (*this, &Session::sync_cues_from_list);
}
struct LocationByTime