Andrew Nguyen : winmm: Make the return behavior of waveOutPrepareHeader consistent for 16-bit and 32-bit .

Alexandre Julliard julliard at winehq.org
Mon Jan 26 10:14:05 CST 2009


Module: wine
Branch: master
Commit: cb6ddfc75bf3d295e657699d9e85146b8cf1237e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=cb6ddfc75bf3d295e657699d9e85146b8cf1237e

Author: Andrew Nguyen <arethusa26 at gmail.com>
Date:   Sun Jan 25 02:56:48 2009 -0600

winmm: Make the return behavior of waveOutPrepareHeader consistent for 16-bit and 32-bit.

---

 dlls/winmm/mmsystem.c |   15 +++++++++++++--
 1 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/dlls/winmm/mmsystem.c b/dlls/winmm/mmsystem.c
index f3046b6..69f14fc 100644
--- a/dlls/winmm/mmsystem.c
+++ b/dlls/winmm/mmsystem.c
@@ -1279,15 +1279,26 @@ UINT16 WINAPI waveOutPrepareHeader16(HWAVEOUT16 hWaveOut,      /* [in] */
 {
     LPWINE_MLD		wmld;
     LPWAVEHDR		lpWaveOutHdr = MapSL(lpsegWaveOutHdr);
+    UINT16		result;
 
     TRACE("(%04X, %08x, %u);\n", hWaveOut, lpsegWaveOutHdr, uSize);
 
     if (lpWaveOutHdr == NULL) return MMSYSERR_INVALPARAM;
 
     if ((wmld = MMDRV_Get(HWAVEOUT_32(hWaveOut), MMDRV_WAVEOUT, FALSE)) == NULL)
-	return MMSYSERR_INVALHANDLE;
+        return MMSYSERR_INVALHANDLE;
+
+    if ((result = MMDRV_Message(wmld, WODM_PREPARE, lpsegWaveOutHdr,
+                                uSize, FALSE)) != MMSYSERR_NOTSUPPORTED)
+        return result;
 
-    return MMDRV_Message(wmld, WODM_PREPARE, lpsegWaveOutHdr, uSize, FALSE);
+    if (lpWaveOutHdr->dwFlags & WHDR_INQUEUE)
+        return WAVERR_STILLPLAYING;
+
+    lpWaveOutHdr->dwFlags |= WHDR_PREPARED;
+    lpWaveOutHdr->dwFlags &= ~WHDR_DONE;
+
+    return MMSYSERR_NOERROR;
 }
 
 /**************************************************************************




More information about the wine-cvs mailing list