diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2019-11-15 15:58:29 -0700 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2019-11-15 16:06:04 -0700 |
commit | 1c7e446cb4819dfe820067803c15030e6fc3f49a (patch) | |
tree | 4a5dc886f61501580d7c5de5b24b81f317f48aac | |
parent | d64cf7a76225de7bbd1c27f33aed9b98c397735c (diff) |
better transport master behavior when working with sample-clock-synced transport masters
-rw-r--r-- | libs/ardour/transport_master_manager.cc | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/libs/ardour/transport_master_manager.cc b/libs/ardour/transport_master_manager.cc index 22faf4dd85..dbbd5c57bc 100644 --- a/libs/ardour/transport_master_manager.cc +++ b/libs/ardour/transport_master_manager.cc @@ -204,7 +204,23 @@ TransportMasterManager::pre_process_transport_masters (pframes_t nframes, sample return 1.0; } - if (_master_speed != 0.0) { + if (_current_master->sample_clock_synced()) { + + /* No master DLL required. Speed identified by the master is + * our speed, quantized to {1.0, 0.0, -1.0} + */ + + if (_master_speed > 0.0f) { + engine_speed = 1.0f; + } else if (_master_speed < 0.0f) { + engine_speed = -1.0f; + } else { + engine_speed = 0.0f; + } + + DEBUG_TRACE (DEBUG::Slave, string_compose ("S-clock synced master speed %1 used as %2\n", _master_speed, engine_speed)); + + } else if (_master_speed != 0.0) { samplepos_t delta = _master_position; @@ -264,18 +280,6 @@ TransportMasterManager::pre_process_transport_masters (pframes_t nframes, sample engine_speed = 1.0; } - if (_current_master->sample_clock_synced() && engine_speed != 0.0f) { - - /* if the master is synced to our audio interface via word-clock or similar, then we assume that its speed is binary: 0.0 or 1.0 - (since our sample clock cannot change with respect to it). - */ - if (engine_speed > 0.0) { - engine_speed = 1.0; - } else if (engine_speed < 0.0) { - engine_speed = -1.0; - } - } - /* speed is set, we're locked, and good to go */ DEBUG_TRACE (DEBUG::Slave, string_compose ("%1: computed speed-to-follow-master as %2\n", _current_master->name(), engine_speed)); |