X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fport.cc;h=70c6a604d76b6ac33aef031cc70854fc61fea5cb;hb=bd5b97e964d23bc51ef737ae239ab9822b254cbb;hp=bc5d26fb805431059246f5f29dd46c820ea125d0;hpb=2b9421fd391efcddde0be3397cb66e19b744a155;p=ardour.git diff --git a/libs/ardour/port.cc b/libs/ardour/port.cc index bc5d26fb80..70c6a604d7 100644 --- a/libs/ardour/port.cc +++ b/libs/ardour/port.cc @@ -21,10 +21,6 @@ #include "libardour-config.h" #endif -#ifndef PLATFORM_WINDOWS -#include // so that we can test for new functions at runtime -#endif - #include "pbd/compose.h" #include "pbd/error.h" #include "pbd/failed_constructor.h" @@ -87,6 +83,26 @@ Port::~Port () drop (); } + +std::string +Port::pretty_name(bool fallback_to_name) const +{ + if (_port_handle) { + std::string value; + std::string type; + if (0 == port_engine.get_port_property (_port_handle, + "http://jackaudio.org/metadata/pretty-name", + value, type)) + { + return value; + } + } + if (fallback_to_name) { + return name (); + } + return ""; +} + void Port::drop () { @@ -101,19 +117,25 @@ Port::drop () bool Port::connected () const { - return (port_engine.connected (_port_handle) != 0); + if (_port_handle) { + return (port_engine.connected (_port_handle) != 0); + } + return false; } int Port::disconnect_all () { - port_engine.disconnect_all (_port_handle); - _connections.clear (); - - /* a cheaper, less hacky way to do boost::shared_from_this() ... - */ - boost::shared_ptr pself = port_manager->get_port_by_name (name()); - PostDisconnect (pself, boost::shared_ptr()); // emit signal + if (_port_handle) { + + port_engine.disconnect_all (_port_handle); + _connections.clear (); + + /* a cheaper, less hacky way to do boost::shared_from_this() ... + */ + boost::shared_ptr pself = port_manager->get_port_by_name (name()); + PostDisconnect (pself, boost::shared_ptr()); // emit signal + } return 0; } @@ -124,6 +146,10 @@ Port::disconnect_all () bool Port::connected_to (std::string const & o) const { + if (!_port_handle) { + return false; + } + if (!port_engine.available()) { return false; } @@ -139,7 +165,12 @@ Port::get_connections (std::vector & c) const return c.size(); } - return port_engine.get_connections (_port_handle, c); + if (_port_handle) { + return port_engine.get_connections (_port_handle, c); + return c.size(); + } + + return 0; } int @@ -225,20 +256,26 @@ Port::disconnect (Port* o) void Port::request_input_monitoring (bool yn) { - port_engine.request_input_monitoring (_port_handle, yn); + if (_port_handle) { + port_engine.request_input_monitoring (_port_handle, yn); + } } void Port::ensure_input_monitoring (bool yn) { - port_engine.ensure_input_monitoring (_port_handle, yn); + if (_port_handle) { + port_engine.ensure_input_monitoring (_port_handle, yn); + } } bool Port::monitoring_input () const { - - return port_engine.monitoring_input (_port_handle); + if (_port_handle) { + return port_engine.monitoring_input (_port_handle); + } + return false; } void @@ -272,7 +309,9 @@ Port::set_public_latency_range (LatencyRange& range, bool playback) const name(), range.min, range.max, (playback ? "PLAYBACK" : "CAPTURE")));; - port_engine.set_latency_range (_port_handle, playback, range); + if (_port_handle) { + port_engine.set_latency_range (_port_handle, playback, range); + } } void @@ -324,12 +363,16 @@ Port::public_latency_range (bool /*playback*/) const { LatencyRange r; - r = port_engine.get_latency_range (_port_handle, sends_output() ? true : false); - DEBUG_TRACE (DEBUG::Latency, string_compose ( - "GET PORT %1: %4 PUBLIC latency range %2 .. %3\n", - name(), r.min, r.max, - sends_output() ? "PLAYBACK" : "CAPTURE")); + if (_port_handle) { + r = port_engine.get_latency_range (_port_handle, sends_output() ? true : false); + + DEBUG_TRACE (DEBUG::Latency, string_compose ( + "GET PORT %1: %4 PUBLIC latency range %2 .. %3\n", + name(), r.min, r.max, + sends_output() ? "PLAYBACK" : "CAPTURE")); + } + return r; } @@ -382,7 +425,7 @@ Port::get_connected_latency_range (LatencyRange& range, bool playback) const boost::shared_ptr remote_port = AudioEngine::instance()->get_port_by_name (*c); if (remote_port) { - lr = remote_port->private_latency_range ((playback ? JackPlaybackLatency : JackCaptureLatency)); + lr = remote_port->private_latency_range ((playback ? true : false)); DEBUG_TRACE (DEBUG::Latency, string_compose ( "\t%1 <-LOCAL-> %2 : latter has latency range %3 .. %4\n", name(), *c, lr.min, lr.max)); @@ -439,7 +482,7 @@ Port::reconnect () int Port::set_name (std::string const & n) { - if (n == _name) { + if (n == _name || !_port_handle) { return 0; } @@ -457,6 +500,10 @@ Port::set_name (std::string const & n) bool Port::physically_connected () const { + if (!_port_handle) { + return false; + } + return port_engine.physically_connected (_port_handle); }