From 7f72e7d879312e0130bc840566b572b34fe0c591 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 9 Jan 2015 06:02:36 +0100 Subject: [PATCH] fix LTC alignment. LTC-slave: offset the parsed LTC-frame instead of changing the frame's timestamp. This fixes an issue with freewheel timeout and delta-calculation. Align transport-time with output to match capture alignment: "with existing material". LTC-generator: follow suit. align clock with master-bus out. This is a semi-permanent workaround. Once [tracks feeding] the master-bus is/are delayed to align to output. The generator needs to use (worst_track_latency not worst_playback_latency) --- libs/ardour/ltc_slave.cc | 4 +++- libs/ardour/session_ltc.cc | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/libs/ardour/ltc_slave.cc b/libs/ardour/ltc_slave.cc index 8d570aeeb8..e0da586f3e 100644 --- a/libs/ardour/ltc_slave.cc +++ b/libs/ardour/ltc_slave.cc @@ -381,6 +381,8 @@ LTC_Slave::process_ltc(framepos_t const /*now*/) timecode_negative_offset, timecode_offset ); + ltc_frame += ltc_slave_latency.max + session.worst_playback_latency(); + framepos_t cur_timestamp = frame.off_end + 1; DEBUG_TRACE (DEBUG::LTC, string_compose ("LTC F: %1 LF: %2 N: %3 L: %4\n", ltc_frame, last_ltc_frame, cur_timestamp, last_timestamp)); if (frame.off_end + 1 <= last_timestamp || last_timestamp == 0) { @@ -463,7 +465,7 @@ LTC_Slave::speed_and_position (double& speed, framepos_t& pos) reset(); } - parse_ltc(nframes, in, now - ltc_slave_latency.max ); + parse_ltc(nframes, in, now); process_ltc(now); } diff --git a/libs/ardour/session_ltc.cc b/libs/ardour/session_ltc.cc index 1ac2681641..2cd21f9afd 100644 --- a/libs/ardour/session_ltc.cc +++ b/libs/ardour/session_ltc.cc @@ -261,9 +261,9 @@ Session::ltc_tx_send_time_code_for_cycle (framepos_t start_frame, framepos_t end framepos_t cycle_start_frame; if (current_speed < 0) { - cycle_start_frame = (start_frame - ltc_out_latency.max); + cycle_start_frame = (start_frame - ltc_out_latency.max + worst_playback_latency()); } else if (current_speed > 0) { - cycle_start_frame = (start_frame + ltc_out_latency.max); + cycle_start_frame = (start_frame + ltc_out_latency.max - worst_playback_latency()); } else { /* There is no need to compensate for latency when not rolling * rather send the accurate NOW timecode -- 2.30.2