*/
+#include "pbd/convert.h"
#include "pbd/error.h"
#include "ardour/async_midi_port.h"
#include "ardour/midi_port.h"
#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);
}
-
+
void
PortManager::get_physical_inputs (DataType type, std::vector<std::string>& s)
{
if (!_backend) {
+ s.clear ();
return;
}
_backend->get_physical_inputs (type, s);
}
-
+
ChanCount
PortManager::n_physical_outputs () const
{
return _backend->n_physical_outputs ();
}
-
+
ChanCount
PortManager::n_physical_inputs () const
{
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);
int
PortManager::get_ports (const string& port_name_pattern, DataType type, PortFlags flags, vector<string>& s)
{
+ s.clear();
+
if (!_backend) {
return 0;
}
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)
{
{
boost::shared_ptr<Ports> p = ports.reader ();
- /* re-establish connections */
+ if (!Profile->get_trx()) {
+ /* re-establish connections */
- DEBUG_TRACE (DEBUG::Ports, string_compose ("reconnect %1 ports\n", p->size()));
+ 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 ();
+ for (Ports::iterator i = p->begin(); i != p->end(); ++i) {
+ i->second->reconnect ();
+ }
}
return 0;
port_b, b,
conn
); /* EMIT SIGNAL */
-}
+}
void
PortManager::registration_callback ()
return _backend->can_monitor_input ();
}
-
+
void
PortManager::request_input_monitoring (const string& name, bool yn) const
{
_backend->request_input_monitoring (ph, yn);
}
}
-
+
void
PortManager::ensure_input_monitoring (const string& name, bool yn) const
{
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;