Properly announce support for Vendor string
[ardour.git] / libs / ardour / io_processor.cc
index 6a6f09bbe21b5787f11d9a3ef215d0b0d394a330..e87b5a59127c2b3651a966269f516ebf971c230a 100644 (file)
@@ -32,7 +32,7 @@
 #include "ardour/session_object.h"
 #include "ardour/types.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace std;
 using namespace ARDOUR;
@@ -106,34 +106,30 @@ IOProcessor::set_output (boost::shared_ptr<IO> io)
 }
 
 XMLNode&
-IOProcessor::state (bool full_state)
+IOProcessor::state ()
 {
-       XMLNode& node (Processor::state (full_state));
+       XMLNode& node (Processor::state ());
 
-       if (_own_input) {
-               node.add_property ("own-input", "yes");
-               if (_input) {
-                       XMLNode& i (_input->state (full_state));
+       node.set_property ("own-input", _own_input);
+
+       if (_input) {
+               if (_own_input) {
+                       XMLNode& i (_input->get_state ());
                        // i.name() = X_("output");
                        node.add_child_nocopy (i);
-               }
-       } else {
-               node.add_property ("own-input", "no");
-               if (_input) {
-                       node.add_property ("input", _input->name());
+               } else {
+                       node.set_property ("input", _input->name ());
                }
        }
 
-       if (_own_output) {
-               node.add_property ("own-output", "yes");
-               if (_output) {
-                       XMLNode& o (_output->state (full_state));
+       node.set_property ("own-output", _own_output);
+
+       if (_output) {
+               if (_own_output) {
+                       XMLNode& o (_output->get_state ());
                        node.add_child_nocopy (o);
-               }
-       } else {
-               node.add_property ("own-output", "no");
-               if (_output) {
-                       node.add_property ("output", _output->name());
+               } else {
+                       node.set_property ("output", _output->name ());
                }
        }
 
@@ -147,19 +143,15 @@ IOProcessor::set_state (const XMLNode& node, int version)
                return set_state_2X (node, version);
        }
 
-       const XMLProperty *prop;
+       XMLProperty const * prop;
        const XMLNode *io_node = 0;
 
        Processor::set_state(node, version);
 
+       bool ignore_name = node.property ("ignore-name");
 
-       if ((prop = node.property ("own-input")) != 0) {
-               _own_input = string_is_affirmative (prop->value());
-       }
-
-       if ((prop = node.property ("own-output")) != 0) {
-               _own_output = string_is_affirmative (prop->value());
-       }
+       node.get_property ("own-input", _own_input);
+       node.get_property ("own-output", _own_output);
 
        /* don't attempt to set state for a proxied IO that we don't own */
 
@@ -168,17 +160,13 @@ IOProcessor::set_state (const XMLNode& node, int version)
        const string instr = enum_2_string (IO::Input);
        const string outstr = enum_2_string (IO::Output);
 
+       std::string str;
        if (_own_input && _input) {
                for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
-                       const XMLProperty* prop;
-                       if ((prop = (*niter)->property ("name")) != 0) {
-                               if (_name == prop->value()) {
-                                       if ((prop = (*niter)->property ("direction")) != 0) {
-                                               if (prop->value() == instr) {
-                                                       io_node = (*niter);
-                                                       break;
-                                               }
-                                       }
+                       if ((*niter)->get_property ("name", str) && (_name == str || ignore_name)) {
+                               if ((*niter)->get_property ("direction", str) && str == instr) {
+                                       io_node = (*niter);
+                                       break;
                                }
                        }
                }
@@ -200,15 +188,10 @@ IOProcessor::set_state (const XMLNode& node, int version)
        if (_own_output && _output) {
                for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
                        if ((*niter)->name() == "IO") {
-                               const XMLProperty* prop;
-                               if ((prop = (*niter)->property ("name")) != 0) {
-                                       if (_name == prop->value()) {
-                                               if ((prop = (*niter)->property ("direction")) != 0) {
-                                                       if (prop->value() == outstr) {
-                                                               io_node = (*niter);
-                                                               break;
-                                                       }
-                                               }
+                               if ((*niter)->get_property ("name", str) && (_name == str || ignore_name)) {
+                                       if ((*niter)->get_property ("direction", str) && str == outstr) {
+                                               io_node = (*niter);
+                                               break;
                                        }
                                }
                        }
@@ -240,21 +223,13 @@ IOProcessor::set_state_2X (const XMLNode& node, int version)
 }
 
 void
-IOProcessor::silence (framecnt_t nframes)
+IOProcessor::silence (samplecnt_t nframes, samplepos_t /* start_sample */)
 {
        if (_own_output && _output) {
                _output->silence (nframes);
        }
 }
 
-void
-IOProcessor::increment_port_buffer_offset (pframes_t offset)
-{
-        if (_own_output && _output) {
-                _output->increment_port_buffer_offset (offset);
-        }
-}
-
 ChanCount
 IOProcessor::natural_output_streams() const
 {
@@ -309,12 +284,15 @@ IOProcessor::disconnect ()
 void
 IOProcessor::prepare_for_reset (XMLNode &state, const std::string& name)
 {
-       state.add_property ("ignore-bitslot", "1");
-       state.add_property ("ignore-name", "1");
+       state.set_property ("ignore-bitslot", true);
+       state.set_property ("ignore-name", true);
 
-       XMLNode* io_node = state.child (IO::state_node_name.c_str());
+       XMLNodeList nlist = state.children();
+       XMLNodeIterator niter;
 
-       if (io_node) {
-               IO::prepare_for_reset (*io_node, name);
+       for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
+               if ((*niter)->name() == IO::state_node_name.c_str()) {
+                       IO::prepare_for_reset (**niter, name);
+               }
        }
 }