summaryrefslogtreecommitdiff
path: root/libs/ardour/transport_master_manager.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2019-11-15 15:58:29 -0700
committerPaul Davis <paul@linuxaudiosystems.com>2019-11-15 16:06:04 -0700
commit1c7e446cb4819dfe820067803c15030e6fc3f49a (patch)
tree4a5dc886f61501580d7c5de5b24b81f317f48aac /libs/ardour/transport_master_manager.cc
parentd64cf7a76225de7bbd1c27f33aed9b98c397735c (diff)
better transport master behavior when working with sample-clock-synced transport masters
Diffstat (limited to 'libs/ardour/transport_master_manager.cc')
-rw-r--r--libs/ardour/transport_master_manager.cc30
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));