From c06089d0c5a5b26b13a375f4f504fa027f219fa1 Mon Sep 17 00:00:00 2001
From: Eric Pouech <Eric.Pouech@wanadoo.fr>
Date: Sun, 5 Dec 1999 23:09:13 +0000
Subject: [PATCH] Added support for WAVE_FORMAT_QUERY flag in wodOpen.

---
 dlls/winmm/wavemap/wavemap.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/dlls/winmm/wavemap/wavemap.c b/dlls/winmm/wavemap/wavemap.c
index 2f063339d3a..0172752e0ae 100644
--- a/dlls/winmm/wavemap/wavemap.c
+++ b/dlls/winmm/wavemap/wavemap.c
@@ -84,11 +84,12 @@ static	DWORD	wodOpenHelper(WAVEMAPDATA* wom, UINT idx,
     /* destination is always PCM, so the formulas below apply */
     lpwfx->nBlockAlign = (lpwfx->nChannels * lpwfx->wBitsPerSample) / 8;
     lpwfx->nAvgBytesPerSec = lpwfx->nSamplesPerSec * lpwfx->nBlockAlign;
-    ret = wom->acmStreamOpen(&wom->hAcmStream, 0, lpDesc->lpFormat, lpwfx, NULL, 0L, 0L, 0L);
+    ret = wom->acmStreamOpen(&wom->hAcmStream, 0, lpDesc->lpFormat, lpwfx, NULL, 0L, 0L, 
+			     (dwFlags & WAVE_FORMAT_QUERY) ? ACM_STREAMOPENF_QUERY : 0L);
     if (ret != MMSYSERR_NOERROR)
 	return ret;
     return waveOutOpen(&wom->hWave, idx, lpwfx, (DWORD)WAVEMAP_DstCallback, 
-		       (DWORD)wom, (dwFlags & CALLBACK_TYPEMASK) | CALLBACK_FUNCTION);
+		       (DWORD)wom, (dwFlags & ~CALLBACK_TYPEMASK) | CALLBACK_FUNCTION);
 }
 
 static	DWORD	wodOpen(LPDWORD lpdwUser, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
@@ -157,8 +158,14 @@ static	DWORD	wodOpen(LPDWORD lpdwUser, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
     HeapFree(GetProcessHeap(), 0, wom);
     return MMSYSERR_ALLOCATED;
 found:
-    lpDesc->hWave = wom->hWave;
-    *lpdwUser = (DWORD)wom;
+    if (dwFlags & WAVE_FORMAT_QUERY) {
+	lpDesc->hWave = 0;
+	*lpdwUser = 0L;
+	HeapFree(GetProcessHeap(), 0, wom);
+    } else {
+	lpDesc->hWave = wom->hWave;
+	*lpdwUser = (DWORD)wom;
+    }
     return MMSYSERR_NOERROR;
 }
 
-- 
GitLab