MTC Slave: handle locates (quick re-sync)
authorRobin Gareus <robin@gareus.org>
Fri, 12 Oct 2012 17:04:20 +0000 (17:04 +0000)
committerRobin Gareus <robin@gareus.org>
Fri, 12 Oct 2012 17:04:20 +0000 (17:04 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@13259 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/ardour/mtc_slave.cc

index 49178614f76286f192a908986c89aced7115c1d5..1f8bab778ccf595e89ecb686a6064e319bc5d2dc 100644 (file)
@@ -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));