aboutsummaryrefslogtreecommitdiffstats
path: root/alc/backends/jack.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'alc/backends/jack.cpp')
-rw-r--r--alc/backends/jack.cpp25
1 files changed, 14 insertions, 11 deletions
diff --git a/alc/backends/jack.cpp b/alc/backends/jack.cpp
index 78ba6404..6f53b54c 100644
--- a/alc/backends/jack.cpp
+++ b/alc/backends/jack.cpp
@@ -384,15 +384,17 @@ void JackPlayback::start()
if(jack_activate(mClient))
throw al::backend_exception{ALC_INVALID_DEVICE, "Failed to activate client"};
- const char **ports{jack_get_ports(mClient, nullptr, nullptr,
- JackPortIsPhysical|JackPortIsInput)};
- if(ports == nullptr)
+ const char *devname{mDevice->DeviceName.c_str()};
+ if(ConfigValueBool(devname, "jack", "connect-ports").value_or(true))
{
- jack_deactivate(mClient);
- throw al::backend_exception{ALC_INVALID_DEVICE, "No physical playback ports found"};
- }
- std::mismatch(mPort.begin(), mPort.end(), ports,
- [this](const jack_port_t *port, const char *pname) -> bool
+ const char **ports{jack_get_ports(mClient, nullptr, nullptr,
+ JackPortIsPhysical|JackPortIsInput)};
+ if(ports == nullptr)
+ {
+ jack_deactivate(mClient);
+ throw al::backend_exception{ALC_INVALID_DEVICE, "No physical playback ports found"};
+ }
+ auto connect_port = [this](const jack_port_t *port, const char *pname) -> bool
{
if(!port) return false;
if(!pname)
@@ -404,8 +406,10 @@ void JackPlayback::start()
ERR("Failed to connect output port \"%s\" to \"%s\"\n", jack_port_name(port),
pname);
return true;
- });
- jack_free(ports);
+ };
+ std::mismatch(mPort.begin(), mPort.end(), ports, connect_port);
+ jack_free(ports);
+ }
/* Reconfigure buffer metrics in case the server changed it since the reset
* (it won't change again after jack_activate), then allocate the ring
@@ -415,7 +419,6 @@ void JackPlayback::start()
mDevice->UpdateSize = jack_get_buffer_size(mClient);
mDevice->BufferSize = mDevice->UpdateSize * 2;
- const char *devname{mDevice->DeviceName.c_str()};
ALuint bufsize{ConfigValueUInt(devname, "jack", "buffer-size").value_or(mDevice->UpdateSize)};
bufsize = maxu(NextPowerOf2(bufsize), mDevice->UpdateSize);
mDevice->BufferSize = bufsize + mDevice->UpdateSize;