Simplify connecting JACK ports

This commit is contained in:
Chris Robinson 2021-07-25 00:10:15 -07:00
parent 02a985e70a
commit d766c59d4d

View File

@ -573,27 +573,25 @@ void JackPlayback::start()
const char *devname{mDevice->DeviceName.c_str()}; const char *devname{mDevice->DeviceName.c_str()};
if(ConfigValueBool(devname, "jack", "connect-ports").value_or(true)) if(ConfigValueBool(devname, "jack", "connect-ports").value_or(true))
{ {
JackPortsPtr ports{jack_get_ports(mClient, mPortPattern.c_str(), JackDefaultAudioType, JackPortsPtr pnames{jack_get_ports(mClient, mPortPattern.c_str(), JackDefaultAudioType,
JackPortIsInput)}; JackPortIsInput)};
if(!ports) if(!pnames)
{ {
jack_deactivate(mClient); jack_deactivate(mClient);
throw al::backend_exception{al::backend_error::DeviceError, "No playback ports found"}; throw al::backend_exception{al::backend_error::DeviceError, "No playback ports found"};
} }
auto connect_port = [this](const jack_port_t *port, const char *pname) -> bool
for(size_t i{0};i < al::size(mPort) && mPort[i];++i)
{ {
if(!port) return false; if(!pnames[i])
if(!pname)
{ {
ERR("No physical playback port for \"%s\"\n", jack_port_name(port)); ERR("No physical playback port for \"%s\"\n", jack_port_name(mPort[i]));
return false; break;
} }
if(jack_connect(mClient, jack_port_name(port), pname)) if(jack_connect(mClient, jack_port_name(mPort[i]), pnames[i]))
ERR("Failed to connect output port \"%s\" to \"%s\"\n", jack_port_name(port), ERR("Failed to connect output port \"%s\" to \"%s\"\n", jack_port_name(mPort[i]),
pname); pnames[i]);
return true; }
};
std::mismatch(mPort.begin(), mPort.end(), ports.get(), connect_port);
} }
/* Reconfigure buffer metrics in case the server changed it since the reset /* Reconfigure buffer metrics in case the server changed it since the reset