summaryrefslogtreecommitdiff
path: root/libs/ardour/session_transport.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-01-19 13:03:57 +0100
committerRobin Gareus <robin@gareus.org>2017-01-19 13:05:54 +0100
commit9c08a403c4c0a169acf44c741af1c40b16e23795 (patch)
treea237c82529b9e2bfddbac109336b0c807851c94e /libs/ardour/session_transport.cc
parente959a762b5a0d09b92a95e2171a22d86b655a1c5 (diff)
Add alternative preroll record mode:
* Start recording at preroll, trim region to skip preroll at rec-stop * Keep old punch-in rec-at-preroll API for tape-tracks (later)
Diffstat (limited to 'libs/ardour/session_transport.cc')
-rw-r--r--libs/ardour/session_transport.cc27
1 files changed, 27 insertions, 0 deletions
diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc
index 35eb02bf3c..4a729700ab 100644
--- a/libs/ardour/session_transport.cc
+++ b/libs/ardour/session_transport.cc
@@ -171,12 +171,19 @@ Session::unset_preroll_record_punch ()
}
void
+Session::unset_preroll_record_trim ()
+{
+ _preroll_record_trim_len = 0;
+}
+
+void
Session::request_preroll_record_punch (framepos_t rec_in, framecnt_t preroll)
{
if (actively_recording ()) {
return;
}
unset_preroll_record_punch ();
+ unset_preroll_record_trim ();
framepos_t start = std::max ((framepos_t)0, rec_in - preroll);
_preroll_record_punch_pos = rec_in;
@@ -191,6 +198,25 @@ Session::request_preroll_record_punch (framepos_t rec_in, framecnt_t preroll)
}
void
+Session::request_preroll_record_trim (framepos_t rec_in, framecnt_t preroll)
+{
+ if (actively_recording ()) {
+ return;
+ }
+ unset_preroll_record_punch ();
+ unset_preroll_record_trim ();
+
+ config.set_punch_in (false);
+ config.set_punch_out (false);
+
+ framepos_t pos = std::max ((framepos_t)0, rec_in - preroll);
+ _preroll_record_trim_len = preroll;
+ maybe_enable_record ();
+ request_locate (pos, true);
+ set_requested_return_frame (rec_in);
+}
+
+void
Session::request_play_loop (bool yn, bool change_transport_roll)
{
if (_slave && yn) {
@@ -819,6 +845,7 @@ Session::non_realtime_stop (bool abort, int on_entry, bool& finished)
}
clear_clicks();
+ unset_preroll_record_trim ();
/* do this before seeking, because otherwise the tracks will do the wrong thing in seamless loop mode.
*/