X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fsession_ltc.cc;h=2cd21f9afd77b63f7ff902ae1b2a0fbf34afa7a1;hb=37961a6bbe1b5be2df66844a71890ca1d50757dd;hp=b2fbaf602c7dfad95f2a8f203ed2b3d55b8a4134;hpb=6bcdf4f0f106d0b83ed7f221f546c132585e19e7;p=ardour.git diff --git a/libs/ardour/session_ltc.cc b/libs/ardour/session_ltc.cc index b2fbaf602c..2cd21f9afd 100644 --- a/libs/ardour/session_ltc.cc +++ b/libs/ardour/session_ltc.cc @@ -31,7 +31,6 @@ using namespace std; using namespace ARDOUR; -using namespace MIDI; using namespace PBD; using namespace Timecode; @@ -245,13 +244,26 @@ Session::ltc_tx_send_time_code_for_cycle (framepos_t start_frame, framepos_t end /* port latency compensation: * The _generated timecode_ is offset by the port-latency, * therefore the offset depends on the direction of transport. + * + * latency is compensated by adding it to the timecode to + * be generated. e.g. if the signal will reach the output in + * N samples time from now, generate the timecode for (now + N). + * + * sample-sync is achieved by further calculating the difference + * between the timecode and the session-transport and offsetting the + * buffer. + * + * The timecode is generated directly in the Session process callback + * using _transport_frame. It requires that the session has set the + * port's playback latency to worst_playback_latency() prior to + * calling ltc_tx_send_time_code_for_cycle(). */ 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