*/
IO::IO (Session& s, const string& name,
int input_min, int input_max, int output_min, int output_max,
- DataType default_type, bool public_ports)
+ DataType default_type)
: SessionObject(s, name),
AutomatableControls (s),
_output_buffers (new BufferSet()),
_active(true),
_default_type (default_type),
- _public_ports (public_ports),
_input_minimum (ChanCount::ZERO),
_input_maximum (ChanCount::INFINITE),
_output_minimum (ChanCount::ZERO),
_default_type (dt)
{
_meter = new PeakMeter (_session);
- _public_ports = true; // XXX get this from node
_panner = 0;
deferred_state = 0;
no_panner_reset = false;
/* disconnect it from the source */
- if (_session.engine().disconnect (other_port, our_port->name())) {
+ if (our_port->disconnect (other_port)) {
error << string_compose(_("IO: cannot disconnect input port %1 from %2"), our_port->name(), other_port) << endmsg;
return -1;
}
/* connect it to the source */
- if (_session.engine().connect (other_port, our_port->name())) {
+ if (our_port->connect (other_port)) {
return -1;
}
}
/* disconnect it from the destination */
- if (_session.engine().disconnect (our_port->name(), other_port)) {
+ if (our_port->disconnect (other_port)) {
error << string_compose(_("IO: cannot disconnect output port %1 from %2"), our_port->name(), other_port) << endmsg;
return -1;
}
/* connect it to the destination */
- if (_session.engine().connect (our_port->name(), other_port)) {
+ if (our_port->connect (other_port)) {
return -1;
}
}
string portname = build_legal_port_name (type, false);
- if ((our_port = _session.engine().register_output_port (type, portname, _public_ports)) == 0) {
+ if ((our_port = _session.engine().register_output_port (type, portname)) == 0) {
error << string_compose(_("IO: cannot register output port %1"), portname) << endmsg;
return -1;
}
}
if (destination.length()) {
- if (_session.engine().connect (our_port->name(), destination)) {
+ if (our_port->connect (destination)) {
return -1;
}
}
string portname = build_legal_port_name (type, true);
- if ((our_port = _session.engine().register_input_port (type, portname, _public_ports)) == 0) {
+ if ((our_port = _session.engine().register_input_port (type, portname)) == 0) {
error << string_compose(_("IO: cannot register input port %1"), portname) << endmsg;
return -1;
}
if (source.length()) {
- if (_session.engine().connect (source, our_port->name())) {
+ if (our_port->connect (source)) {
return -1;
}
}
Glib::Mutex::Lock lm (io_lock);
for (PortSet::iterator i = _inputs.begin(); i != _inputs.end(); ++i) {
- _session.engine().disconnect (*i);
+ i->disconnect_all ();
}
check_bundles_connected_to_inputs ();
Glib::Mutex::Lock lm (io_lock);
for (PortSet::iterator i = _outputs.begin(); i != _outputs.end(); ++i) {
- _session.engine().disconnect (*i);
+ i->disconnect_all ();
}
check_bundles_connected_to_outputs ();
try {
- if ((input_port = _session.engine().register_input_port (*t, portname, _public_ports)) == 0) {
+ if ((input_port = _session.engine().register_input_port (*t, portname)) == 0) {
error << string_compose(_("IO: cannot register input port %1"), portname) << endmsg;
return -1;
}
if (clear) {
/* disconnect all existing ports so that we get a fresh start */
for (PortSet::iterator i = _inputs.begin(); i != _inputs.end(); ++i) {
- _session.engine().disconnect (*i);
+ i->disconnect_all ();
}
}
string portname = build_legal_port_name (*t, true);
try {
- if ((port = _session.engine().register_input_port (*t, portname, _public_ports)) == 0) {
+ if ((port = _session.engine().register_input_port (*t, portname)) == 0) {
error << string_compose(_("IO: cannot register input port %1"), portname) << endmsg;
return -1;
}
string portname = build_legal_port_name (*t, false);
try {
- if ((port = _session.engine().register_output_port (*t, portname, _public_ports)) == 0) {
+ if ((port = _session.engine().register_output_port (*t, portname)) == 0) {
error << string_compose(_("IO: cannot register output port %1"), portname) << endmsg;
return -1;
}
/* disconnect all existing ports so that we get a fresh start */
for (PortSet::iterator i = _inputs.begin(); i != _inputs.end(); ++i) {
- _session.engine().disconnect (*i);
+ i->disconnect_all ();
}
for (PortSet::iterator i = _outputs.begin(); i != _outputs.end(); ++i) {
- _session.engine().disconnect (*i);
+ i->disconnect_all ();
}
}
string portname = build_legal_port_name (*t, false);
- if ((output_port = _session.engine().register_output_port (*t, portname, _public_ports)) == 0) {
+ if ((output_port = _session.engine().register_output_port (*t, portname)) == 0) {
error << string_compose(_("IO: cannot register output port %1"), portname) << endmsg;
return -1;
}
if (clear) {
/* disconnect all existing ports so that we get a fresh start */
for (PortSet::iterator i = _outputs.begin(); i != _outputs.end(); ++i) {
- _session.engine().disconnect (*i);
+ i->disconnect_all ();
}
}
if ((prop = node.property ("name")) != 0) {
_name = prop->value();
/* used to set panner name with this, but no more */
- }
+ }
if ((prop = node.property ("id")) != 0) {
_id = prop->value ();
}
_bundle_for_inputs->suspend_signals ();
-
+
+ _bundle_for_inputs->set_type (default_type ());
+
_bundle_for_inputs->remove_channels ();
snprintf(buf, sizeof (buf), _("%s in"), _name.c_str());
_bundle_for_outputs->suspend_signals ();
+ _bundle_for_outputs->set_type (default_type ());
+
_bundle_for_outputs->remove_channels ();
snprintf(buf, sizeof (buf), _("%s out"), _name.c_str());
bundles.push_back (i->bundle);
}
- /* Normal bundles */
+ /* Session bundles */
boost::shared_ptr<ARDOUR::BundleList> b = _session.bundles ();
for (ARDOUR::BundleList::iterator i = b->begin(); i != b->end(); ++i) {
- if ((*i)->ports_are_outputs() == false || (*i)->nchannels() != n_inputs().n_total()) {
- continue;
+ if ((*i)->connected_to (_bundle_for_inputs, _session.engine())) {
+ bundles.push_back (*i);
}
+ }
- for (uint32_t j = 0; j < n_inputs().n_total(); ++j) {
-
- Bundle::PortList const& pl = (*i)->channel_ports (j);
- if (!pl.empty() && input(j)->connected_to (pl[0])) {
- bundles.push_back (*i);
- }
-
+ /* Route bundles */
+ boost::shared_ptr<ARDOUR::RouteList> r = _session.get_routes ();
+ for (ARDOUR::RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+ if ((*i)->bundle_for_outputs()->connected_to (_bundle_for_inputs, _session.engine())) {
+ bundles.push_back ((*i)->bundle_for_outputs());
}
}
-
+
return bundles;
}
bundles.push_back (i->bundle);
}
- /* Auto bundles */
+ /* Session bundles */
boost::shared_ptr<ARDOUR::BundleList> b = _session.bundles ();
for (ARDOUR::BundleList::iterator i = b->begin(); i != b->end(); ++i) {
- if ((*i)->ports_are_inputs() == false || (*i)->nchannels() != n_outputs().n_total()) {
- continue;
+ if ((*i)->connected_to (_bundle_for_outputs, _session.engine())) {
+ bundles.push_back (*i);
}
+ }
- for (uint32_t j = 0; j < n_outputs().n_total(); ++j) {
-
- Bundle::PortList const& pl = (*i)->channel_ports (j);
-
- if (!pl.empty() && output(j)->connected_to (pl[0])) {
- bundles.push_back (*i);
- }
+ /* Route bundles */
+ boost::shared_ptr<ARDOUR::RouteList> r = _session.get_routes ();
+ for (ARDOUR::RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+ if ((*i)->bundle_for_inputs()->connected_to (_bundle_for_outputs, _session.engine())) {
+ bundles.push_back ((*i)->bundle_for_inputs());
}
}