summaryrefslogtreecommitdiff
path: root/libs/ardour/session_transport.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_transport.cc
parentcf31233cd1503f7f3818c6bbeb6f5bd427144f80 (diff)
Implement record with preroll
Diffstat (limited to 'libs/ardour/session_transport.cc')
-rw-r--r--libs/ardour/session_transport.cc23
1 files changed, 22 insertions, 1 deletions
diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc
index a6d25f05ab..8a57456dde 100644
--- a/libs/ardour/session_transport.cc
+++ b/libs/ardour/session_transport.cc
@@ -162,6 +162,27 @@ Session::force_locate (framepos_t target_frame, bool with_roll)
}
void
+Session::unset_preroll_record ()
+{
+ if (_preroll_record_in >= 0) {
+ remove_event (_preroll_record_in, SessionEvent::RecordStart);
+ }
+ _preroll_record_in = -1;
+}
+
+void
+Session::request_preroll_record (framepos_t rec_in)
+{
+ unset_preroll_record ();
+ _preroll_record_in = rec_in;
+ if (_preroll_record_in >= 0) {
+ replace_event (SessionEvent::RecordStart, _preroll_record_in);
+ config.set_punch_in (false);
+ config.set_punch_out (false);
+ }
+}
+
+void
Session::request_play_loop (bool yn, bool change_transport_roll)
{
if (_slave && yn) {
@@ -1583,7 +1604,7 @@ Session::start_transport ()
switch (record_status()) {
case Enabled:
- if (!config.get_punch_in()) {
+ if (!config.get_punch_in() && !preroll_record_enabled()) {
enable_record ();
}
break;