summaryrefslogtreecommitdiff
path: root/libs/ardour/session_process.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-01-18 15:15:48 +0100
committerRobin Gareus <robin@gareus.org>2017-01-18 15:15:48 +0100
commitefd10abdfb54bb1dd56de0aa01278805f5fbf332 (patch)
treed25ed31bdd75b77842af782b6e97738e663ca264 /libs/ardour/session_process.cc
parentcf31233cd1503f7f3818c6bbeb6f5bd427144f80 (diff)
Implement record with preroll
Diffstat (limited to 'libs/ardour/session_process.cc')
-rw-r--r--libs/ardour/session_process.cc15
1 files changed, 13 insertions, 2 deletions
diff --git a/libs/ardour/session_process.cc b/libs/ardour/session_process.cc
index 9be7007d19..7e802b7d92 100644
--- a/libs/ardour/session_process.cc
+++ b/libs/ardour/session_process.cc
@@ -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_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_enabled()) {
step_back_from_record ();
}
remove = false;
del = false;
break;
+ case SessionEvent::RecordStart:
+ if (preroll_record_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_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());