13
0

Add & implement PortEngine::externally_connected() API

This commit is contained in:
Robin Gareus 2017-10-30 19:41:42 +01:00
parent 16b4535281
commit 94e2bce740
3 changed files with 43 additions and 0 deletions

View File

@ -228,6 +228,14 @@ class LIBARDOUR_API PortEngine {
*/
virtual bool physically_connected (PortHandle port, bool process_callback_safe = true) = 0;
/** Return true if the port referred to by @param port has any connections
* to external, not-ardour owned, ports.
*/
virtual bool externally_connected (PortHandle port, bool process_callback_safe = true) {
/* only with JACK, provides client ports that are not physical */
return physically_connected (port, process_callback_safe);
}
/** Place the names of all ports connected to the port named by @param
* ports into @param names, and return the number of connections.
*/

View File

@ -145,6 +145,7 @@ class JACKAudioBackend : public AudioBackend {
bool connected (PortHandle, bool process_callback_safe);
bool connected_to (PortHandle, const std::string&, bool process_callback_safe);
bool physically_connected (PortHandle, bool process_callback_safe);
bool externally_connected (PortHandle, bool process_callback_safe);
int get_connections (PortHandle, std::vector<std::string>&, bool process_callback_safe);
int connect (PortHandle, const std::string&);

View File

@ -275,6 +275,7 @@ JACKAudioBackend::physically_connected (PortHandle p, bool process_callback_safe
jack_port_t* other = jack_port_by_name (_priv_jack, ports[i]);
if (other && (jack_port_flags (other) & JackPortIsPhysical)) {
jack_free (ports);
return true;
}
}
@ -284,6 +285,39 @@ JACKAudioBackend::physically_connected (PortHandle p, bool process_callback_safe
return false;
}
bool
JACKAudioBackend::externally_connected (PortHandle p, bool process_callback_safe)
{
GET_PRIVATE_JACK_POINTER_RET (_priv_jack, false);
jack_port_t* port = (jack_port_t*) p;
const char** ports;
if (process_callback_safe) {
ports = jack_port_get_connections ((jack_port_t*)port);
} else {
GET_PRIVATE_JACK_POINTER_RET (_priv_jack, false);
ports = jack_port_get_all_connections (_priv_jack, (jack_port_t*)port);
}
if (ports) {
for (int i = 0; ports[i]; ++i) {
jack_port_t* other = jack_port_by_name (_priv_jack, ports[i]);
if (other && (jack_port_flags (other) & JackPortIsPhysical)) {
jack_free (ports);
return true;
}
if (other && !jack_port_is_mine (_priv_jack, other)) {
jack_free (ports);
return true;
}
}
jack_free (ports);
}
return false;
}
int
JACKAudioBackend::get_connections (PortHandle port, vector<string>& s, bool process_callback_safe)
{