winealsa: Check ValidBitsPerSample and support SND_PCM_FORMAT_S20_3LE.
diff --git a/dlls/winealsa.drv/mmdevdrv.c b/dlls/winealsa.drv/mmdevdrv.c
index 09be694..a2a2a7d 100644
--- a/dlls/winealsa.drv/mmdevdrv.c
+++ b/dlls/winealsa.drv/mmdevdrv.c
@@ -736,6 +736,15 @@
format = SND_PCM_FORMAT_S32_LE;
else
WARN("Unsupported bit depth: %u\n", fmt->wBitsPerSample);
+ if(fmt->wFormatTag == WAVE_FORMAT_EXTENSIBLE &&
+ fmt->wBitsPerSample != fmtex->Samples.wValidBitsPerSample){
+ if(fmtex->Samples.wValidBitsPerSample == 20 && fmt->wBitsPerSample == 24)
+ format = SND_PCM_FORMAT_S20_3LE;
+ else{
+ WARN("Unsupported ValidBits: %u\n", fmtex->Samples.wValidBitsPerSample);
+ format = SND_PCM_FORMAT_UNKNOWN;
+ }
+ }
}else if(fmt->wFormatTag == WAVE_FORMAT_IEEE_FLOAT ||
(fmt->wFormatTag == WAVE_FORMAT_EXTENSIBLE &&
IsEqualGUID(&fmtex->SubFormat, &KSDATAFORMAT_SUBTYPE_IEEE_FLOAT))){