[WINEALSA] fix SB16 PCI crash
Robert Reif
reif at earthlink.net
Sun Jun 5 09:22:00 CDT 2005
Fix a problem where actual sample rate doesn't exactly match requested.
-------------- next part --------------
Index: dlls/winmm/winealsa/audio.c
===================================================================
RCS file: /home/wine/wine/dlls/winmm/winealsa/audio.c,v
retrieving revision 1.80
diff -p -u -r1.80 audio.c
--- dlls/winmm/winealsa/audio.c 29 May 2005 20:02:05 -0000 1.80
+++ dlls/winmm/winealsa/audio.c 5 Jun 2005 14:18:39 -0000
@@ -324,6 +324,12 @@ static const char * getFormat(WORD wForm
return unknown;
}
+/* Allow 1% deviation for sample rates (some ES137x cards) */
+static BOOL NearMatch(int rate1, int rate2)
+{
+ return (((100 * (rate1 - rate2)) / rate1) == 0);
+}
+
static DWORD bytes_to_mmtime(LPMMTIME lpTime, DWORD position,
WAVEFORMATPCMEX* format)
{
@@ -1928,7 +1934,7 @@ static DWORD wodOpen(WORD wDevID, LPWAVE
snd_pcm_close(pcm);
return WAVERR_BADFORMAT;
}
- if (rate != wwo->format.Format.nSamplesPerSec) {
+ if (!NearMatch(rate, wwo->format.Format.nSamplesPerSec)) {
if (dwFlags & WAVE_DIRECTSOUND) {
WARN("changed sample rate from %ld Hz to %d Hz\n", wwo->format.Format.nSamplesPerSec, rate);
wwo->format.Format.nSamplesPerSec = rate;
@@ -3411,7 +3417,7 @@ static DWORD widOpen(WORD wDevID, LPWAVE
snd_pcm_close(pcm);
return WAVERR_BADFORMAT;
}
- if (rate != wwi->format.Format.nSamplesPerSec) {
+ if (!NearMatch(rate, wwi->format.Format.nSamplesPerSec)) {
ERR("Rate doesn't match (requested %ld Hz, got %d Hz)\n", wwi->format.Format.nSamplesPerSec, rate);
snd_pcm_close(pcm);
return WAVERR_BADFORMAT;
More information about the wine-patches
mailing list