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