Remove wrong asserts
[ardour.git] / libs / ardour / delivery.cc
index 1b8a8c5948a3f63db6d74327c15067aa777e6b1c..e051ce6fb14a88fb92567026ad91ea3bbc768e53 100644 (file)
@@ -34,7 +34,7 @@
 #include "ardour/port.h"
 #include "ardour/session.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 namespace ARDOUR { class Panner; }
 
@@ -97,11 +97,11 @@ Delivery::Delivery (Session& s, boost::shared_ptr<Pannable> pannable, boost::sha
 
 Delivery::~Delivery()
 {
-       DEBUG_TRACE (DEBUG::Destruction, string_compose ("delivery %1 destructor\n", _name));   
+       DEBUG_TRACE (DEBUG::Destruction, string_compose ("delivery %1 destructor\n", _name));
 
        /* this object should vanish from any signal callback lists
           that it is on before we get any further. The full qualification
-          of the method name is not necessary, but is here to make it 
+          of the method name is not necessary, but is here to make it
           clear that this call is about signals, not data flow connections.
        */
 
@@ -229,14 +229,14 @@ Delivery::configure_io (ChanCount in, ChanCount out)
 }
 
 void
-Delivery::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, pframes_t nframes, bool result_required)
+Delivery::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, double /*speed*/, pframes_t nframes, bool result_required)
 {
        assert (_output);
 
        PortSet& ports (_output->ports());
        gain_t tgain;
 
-       if (_output->n_ports ().get (_output->default_type()) == 0) {
+       if (ports.num_ports () == 0) {
                goto out;
        }
 
@@ -246,8 +246,8 @@ Delivery::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, pf
        }
 
        /* this setup is not just for our purposes, but for anything that comes after us in the
-          processing pathway that wants to use this->output_buffers() for some reason.
-       */
+        * processing pathway that wants to use this->output_buffers() for some reason.
+        */
 
        // TODO delayline -- latency-compensation
        output_buffers().get_backend_port_addresses (ports, nframes);
@@ -267,8 +267,8 @@ Delivery::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, pf
        } else if (tgain < GAIN_COEFF_SMALL) {
 
                /* we were quiet last time, and we're still supposed to be quiet.
-                  Silence the outputs, and make sure the buffers are quiet too,
-               */
+                        Silence the outputs, and make sure the buffers are quiet too,
+                        */
 
                _output->silence (nframes);
                if (result_required) {
@@ -283,7 +283,7 @@ Delivery::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, pf
                Amp::apply_simple_gain (bufs, nframes, tgain);
        }
 
-        // Speed quietning
+       // Speed quietning
 
        if (fabs (_session.transport_speed()) > 1.5 && Config->get_quieten_at_speed ()) {
                Amp::apply_simple_gain (bufs, nframes, speed_quietning, false);
@@ -297,30 +297,36 @@ Delivery::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, pf
 
                _panshell->run (bufs, output_buffers(), start_frame, end_frame, nframes);
 
-               // MIDI data will not have been delivered by the panner
+               // non-audio 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);
+               for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) {
+                       if (*t != DataType::AUDIO && bufs.count().get(*t) > 0) {
+                               _output->copy_to_outputs (bufs, *t, nframes, ports.port(0)->port_offset());
+                       }
                }
 
        } else {
 
                // Do a 1:1 copy of data to output ports
 
-               if (bufs.count().n_audio() > 0 && ports.count().n_audio () > 0) {
+               // audio is handled separately because we use 0 for the offset
+               // XXX how does this interact with Port::increment_global_port_buffer_offset ?
+               if (bufs.count().n_audio() > 0) {
                        _output->copy_to_outputs (bufs, DataType::AUDIO, nframes, 0);
-                }
+               }
 
-               if (bufs.count().n_midi() > 0 && ports.count().n_midi () > 0) {
-                       _output->copy_to_outputs (bufs, DataType::MIDI, nframes, 0);
+               for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) {
+                       if (*t != DataType::AUDIO && bufs.count().get(*t) > 0) {
+                               _output->copy_to_outputs (bufs, *t, nframes, ports.port(0)->port_offset());
+                       }
                }
        }
 
-        if (result_required) {
-                bufs.read_from (output_buffers (), nframes);
-        }
+       if (result_required) {
+               bufs.read_from (output_buffers (), nframes);
+       }
 
-  out:
+out:
        _active = _pending_active;
 }
 
@@ -352,7 +358,7 @@ Delivery::state (bool full_state)
 int
 Delivery::set_state (const XMLNode& node, int version)
 {
-       const XMLProperty* prop;
+       XMLProperty const * prop;
 
        if (IOProcessor::set_state (node, version)) {
                return -1;
@@ -394,7 +400,7 @@ Delivery::pan_outs () const
 {
        if (_output) {
                return _output->n_ports().n_audio();
-       } 
+       }
 
        return _configured_output.n_audio();
 }
@@ -462,7 +468,7 @@ Delivery::flush_buffers (framecnt_t nframes)
        if (!_output) {
                return;
        }
-       
+
        PortSet& ports (_output->ports());
 
        for (PortSet::iterator i = ports.begin(); i != ports.end(); ++i) {