From 53a97515328c5cea1da0d2ef2001fc5890ca7a95 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 4 Mar 2016 17:01:28 +0100 Subject: fix processed region export (track output) --- gtk2_ardour/export_channel_selector.cc | 3 ++- libs/ardour/route.cc | 18 +++++++++++++++--- 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(*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(*i)) { (*i)->run (buffers, start - latency, start - latency + nframes, nframes, true); -- cgit v1.2.3