Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-#include <fstream>
#include <algorithm>
#include <cmath>
#include <vector>
#include "ardour/debug.h"
#include "ardour/io.h"
#include "ardour/port.h"
+#include "ardour/profile.h"
#include "ardour/route.h"
#include "ardour/session.h"
#include "ardour/user_bundle.h"
* ::disconnect()
*/
if (_ports.contains (a) || _ports.contains (b)) {
- changed (IOChange (IOChange::ConnectionsChanged), this); /* EMIT SIGNAL */
+ changed (IOChange (IOChange::ConnectionsChanged), this); /* EMIT SIGNAL */
}
} else {
/* we didn't get the lock, so assume that we're inside
}
_session.set_dirty ();
-
+
return 0;
}
ChanCount before = _ports.count ();
ChanCount after = before;
after.set (type, after.get (type) + 1);
-
+
bool const r = PortCountChanging (after); /* EMIT SIGNAL */
if (r) {
return -1;
}
-
+
IOChange change;
{
/* Create a new port */
string portname = build_legal_port_name (type);
-
+
if (_direction == Input) {
if ((our_port = _session.engine().register_input_port (type, portname)) == 0) {
error << string_compose(_("IO: cannot register input port %1"), portname) << endmsg;
change.before = _ports.count ();
_ports.add (our_port);
}
-
+
PortCountChanged (n_ports()); /* EMIT SIGNAL */
change.type = IOChange::ConfigurationChanged;
change.after = _ports.count ();
XMLNode* node = new XMLNode (state_node_name);
char buf[64];
string str;
- vector<string>::iterator ci;
int n;
- LocaleGuard lg (X_("POSIX"));
+ LocaleGuard lg (X_("C"));
Glib::Threads::Mutex::Lock lm (io_lock);
node->add_property("name", _name);
pnode->add_property (X_("name"), i->name());
if (i->get_connections (connections)) {
+ vector<string>::const_iterator ci;
+ std::sort (connections.begin(), connections.end());
for (n = 0, ci = connections.begin(); ci != connections.end(); ++ci, ++n) {
snprintf (buf, sizeof (buf), "%" PRId64, _user_latency);
node->add_property (X_("user-latency"), buf);
-
+
return *node;
}
const XMLProperty* prop;
XMLNodeConstIterator iter;
- LocaleGuard lg (X_("POSIX"));
+ LocaleGuard lg (X_("C"));
/* force use of non-localized representation of decimal point,
since we use it a lot in XML files and so forth.
{
const XMLProperty* prop;
XMLNodeConstIterator iter;
- LocaleGuard lg (X_("POSIX"));
+ LocaleGuard lg (X_("C"));
/* force use of non-localized representation of decimal point,
since we use it a lot in XML files and so forth.
int
IO::connecting_became_legal ()
{
- int ret;
+ int ret = 0;
assert (pending_state_node);
connection_legal_c.disconnect ();
- ret = make_connections (*pending_state_node, pending_state_node_version, pending_state_node_in);
+ // it's not required for TracksLive, as long as TracksLive's session does all the connections when it's being loaded
+ if (!Profile->get_trx() ) {
+ ret = make_connections (*pending_state_node, pending_state_node_version, pending_state_node_in);
+ }
delete pending_state_node;
pending_state_node = 0;
for (iter = node.children().begin(); iter != node.children().end(); ++iter) {
if ((*iter)->name() == X_("Bundle")) {
+ prop = (*iter)->property ("name");
if ((c = find_possible_bundle (prop->value())) != 0) {
n = ChanCount::max (n, c->nchannels());
return 0;
for (XMLNodeIterator i = children.begin(); i != children.end(); ++i) {
if ((*i)->name() == "Port") {
-
+
prop = (*i)->property (X_("name"));
-
+
if (prop) {
string new_name;
string old = prop->value();
if (slash != string::npos) {
/* port name is of form: <IO-name>/<port-name> */
-
+
new_name = name;
new_name += old.substr (old.find ('/'));
-
+
prop->set_value (new_name);
}
}
if (p != string::npos) {
ports[x].replace (p, 4, "/audio_out");
}
- nth(i)->connect (ports[x]);
+ if (NULL != nth(i).get())
+ nth(i)->connect (ports[x]);
}
}
if (p != string::npos) {
ports[x].replace (p, 3, "/audio_in");
}
- nth(i)->connect (ports[x]);
+ if (NULL != nth(i).get())
+ nth(i)->connect (ports[x]);
}
}
IO::set_ports (const string& str)
{
vector<string> ports;
- int i;
int n;
uint32_t nports;
}
}
- string::size_type start, end, ostart;
-
- ostart = 0;
- start = 0;
- end = 0;
- i = 0;
-
- while ((start = str.find_first_of ('{', ostart)) != string::npos) {
+ string::size_type start = 0;
+ string::size_type end = 0;
+ string::size_type ostart = 0;
+ for (int i = 0; (start = str.find_first_of ('{', ostart)) != string::npos; ++i) {
start += 1;
if ((end = str.find_first_of ('}', start)) == string::npos) {
}
ostart = end+1;
- i++;
}
return 0;
return 0;
}
- pos = 0;
opos = 0;
ports.clear ();
{
string::size_type pos, opos;
- pos = 0;
opos = 0;
ports.clear ();
std::vector<char> buf (AudioEngine::instance()->port_name_size());
PortSet::iterator i = _ports.begin();
- snprintf (&buf[0], jack_port_name_size(), _("%s %u"), base, n);
+ snprintf (&buf[0], buf.size()+1, _("%s %u"), base, n);
for ( ; i != _ports.end(); ++i) {
if (string(i->name()) == string(&buf[0])) {
for (i = 0; i < no; ++i) {
for (j = 0; j < ni; ++j) {
- if (nth(i)->connected_to (other->nth(j)->name())) {
- return true;
+ if ((NULL != nth(i).get()) && (NULL != other->nth(j).get())) {
+ if (nth(i)->connected_to (other->nth(j)->name())) {
+ return true;
+ }
}
}
}