#include "ardour/midiport_manager.h"
#include "ardour/port_manager.h"
#include "ardour/profile.h"
+#include "ardour/session.h"
#include "i18n.h"
return portname;
}
- string::size_type len;
- string::size_type n;
- string self = _backend->my_name();
-
- len = portname.length();
+ string::size_type colon = portname.find (':');
- for (n = 0; n < len; ++n) {
- if (portname[n] == ':') {
- break;
- }
+ if (colon == string::npos) {
+ return portname;
}
- if ((n != len) && (portname.substr (0, n) == self)) {
- return portname.substr (n+1);
+ if (portname.substr (0, colon) == _backend->my_name()) {
+ return portname.substr (colon+1);
}
return portname;
PortManager::get_physical_outputs (DataType type, std::vector<std::string>& s)
{
if (!_backend) {
+ s.clear ();
return;
}
_backend->get_physical_outputs (type, s);
PortManager::get_physical_inputs (DataType type, std::vector<std::string>& s)
{
if (!_backend) {
+ s.clear ();
return;
}
return _backend->n_physical_inputs ();
}
-bool
-PortManager::port_name_prefix_is_unique (const string& first_part_of_port_name) const
-{
- if (!_backend) {
- return boost::shared_ptr<Port>();
- }
-
- boost::shared_ptr<const Ports> pr = ports.reader();
- const string::size_type len = first_part_of_port_name.length();
-
- for (Ports::const_iterator x = pr->begin(); x != pr->end(); ++x) {
-
- string prefix = x->first.substr (0, len);
-
- if (strings_equal_ignore_case (prefix, first_part_of_port_name)) {
- return false;
- }
- }
-
- return true;
-}
-
/** @param name Full or short name of port
* @return Corresponding Port or 0.
*/
RCUWriter<Ports> writer (ports);
boost::shared_ptr<Ports> p = writer.get_copy();
Ports::iterator x = p->find (old_relative_name);
-
+
if (x != p->end()) {
boost::shared_ptr<Port> port = x->second;
p->erase (x);
return _backend->connected (handle);
}
+bool
+PortManager::physically_connected (const string& port_name)
+{
+ if (!_backend) {
+ return false;
+ }
+
+ PortEngine::PortHandle handle = _backend->get_port_by_name (port_name);
+
+ if (!handle) {
+ return false;
+ }
+
+ return _backend->physically_connected (handle);
+}
+
+int
+PortManager::get_connections (const string& port_name, std::vector<std::string>& s)
+{
+ if (!_backend) {
+ s.clear ();
+ return 0;
+ }
+
+ PortEngine::PortHandle handle = _backend->get_port_by_name (port_name);
+
+ if (!handle) {
+ s.clear ();
+ return 0;
+ }
+
+ return _backend->get_connections (handle, s);
+}
+
int
PortManager::connect (const string& source, const string& destination)
{
if (!Profile->get_trx()) {
/* re-establish connections */
-
+
DEBUG_TRACE (DEBUG::Ports, string_compose ("reconnect %1 ports\n", p->size()));
-
+
for (Ports::iterator i = p->begin(); i != p->end(); ++i) {
i->second->reconnect ();
}
port_b, b,
conn
); /* EMIT SIGNAL */
-}
+}
void
PortManager::registration_callback ()
if (!_backend) {
return 0;
}
-
+
return _backend->port_name_size ();
}
if (!_backend) {
return string();
}
-
+
return _backend->my_name();
}
}
void
-PortManager::silence (pframes_t nframes)
+PortManager::silence (pframes_t nframes, Session *s)
{
for (Ports::iterator i = _cycle_ports->begin(); i != _cycle_ports->end(); ++i) {
+ if (s && i->second == s->mtc_output_port ()) {
+ continue;
+ }
+ if (s && i->second == s->midi_clock_output_port ()) {
+ continue;
+ }
+ if (s && i->second == s->ltc_output_port ()) {
+ continue;
+ }
if (i->second->sends_output()) {
i->second->get_buffer(nframes).silence(nframes);
}
PortManager::check_monitoring ()
{
for (Ports::iterator i = _cycle_ports->begin(); i != _cycle_ports->end(); ++i) {
-
+
bool x;
-
+
if (i->second->last_monitor() != (x = i->second->monitoring_input ())) {
i->second->set_last_monitor (x);
/* XXX I think this is dangerous, due to
PortManager::fade_out (gain_t base_gain, gain_t gain_step, pframes_t nframes)
{
for (Ports::iterator i = _cycle_ports->begin(); i != _cycle_ports->end(); ++i) {
-
+
if (i->second->sends_output()) {
-
+
boost::shared_ptr<AudioPort> ap = boost::dynamic_pointer_cast<AudioPort> (i->second);
if (ap) {
Sample* s = ap->engine_get_whole_audio_buffer ();
gain_t g = base_gain;
-
+
for (pframes_t n = 0; n < nframes; ++n) {
*s++ *= g;
g -= gain_step;