summaryrefslogtreecommitdiff
path: root/libs/ardour/session_ltc.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2012-11-05 22:55:06 +0000
committerRobin Gareus <robin@gareus.org>2012-11-05 22:55:06 +0000
commit6035b92036f17745052702df1a275567063f6f24 (patch)
tree795046e099a96a938b113bcc228b9c525f26755f /libs/ardour/session_ltc.cc
parent3f1b758491b59c3d06ef1b4c3577fb2eba8d16f0 (diff)
LTC generator: undo pull up/down adjustments
git-svn-id: svn://localhost/ardour2/branches/3.0@13387 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/session_ltc.cc')
-rw-r--r--libs/ardour/session_ltc.cc17
1 files changed, 14 insertions, 3 deletions
diff --git a/libs/ardour/session_ltc.cc b/libs/ardour/session_ltc.cc
index 516daea76d..35b175e531 100644
--- a/libs/ardour/session_ltc.cc
+++ b/libs/ardour/session_ltc.cc
@@ -225,7 +225,10 @@ Session::ltc_tx_send_time_code_for_cycle (framepos_t start_frame, framepos_t end
/* cycle-start may become negative due to latency compensation */
if (cycle_start_frame < 0) { cycle_start_frame = 0; }
- double new_ltc_speed = double(labs(end_frame - start_frame) * SIGNUM(current_speed)) / double(nframes);
+ double new_ltc_speed = (double)(labs(end_frame - start_frame) * SIGNUM(current_speed)) / (double)nframes;
+ if (nominal_frame_rate() != frame_rate()) {
+ new_ltc_speed *= (double)nominal_frame_rate() / (double)frame_rate();
+ }
if (SIGNUM(new_ltc_speed) != SIGNUM (ltc_speed)) {
DEBUG_TRACE (DEBUG::LTC, "LTC TX2: transport changed direction\n");
@@ -353,7 +356,13 @@ Session::ltc_tx_send_time_code_for_cycle (framepos_t start_frame, framepos_t end
framepos_t tc_sample_start;
/* calc timecode frame from current position - round down to nearest timecode */
- sample_to_timecode(cycle_start_frame, tc_start, true, false);
+ Timecode::sample_to_timecode(cycle_start_frame, tc_start, true, false,
+ timecode_frames_per_second(),
+ timecode_drop_frames(),
+ (double)frame_rate(),
+ config.get_subframes_per_frame(),
+ config.get_timecode_offset_negative(), config.get_timecode_offset()
+ );
/* convert timecode back to sample-position */
Timecode::timecode_to_sample (tc_start, tc_sample_start, true, false,
@@ -397,7 +406,9 @@ Session::ltc_tx_send_time_code_for_cycle (framepos_t start_frame, framepos_t end
rint(ltc_enc_pos + ltc_enc_cnt - poff) - cycle_start_frame
));
- if (ltc_speed != 0 && fabs(ceil(ltc_enc_pos + ltc_enc_cnt - poff) - cycle_start_frame) > maxdiff) {
+ if (ltc_enc_pos < 0
+ || (ltc_speed != 0 && fabs(ceil(ltc_enc_pos + ltc_enc_cnt - poff) - cycle_start_frame) > maxdiff)
+ ) {
// (5) re-align
ltc_tx_reset();