summaryrefslogtreecommitdiff
path: root/libs/ardour/mtc_slave.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2012-10-12 17:04:20 +0000
committerRobin Gareus <robin@gareus.org>2012-10-12 17:04:20 +0000
commitfd1ab7ad40f00a7cdb21bc556187dee8db736fb7 (patch)
tree9285fe14e55557d24c22f1a91bcadd9fd32afbe1 /libs/ardour/mtc_slave.cc
parent76eb2f23d634ed8880f69b066318e6bd0e9d0d4b (diff)
MTC Slave: handle locates (quick re-sync)
git-svn-id: svn://localhost/ardour2/branches/3.0@13259 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/mtc_slave.cc')
-rw-r--r--libs/ardour/mtc_slave.cc9
1 files changed, 7 insertions, 2 deletions
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));