diff options
author | Chris Robinson <[email protected]> | 2022-04-26 23:32:15 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2022-04-26 23:32:15 -0700 |
commit | 593966c8dbdbf2dbcd8768b258a3b22adb548b2f (patch) | |
tree | 720dd3a36188cdb1ff55165d1b2bd51e5fd7d687 /alc/backends/wasapi.cpp | |
parent | 07dd62e53f3abaf918262953895961bd38848a7e (diff) |
Handle 3D7.1 as a separate channel configuration
It's treated as 5.1 + 2 aux channels. This allows AL_DIRECT_CHANNELS_SOFT to
behave better, not forwarding rear left/right channel inputs to lower front and
upper rear, and allows reporting a more appropriate output mode to the app
instead of 7.1.
Diffstat (limited to 'alc/backends/wasapi.cpp')
-rw-r--r-- | alc/backends/wasapi.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/alc/backends/wasapi.cpp b/alc/backends/wasapi.cpp index 063fca98..4e0f67a2 100644 --- a/alc/backends/wasapi.cpp +++ b/alc/backends/wasapi.cpp @@ -926,6 +926,7 @@ HRESULT WasapiPlayback::resetProxy() OutputType.dwChannelMask = X6DOT1; break; case DevFmtX71: + case DevFmtX3D71: OutputType.Format.nChannels = 8; OutputType.dwChannelMask = X7DOT1; break; @@ -1021,6 +1022,7 @@ HRESULT WasapiPlayback::resetProxy() chansok = (chancount >= 7 && (chanmask&X61Mask) == X6DOT1); break; case DevFmtX71: + case DevFmtX3D71: chansok = (chancount >= 8 && (chanmask&X71Mask) == X7DOT1); break; case DevFmtAmbi3D: @@ -1087,7 +1089,7 @@ HRESULT WasapiPlayback::resetProxy() const EndpointFormFactor formfactor{get_device_formfactor(mMMDev.get())}; mDevice->Flags.set(DirectEar, (formfactor == Headphones || formfactor == Headset)); - setChannelOrderFromWFXMask(OutputType.dwChannelMask); + setDefaultWFXChannelOrder(); hr = mClient->Initialize(AUDCLNT_SHAREMODE_SHARED, AUDCLNT_STREAMFLAGS_EVENTCALLBACK, buf_time.count(), 0, &OutputType.Format, nullptr); @@ -1476,6 +1478,7 @@ HRESULT WasapiCapture::resetProxy() InputType.dwChannelMask = X7DOT1; break; + case DevFmtX3D71: case DevFmtAmbi3D: return E_FAIL; } @@ -1556,6 +1559,7 @@ HRESULT WasapiCapture::resetProxy() case DevFmtX61: return (chancount == 7 && (chanmask == 0 || (chanmask&X61Mask) == X6DOT1)); case DevFmtX71: + case DevFmtX3D71: return (chancount == 8 && (chanmask == 0 || (chanmask&X71Mask) == X7DOT1)); case DevFmtAmbi3D: return (chanmask == 0 && chancount == device->channelsFromFmt()); |