X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fltc_slave.cc;h=04af930f0ea2d32626f75e59733af14aa560b29a;hb=28c29ab22dfb13ca185175ed94ba2d27c72489cf;hp=621984702df11fb200247af762cf2ec4137b4e1c;hpb=6dbe10dcfd1a4d203158c9743889756ea7546882;p=ardour.git diff --git a/libs/ardour/ltc_slave.cc b/libs/ardour/ltc_slave.cc index 621984702d..04af930f0e 100644 --- a/libs/ardour/ltc_slave.cc +++ b/libs/ardour/ltc_slave.cc @@ -32,7 +32,7 @@ #include "ardour/audioengine.h" #include "ardour/audio_port.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace std; using namespace ARDOUR; @@ -45,7 +45,7 @@ using namespace Timecode; LTC_Slave::LTC_Slave (Session& s) : session (s) { - frames_per_ltc_frame = session.frames_per_timecode_frame(); + frames_per_ltc_frame = session.samples_per_timecode_frame(); timecode.rate = session.timecode_frames_per_second(); timecode.drop = session.timecode_drop_frames(); @@ -143,11 +143,13 @@ LTC_Slave::resync_latency() } void -LTC_Slave::reset() +LTC_Slave::reset (bool with_ts) { DEBUG_TRACE (DEBUG::LTC, "LTC reset()\n"); - last_timestamp = 0; - current_delta = 0; + if (with_ts) { + last_timestamp = 0; + current_delta = 0; + } transport_direction = 0; ltc_speed = 0; engine_dll_initstate = 0; @@ -365,13 +367,13 @@ LTC_Slave::process_ltc(framepos_t const /*now*/) ltc_frame_increment(&frame.ltc, fps_i, tv_standard, 0); ltc_frame_to_time(&stime, &frame.ltc, 0); transport_direction = 1; - frame.off_start -= ltc_frame_alignment(session.frames_per_timecode_frame(), tv_standard); - frame.off_end -= ltc_frame_alignment(session.frames_per_timecode_frame(), tv_standard); + frame.off_start -= ltc_frame_alignment(session.samples_per_timecode_frame(), tv_standard); + frame.off_end -= ltc_frame_alignment(session.samples_per_timecode_frame(), tv_standard); } else { ltc_frame_decrement(&frame.ltc, fps_i, tv_standard, 0); int off = frame.off_end - frame.off_start; - frame.off_start += off - ltc_frame_alignment(session.frames_per_timecode_frame(), tv_standard); - frame.off_end += off - ltc_frame_alignment(session.frames_per_timecode_frame(), tv_standard); + frame.off_start += off - ltc_frame_alignment(session.samples_per_timecode_frame(), tv_standard); + frame.off_end += off - ltc_frame_alignment(session.samples_per_timecode_frame(), tv_standard); transport_direction = -1; } @@ -466,7 +468,7 @@ LTC_Slave::speed_and_position (double& speed, framepos_t& pos) DEBUG_TRACE (DEBUG::LTC, string_compose("engine skipped %1 frames. Feeding silence to LTC parser.\n", skip)); if (skip >= 8192) skip = 8192; unsigned char sound[8192]; - memset(sound, 0, sizeof(char) * skip); + memset(sound, 0x80, sizeof(char) * skip); ltc_decoder_write(decoder, sound, nframes, now); } else if (skip != 0) { /* this should never happen. it may if monotonic_cnt, now overflow on 64bit */ @@ -548,9 +550,8 @@ LTC_Slave::speed_and_position (double& speed, framepos_t& pos) if (((pos < 0) || (labs(current_delta) > 2 * session.frame_rate()))) { DEBUG_TRACE (DEBUG::LTC, string_compose ("LTC large drift: %1\n", current_delta)); - reset(); + reset(false); speed = 0; - pos = session.transport_frame(); return true; } @@ -610,7 +611,7 @@ LTC_Slave::approximate_current_delta() const } else { snprintf(delta, sizeof(delta), "\u0394%s%s%lldsm", sync_lock_broken ? "red" : "green", - LEADINGZERO(llabs(current_delta)), PLUSMINUS(-current_delta), llabs(current_delta)); + LEADINGZERO(::llabs(current_delta)), PLUSMINUS(-current_delta), ::llabs(current_delta)); } return std::string(delta); }