X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fltc_slave.cc;h=2501378017d9de198aefcc5032240207dc5c20f5;hb=3e923470576d2867062d2b62291064cccc4dfe0f;hp=c5840f68d4f0ad76a306ce356c8efa53b70aeec2;hpb=ced4378d0914bcfb926267772c45d1d23f3bed38;p=ardour.git diff --git a/libs/ardour/ltc_slave.cc b/libs/ardour/ltc_slave.cc index c5840f68d4..2501378017 100644 --- a/libs/ardour/ltc_slave.cc +++ b/libs/ardour/ltc_slave.cc @@ -26,12 +26,13 @@ #include "pbd/pthread_utils.h" #include "ardour/debug.h" +#include "ardour/profile.h" #include "ardour/slave.h" #include "ardour/session.h" #include "ardour/audioengine.h" #include "ardour/audio_port.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace std; using namespace ARDOUR; @@ -44,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(); @@ -151,6 +152,8 @@ LTC_Slave::reset() ltc_speed = 0; engine_dll_initstate = 0; sync_lock_broken = false; + + ActiveChanged (false); /* EMIT SIGNAL */ } void @@ -362,13 +365,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; } @@ -443,8 +446,10 @@ LTC_Slave::speed_and_position (double& speed, framepos_t& pos) if (last_timestamp == 0) { engine_dll_initstate = 0; if (delayedlocked < 10) ++delayedlocked; - } - else if (engine_dll_initstate != transport_direction && ltc_speed != 0) { + } else if (engine_dll_initstate != transport_direction && ltc_speed != 0) { + + ActiveChanged (true); /* EMIT SIGNAL */ + engine_dll_initstate = transport_direction; init_engine_dll(last_ltc_frame + rint(ltc_speed * double(2 * nframes + now - last_timestamp)), session.engine().samples_per_cycle()); @@ -488,6 +493,7 @@ LTC_Slave::speed_and_position (double& speed, framepos_t& pos) reset(); speed = 0; pos = session.transport_frame(); + ActiveChanged (false); /* EMIT SIGNAL */ return true; } @@ -556,7 +562,7 @@ LTC_Slave::speed_and_position (double& speed, framepos_t& pos) speed = 1.0; } - if (speed != 0 && delayedlocked == 0 && fabsf(speed) != 1.0) { + if (speed != 0 && delayedlocked == 0 && fabs(speed) != 1.0) { sync_lock_broken = true; DEBUG_TRACE (DEBUG::LTC, string_compose ("LTC speed not locked %1 %2\n", speed, ltc_speed)); } @@ -604,7 +610,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); }