diff options
author | Robin Gareus <robin@gareus.org> | 2012-11-05 22:55:06 +0000 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2012-11-05 22:55:06 +0000 |
commit | 6035b92036f17745052702df1a275567063f6f24 (patch) | |
tree | 795046e099a96a938b113bcc228b9c525f26755f /libs/ardour/session_ltc.cc | |
parent | 3f1b758491b59c3d06ef1b4c3577fb2eba8d16f0 (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.cc | 17 |
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(); |