aboutsummaryrefslogtreecommitdiffstats
path: root/alc/backends/wasapi.cpp
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2022-04-26 23:32:15 -0700
committerChris Robinson <[email protected]>2022-04-26 23:32:15 -0700
commit593966c8dbdbf2dbcd8768b258a3b22adb548b2f (patch)
tree720dd3a36188cdb1ff55165d1b2bd51e5fd7d687 /alc/backends/wasapi.cpp
parent07dd62e53f3abaf918262953895961bd38848a7e (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.cpp6
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());