diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2010-01-21 14:32:22 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2010-01-21 14:32:22 +0000 |
commit | 55b63cb5720958e789bc2fb16c51d2e3b7f1ef2d (patch) | |
tree | 313b73815a551794e4f046517097418f547cf41e /libs/ardour/route.cc | |
parent | 2c3556ab31d3798fc1ab328fbfb51fea636dead1 (diff) |
stopped/monitor/state change bug fix from 2.X
git-svn-id: svn://localhost/ardour2/branches/3.0@6528 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/route.cc')
-rw-r--r-- | libs/ardour/route.cc | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index fa4b3ce51d..6e8b134cc9 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -2520,10 +2520,24 @@ Route::no_roll (nframes_t nframes, sframes_t start_frame, sframes_t end_frame, return 0; } - if (session_state_changing || !_active || n_inputs() == ChanCount::ZERO) { + if (!_active || n_inputs() == ChanCount::ZERO) { silence (nframes); return 0; } + if (session_state_changing) { + if (_session.transport_speed() != 0.0f) { + /* we're rolling but some state is changing (e.g. our diskstream contents) + so we cannot use them. Be silent till this is over. + + XXX note the absurdity of ::no_roll() being called when we ARE rolling! + */ + silence (nframes); + return 0; + } + /* we're really not rolling, so we're either delivery silence or actually + monitoring, both of which are safe to do while session_state_changing is true. + */ + } _amp->apply_gain_automation (false); passthru (start_frame, end_frame, nframes, 0); |