OSC: remove debug output.
[ardour.git] / libs / ardour / session_process.cc
index 9be7007d194ed3905ee08ad130349a9d20f51aa4..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;
        }
@@ -1156,7 +1156,7 @@ Session::process_event (SessionEvent* ev)
 
        case SessionEvent::PunchIn:
                // cerr << "PunchIN at " << transport_frame() << endl;
-               if (config.get_punch_in() && record_status() == Enabled) {
+               if (config.get_punch_in() && record_status() == Enabled && !preroll_record_punch_enabled()) {
                        enable_record ();
                }
                remove = false;
@@ -1165,13 +1165,21 @@ Session::process_event (SessionEvent* ev)
 
        case SessionEvent::PunchOut:
                // cerr << "PunchOUT at " << transport_frame() << endl;
-               if (config.get_punch_out()) {
+               if (config.get_punch_out() && !preroll_record_punch_enabled()) {
                        step_back_from_record ();
                }
                remove = false;
                del = false;
                break;
 
+       case SessionEvent::RecordStart:
+               if (preroll_record_punch_enabled() && record_status() == Enabled) {
+                       enable_record ();
+               }
+               remove = false;
+               del = false;
+               break;
+
        case SessionEvent::StopOnce:
                if (!non_realtime_work_pending()) {
                        _clear_event_type (SessionEvent::StopOnce);
@@ -1271,6 +1279,9 @@ Session::compute_stop_limit () const
                return max_framepos;
        }
 
+       if (preroll_record_punch_enabled ()) {
+               return max_framepos;
+       }
 
        bool const punching_in = (config.get_punch_in () && _locations->auto_punch_location());
        bool const punching_out = (config.get_punch_out () && _locations->auto_punch_location());