summaryrefslogtreecommitdiff
path: root/libs/ardour/session_ltc.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2014-10-11 15:00:52 +0200
committerRobin Gareus <robin@gareus.org>2014-10-11 15:00:52 +0200
commit250ea066efad08f3059b83ff275a45a921770c2c (patch)
tree2810e7f74ab2bdf7fb3fdca227d8229e2ffe9614 /libs/ardour/session_ltc.cc
parent8525a0b258a02bec0628958a39c8cebeedded9a7 (diff)
revert 8ca546e - original version was correct (note added)
Diffstat (limited to 'libs/ardour/session_ltc.cc')
-rw-r--r--libs/ardour/session_ltc.cc17
1 files changed, 15 insertions, 2 deletions
diff --git a/libs/ardour/session_ltc.cc b/libs/ardour/session_ltc.cc
index 1c05f61b22..1ac2681641 100644
--- a/libs/ardour/session_ltc.cc
+++ b/libs/ardour/session_ltc.cc
@@ -244,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);
- } else if (current_speed > 0) {
cycle_start_frame = (start_frame - ltc_out_latency.max);
+ } else if (current_speed > 0) {
+ cycle_start_frame = (start_frame + ltc_out_latency.max);
} else {
/* There is no need to compensate for latency when not rolling
* rather send the accurate NOW timecode