Add Lua bindings to query all stripables
[ardour.git] / libs / ardour / internal_send.cc
index 241506bdead180f7caa351746d9d5aca82a47d35..3c01e1acc2a76c4e018f4a33edcb5bd7faf5e4bd 100644 (file)
@@ -19,6 +19,7 @@
 
 #include "pbd/error.h"
 #include "pbd/failed_constructor.h"
+#include "pbd/types_convert.h"
 
 #include "ardour/amp.h"
 #include "ardour/audio_buffer.h"
@@ -195,7 +196,8 @@ InternalSend::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame
                        */
 
                        uint32_t j = 0;
-                       for (uint32_t i = 0; i < mixbufs_audio; ++i) {
+                       uint32_t i = 0;
+                       for (i = 0; i < mixbufs_audio && j < bufs_audio; ++i) {
                                mixbufs.get_audio(i).read_from (bufs.get_audio(j), nframes);
                                ++j;
 
@@ -203,6 +205,10 @@ InternalSend::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame
                                        j = 0;
                                }
                        }
+                       /* in case or MIDI track with 0 audio channels */
+                       for (; i < mixbufs_audio; ++i) {
+                               mixbufs.get_audio(i).silence (nframes);
+                       }
 
                } else {
                        assert (mixbufs.available() >= bufs.count());
@@ -290,12 +296,12 @@ InternalSend::state (bool full)
 
        /* this replaces any existing "type" property */
 
-       node.add_property ("type", "intsend");
+       node.set_property ("type", "intsend");
 
        if (_send_to) {
-               node.add_property ("target", _send_to->id().to_s());
+               node.set_property ("target", _send_to->id());
        }
-       node.add_property ("allow-feedback", _allow_feedback);
+       node.set_property ("allow-feedback", _allow_feedback);
 
        return node;
 }
@@ -309,15 +315,11 @@ InternalSend::get_state()
 int
 InternalSend::set_state (const XMLNode& node, int version)
 {
-       XMLProperty const * prop;
-
        init_gain ();
 
        Send::set_state (node, version);
 
-       if ((prop = node.property ("target")) != 0) {
-
-               _send_to_id = prop->value();
+       if (node.get_property ("target", _send_to_id)) {
 
                /* if we're loading a session, the target route may not have been
                   create yet. make sure we defer till we are sure that it should
@@ -331,9 +333,7 @@ InternalSend::set_state (const XMLNode& node, int version)
                }
        }
 
-       if ((prop = node.property (X_("allow-feedback"))) != 0) {
-               _allow_feedback = string_is_affirmative (prop->value());
-       }
+       node.get_property (X_("allow-feedback"), _allow_feedback);
 
        return 0;
 }