attempt to prevent dropping into record if rolling in reverse (should fix #4254)
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 9 Aug 2011 21:17:55 +0000 (21:17 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 9 Aug 2011 21:17:55 +0000 (21:17 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@9971 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/ardour/session.cc
libs/ardour/session_transport.cc

index 2be3af3c0f6f0fb075da41b0e3303763362d9fe8..631a20aac7f42c374691cb6c3c11644a802fa3ca 100644 (file)
@@ -985,13 +985,18 @@ Session::handle_locations_changed (Locations::LocationList& locations)
 void
 Session::enable_record ()
 {
+       if (_transport_speed < 0.0) {
+               /* no recording in reverse */
+               return;
+       }
+
        while (1) {
                RecordState rs = (RecordState) g_atomic_int_get (&_record_status);
 
                if (rs == Recording) {
                        break;
                }
-
+               
                if (g_atomic_int_compare_and_exchange (&_record_status, rs, Recording)) {
 
                        _last_record_location = _transport_frame;
index 5fc073d93eb3a9306029ad7309211e9fbbc45824..ca6b4da319ba4cbecd4079337ee6e9cb8c21a95c 100644 (file)
@@ -958,6 +958,11 @@ Session::set_transport_speed (double speed, bool abort, bool clear_state)
                return;
        }
 
+       if (actively_recording() && speed < 0.0) {
+               /* no reverse during recording */
+               return;
+       }
+
        _target_transport_speed = fabs(speed);
 
        /* 8.0 max speed is somewhat arbitrary but based on guestimates regarding disk i/o capability