3.X version of earlier major fix to 2.X: Route::check_initial_delay() should be virtual and do nothing for busses
git-svn-id: svn://localhost/ardour2/branches/3.0@10123 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
129ac54a57
commit
58ded03f8f
@ -414,7 +414,7 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember,
|
||||
virtual void set_block_size (pframes_t nframes);
|
||||
|
||||
protected:
|
||||
framecnt_t check_initial_delay (framecnt_t, framecnt_t&);
|
||||
virtual framecnt_t check_initial_delay (framecnt_t nframes, framecnt_t&) { return nframes; }
|
||||
|
||||
void passthru (framepos_t start_frame, framepos_t end_frame,
|
||||
pframes_t nframes, int declick);
|
||||
|
@ -208,6 +208,8 @@ class Track : public Route, public PublicDiskstream
|
||||
virtual bool send_silence () const;
|
||||
|
||||
boost::shared_ptr<RecEnableControllable> _rec_enable_control;
|
||||
|
||||
framecnt_t check_initial_delay (framecnt_t nframes, framecnt_t&);
|
||||
|
||||
private:
|
||||
void diskstream_playlist_changed ();
|
||||
|
@ -2801,42 +2801,6 @@ Route::no_roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame,
|
||||
return 0;
|
||||
}
|
||||
|
||||
framecnt_t
|
||||
Route::check_initial_delay (framecnt_t nframes, framecnt_t& transport_frame)
|
||||
{
|
||||
if (_roll_delay > nframes) {
|
||||
|
||||
_roll_delay -= nframes;
|
||||
silence_unlocked (nframes);
|
||||
/* transport frame is not legal for caller to use */
|
||||
return 0;
|
||||
|
||||
} else if (_roll_delay > 0) {
|
||||
|
||||
nframes -= _roll_delay;
|
||||
silence_unlocked (_roll_delay);
|
||||
transport_frame += _roll_delay;
|
||||
|
||||
/* shuffle all the port buffers for things that lead "out" of this Route
|
||||
to reflect that we just wrote _roll_delay frames of silence.
|
||||
*/
|
||||
|
||||
Glib::RWLock::ReaderLock lm (_processor_lock);
|
||||
for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
|
||||
boost::shared_ptr<IOProcessor> iop = boost::dynamic_pointer_cast<IOProcessor> (*i);
|
||||
if (iop) {
|
||||
iop->increment_port_buffer_offset (_roll_delay);
|
||||
}
|
||||
}
|
||||
_output->increment_port_buffer_offset (_roll_delay);
|
||||
|
||||
_roll_delay = 0;
|
||||
|
||||
}
|
||||
|
||||
return nframes;
|
||||
}
|
||||
|
||||
int
|
||||
Route::roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame, int declick,
|
||||
bool /*can_record*/, bool& /* need_butler */)
|
||||
|
@ -693,3 +693,40 @@ Track::maybe_declick (BufferSet& bufs, framecnt_t nframes, int declick)
|
||||
Amp::declick (bufs, nframes, declick);
|
||||
}
|
||||
}
|
||||
|
||||
framecnt_t
|
||||
Track::check_initial_delay (framecnt_t nframes, framecnt_t& transport_frame)
|
||||
{
|
||||
if (_roll_delay > nframes) {
|
||||
|
||||
_roll_delay -= nframes;
|
||||
silence_unlocked (nframes);
|
||||
/* transport frame is not legal for caller to use */
|
||||
return 0;
|
||||
|
||||
} else if (_roll_delay > 0) {
|
||||
|
||||
nframes -= _roll_delay;
|
||||
silence_unlocked (_roll_delay);
|
||||
transport_frame += _roll_delay;
|
||||
|
||||
/* shuffle all the port buffers for things that lead "out" of this Route
|
||||
to reflect that we just wrote _roll_delay frames of silence.
|
||||
*/
|
||||
|
||||
Glib::RWLock::ReaderLock lm (_processor_lock);
|
||||
for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
|
||||
boost::shared_ptr<IOProcessor> iop = boost::dynamic_pointer_cast<IOProcessor> (*i);
|
||||
if (iop) {
|
||||
iop->increment_port_buffer_offset (_roll_delay);
|
||||
}
|
||||
}
|
||||
_output->increment_port_buffer_offset (_roll_delay);
|
||||
|
||||
_roll_delay = 0;
|
||||
|
||||
}
|
||||
|
||||
return nframes;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user