From: Robin Gareus Date: Fri, 12 Oct 2012 17:04:20 +0000 (+0000) Subject: MTC Slave: handle locates (quick re-sync) X-Git-Tag: 3.0~782 X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;h=fd1ab7ad40f00a7cdb21bc556187dee8db736fb7;p=ardour.git MTC Slave: handle locates (quick re-sync) git-svn-id: svn://localhost/ardour2/branches/3.0@13259 d708f5d6-7413-0410-9779-e7cbd77b26cf --- diff --git a/libs/ardour/mtc_slave.cc b/libs/ardour/mtc_slave.cc index 49178614f7..1f8bab778c 100644 --- a/libs/ardour/mtc_slave.cc +++ b/libs/ardour/mtc_slave.cc @@ -30,7 +30,6 @@ #include "ardour/slave.h" #include "ardour/session.h" #include "ardour/audioengine.h" -#include "ardour/pi_controller.h" #include "i18n.h" @@ -561,6 +560,7 @@ MTC_Slave::speed_and_position (double& speed, framepos_t& pos) pos = last.position; session.request_locate (pos, false); session.request_transport_speed (0); + engine_dll_initstate = 0; queue_reset (false); DEBUG_TRACE (DEBUG::MTC, "MTC not seen for 2 frames - reset pending\n"); return false; @@ -608,7 +608,12 @@ MTC_Slave::speed_and_position (double& speed, framepos_t& pos) * engine-DLL can oscillate back before 0. * also see note in MTC_Slave::init_engine_dll */ - if (pos <0) queue_reset(true); + if (!session.actively_recording() + && ( (pos < 0) || (labs(pos - sess_pos) > 4 * resolution()) ) + ) { + engine_dll_initstate = 0; + queue_reset (false); + } DEBUG_TRACE (DEBUG::MTC, string_compose ("MTCsync spd: %1 pos: %2 | last-pos: %3 elapsed: %4 delta: %5\n", speed, pos, last.position, elapsed, pos - sess_pos));