+ 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
+{
+ return _output ? _output->n_ports() : ChanCount::ZERO;
+}
+
+ChanCount
+IOProcessor::natural_input_streams () const
+{
+ return _input ? _input->n_ports() : ChanCount::ZERO;
+}
+
+bool
+IOProcessor::set_name (const std::string& name)
+{
+ bool ret = SessionObject::set_name (name);
+
+ if (ret && _own_input && _input) {
+ ret = _input->set_name (name);
+ }
+
+ if (ret && _own_output && _output) {
+ ret = _output->set_name (name);
+ }
+
+ return ret;
+}
+
+bool
+IOProcessor::feeds (boost::shared_ptr<Route> other) const
+{
+ return _output && _output->connected_to (other->input());
+}
+
+void
+IOProcessor::disconnect ()
+{
+ if (_input) {
+ _input->disconnect (this);
+ }
+
+ if (_output) {
+ _output->disconnect (this);
+ }
+}
+
+/** Set up the XML description of a send so that we will not
+ * reset its name or bitslot during ::set_state()
+ * @param state XML send state.
+ * @param session Session.
+ */
+void
+IOProcessor::prepare_for_reset (XMLNode &state, const std::string& name)
+{
+ state.add_property ("ignore-bitslot", "1");
+ state.add_property ("ignore-name", "1");
+
+ XMLNode* io_node = state.child (IO::state_node_name.c_str());
+
+ if (io_node) {
+ IO::prepare_for_reset (*io_node, name);
+ }