summaryrefslogtreecommitdiff
path: root/libs/ardour/port_manager.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-10-30 17:27:13 +0100
committerRobin Gareus <robin@gareus.org>2017-10-30 17:27:13 +0100
commitb54db1cab79e25c39eccb4667bc7c44efb4ccb02 (patch)
tree8664de71fb64b23dcf0bac1014f09655ea744f5c /libs/ardour/port_manager.cc
parentd6e96a688dda3a9fa8fbb4c3a60526475aabb7bc (diff)
Fix fade-out at quit.
Diffstat (limited to 'libs/ardour/port_manager.cc')
-rw-r--r--libs/ardour/port_manager.cc23
1 files changed, 19 insertions, 4 deletions
diff --git a/libs/ardour/port_manager.cc b/libs/ardour/port_manager.cc
index eae1654543..2b038142f8 100644
--- a/libs/ardour/port_manager.cc
+++ b/libs/ardour/port_manager.cc
@@ -869,13 +869,26 @@ PortManager::check_monitoring ()
}
void
-PortManager::fade_out (gain_t base_gain, gain_t gain_step, pframes_t nframes)
+PortManager::cycle_end_fade_out (gain_t base_gain, gain_t gain_step, pframes_t nframes, Session* s)
{
- for (Ports::iterator i = _cycle_ports->begin(); i != _cycle_ports->end(); ++i) {
+ if (s && s->rt_tasklist ()) {
+ RTTaskList::TaskList tl;
+ for (Ports::iterator p = _cycle_ports->begin(); p != _cycle_ports->end(); ++p) {
+ tl.push_back (boost::bind (&Port::cycle_end, p->second, nframes));
+ }
+ s->rt_tasklist()->process (tl);
+ } else {
+ for (Ports::iterator p = _cycle_ports->begin(); p != _cycle_ports->end(); ++p) {
+ p->second->cycle_end (nframes);
+ }
+ }
- if (i->second->sends_output()) {
+ for (Ports::iterator p = _cycle_ports->begin(); p != _cycle_ports->end(); ++p) {
+ p->second->flush_buffers (nframes);
+
+ if (p->second->sends_output()) {
- boost::shared_ptr<AudioPort> ap = boost::dynamic_pointer_cast<AudioPort> (i->second);
+ boost::shared_ptr<AudioPort> ap = boost::dynamic_pointer_cast<AudioPort> (p->second);
if (ap) {
Sample* s = ap->engine_get_whole_audio_buffer ();
gain_t g = base_gain;
@@ -887,6 +900,8 @@ PortManager::fade_out (gain_t base_gain, gain_t gain_step, pframes_t nframes)
}
}
}
+ _cycle_ports.reset ();
+ /* we are done */
}
PortEngine&