Fix vari-speed and non-locked slave modes
authorRobin Gareus <robin@gareus.org>
Sat, 29 Apr 2017 21:02:40 +0000 (23:02 +0200)
committerRobin Gareus <robin@gareus.org>
Sat, 29 Apr 2017 23:22:25 +0000 (01:22 +0200)
A transport-speed-change is no reason to skip processing.

Prior to this change cannot_process() silently skipped in the process
cycle of the speed-change (which may have been every process-cycle),
without moving the transport or doing any processing.

libs/ardour/ardour/session.h
libs/ardour/session_process.cc

index 4ab9fc605b3d6e24083c5b7c78aeb65dc9ad58e9..0ade34a0e709e1a76d58ec14695299208a3983cb 100644 (file)
@@ -1443,7 +1443,6 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
        static const PostTransportWork ProcessCannotProceedMask =
                PostTransportWork (
                        PostTransportInputChange|
-                       PostTransportSpeed|
                        PostTransportReverse|
                        PostTransportCurveRealloc|
                        PostTransportAudition|
index 766ce395e51fc16edc60afbd46ba93526bcaf6e3..7788eb2b978fd260aa16bc0a5dd6d8e4480d0eba 100644 (file)
@@ -674,7 +674,7 @@ Session::follow_slave (pframes_t nframes)
        }
 
 
-       if (_slave_state == Running && !non_realtime_work_pending()) {
+       if (_slave_state == Running && 0 == (post_transport_work () & ~PostTransportSpeed)) {
                /* speed is set, we're locked, and good to go */
                return true;
        }