summaryrefslogtreecommitdiff
path: root/libs/ardour/session_transport.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-01-19 12:57:47 +0100
committerRobin Gareus <robin@gareus.org>2017-01-19 13:05:54 +0100
commite959a762b5a0d09b92a95e2171a22d86b655a1c5 (patch)
treef23f1a5d44c8e11138c3e5c49a129cd2b67b943b /libs/ardour/session_transport.cc
parentebdf3de598413e135e1f92e19634ac5eb8abe752 (diff)
Rework preroll-rec API:
* rename: indicate that recording happens after preroll, punch-in * move API into libardour: rec+roll (no separate setup, seek, roll APIs)
Diffstat (limited to 'libs/ardour/session_transport.cc')
-rw-r--r--libs/ardour/session_transport.cc28
1 files changed, 18 insertions, 10 deletions
diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc
index 8a57456dde..35eb02bf3c 100644
--- a/libs/ardour/session_transport.cc
+++ b/libs/ardour/session_transport.cc
@@ -162,24 +162,32 @@ Session::force_locate (framepos_t target_frame, bool with_roll)
}
void
-Session::unset_preroll_record ()
+Session::unset_preroll_record_punch ()
{
- if (_preroll_record_in >= 0) {
- remove_event (_preroll_record_in, SessionEvent::RecordStart);
+ if (_preroll_record_punch_pos >= 0) {
+ remove_event (_preroll_record_punch_pos, SessionEvent::RecordStart);
}
- _preroll_record_in = -1;
+ _preroll_record_punch_pos = -1;
}
void
-Session::request_preroll_record (framepos_t rec_in)
+Session::request_preroll_record_punch (framepos_t rec_in, framecnt_t preroll)
{
- unset_preroll_record ();
- _preroll_record_in = rec_in;
- if (_preroll_record_in >= 0) {
- replace_event (SessionEvent::RecordStart, _preroll_record_in);
+ if (actively_recording ()) {
+ return;
+ }
+ unset_preroll_record_punch ();
+ framepos_t start = std::max ((framepos_t)0, rec_in - preroll);
+
+ _preroll_record_punch_pos = rec_in;
+ if (_preroll_record_punch_pos >= 0) {
+ replace_event (SessionEvent::RecordStart, _preroll_record_punch_pos);
config.set_punch_in (false);
config.set_punch_out (false);
}
+ maybe_enable_record ();
+ request_locate (start, true);
+ set_requested_return_frame (rec_in);
}
void
@@ -1604,7 +1612,7 @@ Session::start_transport ()
switch (record_status()) {
case Enabled:
- if (!config.get_punch_in() && !preroll_record_enabled()) {
+ if (!config.get_punch_in() && !preroll_record_punch_enabled()) {
enable_record ();
}
break;