summaryrefslogtreecommitdiff
path: root/libs/ardour/session_process.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/session_process.cc')
-rw-r--r--libs/ardour/session_process.cc38
1 files changed, 23 insertions, 15 deletions
diff --git a/libs/ardour/session_process.cc b/libs/ardour/session_process.cc
index fef23107ca..720f1a7129 100644
--- a/libs/ardour/session_process.cc
+++ b/libs/ardour/session_process.cc
@@ -303,6 +303,27 @@ Session::compute_audible_delta (samplepos_t& pos_and_delta) const
return true;
}
+samplecnt_t
+Session::calc_preroll_subcycle (samplecnt_t ns) const
+{
+ boost::shared_ptr<RouteList> r = routes.reader ();
+ for (RouteList::const_iterator i = r->begin(); i != r->end(); ++i) {
+ samplecnt_t route_offset = (*i)->playback_latency ();
+ if (_remaining_latency_preroll > route_offset + ns) {
+ /* route will no-roll for complete pre-roll cycle */
+ continue;
+ }
+ if (_remaining_latency_preroll > route_offset) {
+ /* route may need partial no-roll and partial roll from
+ * (_transport_sample - _remaining_latency_preroll) .. +ns.
+ * shorten and split the cycle.
+ */
+ ns = std::min (ns, (_remaining_latency_preroll - route_offset));
+ }
+ }
+ return ns;
+}
+
/** Process callback used when the auditioner is not active */
void
Session::process_with_events (pframes_t nframes)
@@ -358,21 +379,8 @@ Session::process_with_events (pframes_t nframes)
ns = std::min ((samplecnt_t)nframes, _count_in_samples);
}
- boost::shared_ptr<RouteList> r = routes.reader ();
- for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
- samplecnt_t route_offset = (*i)->playback_latency ();
- if (_remaining_latency_preroll > route_offset + ns) {
- /* route will no-roll for complete pre-roll cycle */
- continue;
- }
- if (_remaining_latency_preroll > route_offset) {
- /* route may need partial no-roll and partial roll from
- * (_transport_sample - _remaining_latency_preroll) .. +ns.
- * shorten and split the cycle.
- */
- ns = std::min (ns, (_remaining_latency_preroll - route_offset));
- }
- }
+ /* process until next route in-point */
+ ns = calc_preroll_subcycle (ns);
if (_count_in_samples > 0) {
run_click (_transport_sample - _count_in_samples, ns);