Consolidate delivery buffer flushing of all route types
Route::no_roll(), Route::roll(), Track::no_roll(), AudioTrack::roll() and MidiTrack::roll() all had the exact same loop for flushing buffers of their Delivery processors. That was a lot of replicated code that had to be kept synchronised by hand. Put that code into a protected method Route::flush_processor_buffers_locked() which is called instead.
This commit is contained in:
parent
bfc6b6a3ab
commit
8af589b322
|
@ -588,6 +588,8 @@ public:
|
|||
pframes_t nframes, int declick,
|
||||
bool gain_automation_ok);
|
||||
|
||||
void flush_processor_buffers_locked (framecnt_t nframes);
|
||||
|
||||
virtual void bounce_process (BufferSet& bufs,
|
||||
framepos_t start_frame, framecnt_t nframes,
|
||||
boost::shared_ptr<Processor> endpoint, bool include_endpoint,
|
||||
|
|
|
@ -394,12 +394,7 @@ AudioTrack::roll (pframes_t nframes, framepos_t start_frame, framepos_t end_fram
|
|||
|
||||
process_output_buffers (bufs, start_frame, end_frame, nframes, declick, (!diskstream->record_enabled() && _session.transport_rolling()));
|
||||
|
||||
for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
|
||||
boost::shared_ptr<Delivery> d = boost::dynamic_pointer_cast<Delivery> (*i);
|
||||
if (d) {
|
||||
d->flush_buffers (nframes);
|
||||
}
|
||||
}
|
||||
flush_processor_buffers_locked (nframes);
|
||||
|
||||
need_butler = diskstream->commit (playback_distance);
|
||||
|
||||
|
|
|
@ -444,12 +444,7 @@ MidiTrack::roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame
|
|||
process_output_buffers (bufs, start_frame, end_frame, nframes,
|
||||
declick, (!diskstream->record_enabled() && !_session.transport_stopped()));
|
||||
|
||||
for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
|
||||
boost::shared_ptr<Delivery> d = boost::dynamic_pointer_cast<Delivery> (*i);
|
||||
if (d) {
|
||||
d->flush_buffers (nframes);
|
||||
}
|
||||
}
|
||||
flush_processor_buffers_locked (nframes);
|
||||
|
||||
need_butler = diskstream->commit (playback_distance);
|
||||
|
||||
|
|
|
@ -3391,6 +3391,17 @@ Route::pans_required () const
|
|||
return max (n_inputs ().n_audio(), processor_max_streams.n_audio());
|
||||
}
|
||||
|
||||
void
|
||||
Route::flush_processor_buffers_locked (framecnt_t nframes)
|
||||
{
|
||||
for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
|
||||
boost::shared_ptr<Delivery> d = boost::dynamic_pointer_cast<Delivery> (*i);
|
||||
if (d) {
|
||||
d->flush_buffers (nframes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
Route::no_roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame, bool session_state_changing)
|
||||
{
|
||||
|
@ -3436,12 +3447,8 @@ Route::no_roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame,
|
|||
_trim->apply_gain_automation (false);
|
||||
passthru (bufs, start_frame, end_frame, nframes, 0);
|
||||
|
||||
for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
|
||||
boost::shared_ptr<Delivery> d = boost::dynamic_pointer_cast<Delivery> (*i);
|
||||
if (d) {
|
||||
d->flush_buffers (nframes);
|
||||
}
|
||||
}
|
||||
flush_processor_buffers_locked (nframes);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -3480,12 +3487,8 @@ Route::roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame, in
|
|||
|
||||
passthru (bufs, start_frame, end_frame, nframes, declick);
|
||||
|
||||
for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
|
||||
boost::shared_ptr<Delivery> d = boost::dynamic_pointer_cast<Delivery> (*i);
|
||||
if (d) {
|
||||
d->flush_buffers (nframes);
|
||||
}
|
||||
}
|
||||
flush_processor_buffers_locked (nframes);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -466,12 +466,7 @@ Track::no_roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame,
|
|||
passthru (bufs, start_frame, end_frame, nframes, false);
|
||||
}
|
||||
|
||||
for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
|
||||
boost::shared_ptr<Delivery> d = boost::dynamic_pointer_cast<Delivery> (*i);
|
||||
if (d) {
|
||||
d->flush_buffers (nframes);
|
||||
}
|
||||
}
|
||||
flush_processor_buffers_locked (nframes);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue