summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-03-04 17:01:28 +0100
committerRobin Gareus <robin@gareus.org>2016-03-04 17:01:28 +0100
commit53a97515328c5cea1da0d2ef2001fc5890ca7a95 (patch)
tree58cb2d7fcd7c38278cb22d99ccb56e49588e3aeb
parent9b55550f0b470055122b7ed655ed10f82f416763 (diff)
fix processed region export (track output)
-rw-r--r--gtk2_ardour/export_channel_selector.cc3
-rw-r--r--libs/ardour/route.cc18
2 files changed, 17 insertions, 4 deletions
diff --git a/gtk2_ardour/export_channel_selector.cc b/gtk2_ardour/export_channel_selector.cc
index c868d69853..939fbee950 100644
--- a/gtk2_ardour/export_channel_selector.cc
+++ b/gtk2_ardour/export_channel_selector.cc
@@ -536,7 +536,8 @@ RegionExportChannelSelector::handle_selection ()
factory.reset (new RegionExportChannelFactory (_session, region, track, type));
state->config->set_region_processing_type (type);
- for (size_t chan = 0; chan < region_chans; ++chan) {
+ const size_t cc = type == RegionExportChannelFactory::Processed ? track_chans : region_chans;
+ for (size_t chan = 0; chan < cc; ++chan) {
state->config->register_channel (factory->create (chan));
}
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index 26e8be98d4..3523d82a5a 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -663,7 +663,7 @@ Route::bounce_process (BufferSet& buffers, framepos_t start, framecnt_t nframes,
break;
}
- /* if we're not exporting, stop processing if we come across a routing processor. */
+ /* if we're *not* exporting, stop processing if we come across a routing processor. */
if (!for_export && boost::dynamic_pointer_cast<PortInsert>(*i)) {
break;
}
@@ -671,8 +671,20 @@ Route::bounce_process (BufferSet& buffers, framepos_t start, framecnt_t nframes,
break;
}
- /* don't run any processors that does routing.
- * oh, and don't bother with the peak meter either.
+ /* special case the panner (export outputs)
+ * Ideally we'd only run the panner, not the delivery itself...
+ * but panners need separate input/output buffers and some context
+ * (panshell, panner type, etc). AFAICT there is no ill side effect
+ * of re-using the main delivery when freewheeling/exporting a region.
+ */
+ if ((*i) == _main_outs) {
+ assert ((*i)->does_routing());
+ (*i)->run (buffers, start - latency, start - latency + nframes, nframes, true);
+ buffers.set_count ((*i)->output_streams());
+ }
+
+ /* don't run any processors that do routing.
+ * Also don't bother with metering.
*/
if (!(*i)->does_routing() && !boost::dynamic_pointer_cast<PeakMeter>(*i)) {
(*i)->run (buffers, start - latency, start - latency + nframes, nframes, true);