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 */
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 */
}
}
}
}
- }
+ }
+
if (!Processor::configure_io (in, out)) {
return false;
}
}
void
-Delivery::run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes, bool result_required)
+Delivery::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, nframes_t nframes, bool result_required)
{
assert (_output);
void
-Delivery::start_pan_touch (uint32_t which)
+Delivery::start_pan_touch (uint32_t which, double when)
{
if (which < _panner->npanners()) {
- _panner->pan_control(which)->start_touch();
+ _panner->pan_control(which)->start_touch(when);
}
}
void
-Delivery::end_pan_touch (uint32_t which)
+Delivery::end_pan_touch (uint32_t which, bool mark, double when)
{
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
-Delivery::flush (nframes_t nframes, nframes64_t time)
+Delivery::flush_buffers (nframes_t nframes, framepos_t time)
{
/* 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
-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
return 0.0;
}
- MuteMaster::MutePoint mp;
+ MuteMaster::MutePoint mp = MuteMaster::Main; // stupid gcc uninit warning
switch (_role) {
case Main:
void
Delivery::output_changed (IOChange change, void* /*src*/)
{
- if (change & ARDOUR::ConfigurationChanged) {
+ if (change.type & IOChange::ConfigurationChanged) {
reset_panner ();
}
}