properly calculate requrired thread buffers
[ardour.git] / libs / ardour / io_processor.cc
index fd47e1c06c188dd5b15e2b0b833edaa49bd383af..6a6f09bbe21b5787f11d9a3ef215d0b0d394a330 100644 (file)
@@ -43,7 +43,7 @@ namespace ARDOUR { class Session; }
 /* create an IOProcessor that proxies to a new IO object */
 
 IOProcessor::IOProcessor (Session& s, bool with_input, bool with_output,
-                         const string& proc_name, const string io_name, DataType dtype)
+                         const string& proc_name, const string io_name, DataType dtype, bool sendish)
        : Processor(s, proc_name)
 {
        /* these are true in this constructor whether we actually create the associated
@@ -54,11 +54,11 @@ IOProcessor::IOProcessor (Session& s, bool with_input, bool with_output,
        _own_output = true;
 
        if (with_input) {
-               _input.reset (new IO(s, io_name.empty() ? proc_name : io_name, IO::Input, dtype));
+               _input.reset (new IO(s, io_name.empty() ? proc_name : io_name, IO::Input, dtype, sendish));
        }
 
        if (with_output) {
-               _output.reset (new IO(s, io_name.empty() ? proc_name : io_name, IO::Output, dtype));
+               _output.reset (new IO(s, io_name.empty() ? proc_name : io_name, IO::Output, dtype, sendish));
        }
 }
 
@@ -167,8 +167,8 @@ IOProcessor::set_state (const XMLNode& node, int version)
        XMLNodeIterator niter;
        const string instr = enum_2_string (IO::Input);
        const string outstr = enum_2_string (IO::Output);
-       
-       if (_own_input) {
+
+       if (_own_input && _input) {
                for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
                        const XMLProperty* prop;
                        if ((prop = (*niter)->property ("name")) != 0) {
@@ -182,22 +182,22 @@ IOProcessor::set_state (const XMLNode& node, int version)
                                }
                        }
                }
-               
+
                if (io_node) {
                        _input->set_state(*io_node, version);
-                       
+
                        // legacy sessions: use IO name
                        if ((prop = node.property ("name")) == 0) {
                                set_name (_input->name());
                        }
-                       
+
                } else {
                        /* no input, which is OK */
                }
-               
+
        }
-       
-       if (_own_output) {
+
+       if (_own_output && _output) {
                for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
                        if ((*niter)->name() == "IO") {
                                const XMLProperty* prop;
@@ -213,10 +213,10 @@ IOProcessor::set_state (const XMLNode& node, int version)
                                }
                        }
                }
-               
+
                if (io_node) {
                        _output->set_state(*io_node, version);
-                       
+
                        // legacy sessions: use IO name
                        if ((prop = node.property ("name")) == 0) {
                                set_name (_output->name());