void
Delivery::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, pframes_t nframes, bool result_required)
{
- boost::shared_ptr<Panner> panner;
-
assert (_output);
PortSet& ports (_output->ports());
_output->silence (nframes);
if (result_required) {
+ bufs.set_count (output_buffers().count ());
Amp::apply_simple_gain (bufs, nframes, 0.0);
}
goto out;
Amp::apply_simple_gain (bufs, nframes, tgain);
}
- if (_panshell) {
- panner = _panshell->panner();
- }
-
-#if 0
- if (_session.transport_rolling()) {
- cerr << name() << " first value written : " << scnt << endl;
- for (BufferSet::audio_iterator b = bufs.audio_begin(); b != bufs.audio_end(); ++b) {
- Sample* p = b->data ();
- float s = (float) scnt;
- for (pframes_t n = 0; n < nframes; ++n) {
- p[n] = s * 0.001;
- s += 1.0;
- }
- }
- scnt += nframes;
- }
-#endif
-
- if (panner && !panner->bypassed()) {
+ if (_panshell && !_panshell->bypassed() && _panshell->panner()) {
// Use the panner to distribute audio to output port buffers
_panshell->run (bufs, output_buffers(), start_frame, end_frame, nframes);
+ // MIDI data will not have been delivered by the panner
+
+ if (bufs.count().n_midi() > 0 && ports.count().n_midi () > 0) {
+ _output->copy_to_outputs (bufs, DataType::MIDI, nframes, 0);
+ }
} else {
node.add_property("role", enum_2_string(_role));
if (_panshell) {
- node.add_child_nocopy (_panshell->state (full_state));
+ node.add_child_nocopy (_panshell->get_state ());
}
return node;
// std::cerr << this << ' ' << _name << " NO ROLE INFO\n";
}
- XMLNode* pan_node = node.child (X_("Panner"));
+ XMLNode* pan_node = node.child (X_("PannerShell"));
if (pan_node && _panshell) {
_panshell->set_state (*pan_node, version);
_panshell.reset ();
}
+uint32_t
+Delivery::pan_outs () const
+{
+ if (_output) {
+ return _output->n_ports().n_audio();
+ }
+
+ return _configured_output.n_audio();
+}
+
void
Delivery::reset_panner ()
{
- if (_role == Listen) {
- /* monitor out gets no panner */
- return;
- }
-
if (panners_legal) {
if (!no_panner_reset) {
- uint32_t ntargets;
-
- if (_output) {
- ntargets = _output->n_ports().n_audio();
- } else {
- ntargets = _configured_output.n_audio();
- }
-
if (_panshell) {
- _panshell->configure_io (ChanCount (DataType::AUDIO, pans_required()), ChanCount (DataType::AUDIO, ntargets));
+ _panshell->configure_io (ChanCount (DataType::AUDIO, pans_required()), ChanCount (DataType::AUDIO, pan_outs()));
if (_role == Main) {
_panshell->pannable()->set_panner (_panshell->panner());
int
Delivery::panners_became_legal ()
{
- uint32_t ntargets;
-
- if (_output) {
- ntargets = _output->n_ports().n_audio();
- } else {
- ntargets = _configured_output.n_audio();
- }
-
if (_panshell) {
- _panshell->configure_io (ChanCount (DataType::AUDIO, pans_required()), ChanCount (DataType::AUDIO, ntargets));
+ _panshell->configure_io (ChanCount (DataType::AUDIO, pans_required()), ChanCount (DataType::AUDIO, pan_outs()));
if (_role == Main) {
_panshell->pannable()->set_panner (_panshell->panner());
return ret;
}
+bool ignore_output_change = false;
+
void
Delivery::output_changed (IOChange change, void* /*src*/)
{
return boost::shared_ptr<Panner>();
}
}
+