summaryrefslogtreecommitdiff
path: root/libs/ardour/audio_track.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2010-04-14 15:21:55 +0000
committerCarl Hetherington <carl@carlh.net>2010-04-14 15:21:55 +0000
commit72f8544b2411c0bb9a8a46b2d27c5e94c2c0b803 (patch)
tree813eee39d04b5eeaf432ea198a891b2dfc203a2b /libs/ardour/audio_track.cc
parenta83157de45d79dbd17721d729f3ac014e84e9573 (diff)
Don't run deliveries to output ports during export / freeze.
git-svn-id: svn://localhost/ardour2/branches/3.0@6892 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/audio_track.cc')
-rw-r--r--libs/ardour/audio_track.cc11
1 files changed, 7 insertions, 4 deletions
diff --git a/libs/ardour/audio_track.cc b/libs/ardour/audio_track.cc
index 7a26e300b9..07930c49e6 100644
--- a/libs/ardour/audio_track.cc
+++ b/libs/ardour/audio_track.cc
@@ -44,6 +44,7 @@
#include "ardour/session.h"
#include "ardour/utils.h"
#include "ardour/session_playlists.h"
+#include "ardour/delivery.h"
#include "i18n.h"
using namespace std;
@@ -556,7 +557,6 @@ AudioTrack::export_stuff (BufferSet& buffers, sframes_t start, nframes_t nframes
{
boost::scoped_array<gain_t> gain_buffer (new gain_t[nframes]);
boost::scoped_array<float> mix_buffer (new float[nframes]);
- ProcessorList::iterator i;
boost::shared_ptr<AudioDiskstream> diskstream = audio_diskstream();
Glib::RWLock::ReaderLock rlock (_processor_lock);
@@ -595,11 +595,14 @@ AudioTrack::export_stuff (BufferSet& buffers, sframes_t start, nframes_t nframes
/* note: only run processors during export. other layers in the machinery
will already have checked that there are no external port processors.
+ Also, don't run deliveries that write to real output ports.
*/
- for (i = _processors.begin(); i != _processors.end(); ++i) {
- boost::shared_ptr<Processor> processor;
- if ((processor = boost::dynamic_pointer_cast<Processor>(*i)) != 0) {
+ for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
+ boost::shared_ptr<Processor> processor = boost::dynamic_pointer_cast<Processor> (*i);
+ boost::shared_ptr<Delivery> delivery = boost::dynamic_pointer_cast<Delivery> (*i);
+
+ if (processor && (!delivery || !Delivery::role_requires_output_ports (delivery->role()))) {
processor->run (buffers, start, start+nframes, nframes, true);
}
}