projects
/
ardour.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Don't add standard processors twice to routes from 2.X sessions. Fixes #3434.
[ardour.git]
/
libs
/
ardour
/
delivery.cc
diff --git
a/libs/ardour/delivery.cc
b/libs/ardour/delivery.cc
index 5861e5ea2c70d3c0858b05c0e609bda92b45da7c..e93e550308cd176e90d94942e2832d2f6fa20c64 100644
(file)
--- a/
libs/ardour/delivery.cc
+++ b/
libs/ardour/delivery.cc
@@
-137,7
+137,8
@@
Delivery::can_support_io_configuration (const ChanCount& in, ChanCount& out) con
if (_output) {
if (_output->n_ports() != ChanCount::ZERO) {
if (_output) {
if (_output->n_ports() != ChanCount::ZERO) {
- out = _output->n_ports();
+ /* increase number of output ports if the processor chain requires it */
+ out = ChanCount::max (_output->n_ports(), in);
return true;
} else {
/* not configured yet - we will passthru */
return true;
} else {
/* not configured yet - we will passthru */
@@
-189,8
+190,7
@@
Delivery::configure_io (ChanCount in, ChanCount out)
if (_output) {
if (_output->n_ports() != out) {
if (_output->n_ports() != ChanCount::ZERO) {
if (_output) {
if (_output->n_ports() != out) {
if (_output->n_ports() != ChanCount::ZERO) {
- fatal << _name << " programming error: configure_io with nports = " << _output->n_ports() << " called with " << in << " and " << out << " with " << _output->n_ports() << " output ports" << endmsg;
- /*NOTREACHED*/
+ _output->ensure_io (out, false, this);
} else {
/* I/O not yet configured */
}
} else {
/* I/O not yet configured */
}
@@
-209,8
+209,9
@@
Delivery::configure_io (ChanCount in, ChanCount out)
}
}
}
}
}
}
- }
+ }
+
if (!Processor::configure_io (in, out)) {
return false;
}
if (!Processor::configure_io (in, out)) {
return false;
}
@@
-221,7
+222,7
@@
Delivery::configure_io (ChanCount in, ChanCount out)
}
void
}
void
-Delivery::run (BufferSet& bufs,
sframes_t start_frame, sframe
s_t end_frame, nframes_t nframes, bool result_required)
+Delivery::run (BufferSet& bufs,
framepos_t start_frame, framepo
s_t end_frame, nframes_t nframes, bool result_required)
{
assert (_output);
{
assert (_output);
@@
-418,50
+419,49
@@
Delivery::reset_panners ()
void
void
-Delivery::start_pan_touch (uint32_t which)
+Delivery::start_pan_touch (uint32_t which
, double when
)
{
if (which < _panner->npanners()) {
{
if (which < _panner->npanners()) {
- _panner->pan_control(which)->start_touch();
+ _panner->pan_control(which)->start_touch(
when
);
}
}
void
}
}
void
-Delivery::end_pan_touch (uint32_t which)
+Delivery::end_pan_touch (uint32_t which
, bool mark, double when
)
{
if (which < _panner->npanners()) {
{
if (which < _panner->npanners()) {
- _panner->pan_control(which)->stop_touch();
+ _panner->pan_control(which)->stop_touch(
mark, when
);
}
}
}
}
-void
-Delivery::transport_stopped (sframes_t frame)
-{
- _panner->transport_stopped (frame);
-}
void
void
-Delivery::flush (nframes_t nframes, nframes64_t time)
+Delivery::flush
_buffers
(nframes_t nframes, nframes64_t time)
{
/* io_lock, not taken: function must be called from Session::process() calltree */
PortSet& ports (_output->ports());
{
/* io_lock, not taken: function must be called from Session::process() calltree */
PortSet& ports (_output->ports());
-
+
for (PortSet::iterator i = ports.begin(); i != ports.end(); ++i) {
(*i).flush_buffers (nframes, time, _output_offset);
}
}
void
for (PortSet::iterator i = ports.begin(); i != ports.end(); ++i) {
(*i).flush_buffers (nframes, time, _output_offset);
}
}
void
-Delivery::transport_stopped ()
+Delivery::transport_stopped (
framepos_t now
)
{
{
- /* turn off any notes that are on */
+ Processor::transport_stopped (now);
-
PortSet& ports (_output->ports()
);
+
_panner->transport_stopped (now
);
- for (PortSet::iterator i = ports.begin(); i != ports.end(); ++i) {
- (*i).transport_stopped ();
- }
+ if (_output) {
+ PortSet& ports (_output->ports());
+
+ for (PortSet::iterator i = ports.begin(); i != ports.end(); ++i) {
+ (*i).transport_stopped ();
+ }
+ }
}
gain_t
}
gain_t
@@
-481,9
+481,7
@@
Delivery::target_gain ()
return 0.0;
}
return 0.0;
}
- gain_t desired_gain = -1.0f;
-
- MuteMaster::MutePoint mp;
+ MuteMaster::MutePoint mp = MuteMaster::Main; // stupid gcc uninit warning
switch (_role) {
case Main:
switch (_role) {
case Main:
@@
-495,13
+493,15
@@
Delivery::target_gain ()
case Send:
case Insert:
case Aux:
case Send:
case Insert:
case Aux:
- /* XXX FIX ME this is wrong, we need per-delivery muting */
- mp = MuteMaster::PreFader;
+ if (_pre_fader) {
+ mp = MuteMaster::PreFader;
+ } else {
+ mp = MuteMaster::PostFader;
+ }
break;
}
break;
}
- // cerr << name() << ' ';
- desired_gain = _mute_master->mute_gain_at (mp);
+ gain_t desired_gain = _mute_master->mute_gain_at (mp);
if (_role == Listen && _session.monitor_out() && !_session.listening()) {
if (_role == Listen && _session.monitor_out() && !_session.listening()) {
@@
-538,7
+538,7
@@
Delivery::set_name (const std::string& name)
void
Delivery::output_changed (IOChange change, void* /*src*/)
{
void
Delivery::output_changed (IOChange change, void* /*src*/)
{
- if (change
& ARDOUR
::ConfigurationChanged) {
+ if (change
.type & IOChange
::ConfigurationChanged) {
reset_panner ();
}
}
reset_panner ();
}
}