Ken Thomases : winecoreaudio: Implement widReset.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Dec 29 06:47:18 CST 2006


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

Author: Ken Thomases <ken at codeweavers.com>
Date:   Thu Dec 28 11:06:09 2006 -0600

winecoreaudio: Implement widReset.

---

 dlls/winmm/winecoreaudio/audio.c |   36 ++++++++++++++++++++++++++++++++++--
 1 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/dlls/winmm/winecoreaudio/audio.c b/dlls/winmm/winecoreaudio/audio.c
index f40d8f8..94120e6 100644
--- a/dlls/winmm/winecoreaudio/audio.c
+++ b/dlls/winmm/winecoreaudio/audio.c
@@ -1755,6 +1755,10 @@ static DWORD widStop(WORD wDevID)
  */
 static DWORD widReset(WORD wDevID)
 {
+    DWORD           ret = MMSYSERR_NOERROR;
+    WINE_WAVEIN*    wwi;
+    WAVEHDR*        lpWaveHdr = NULL;
+
     TRACE("(%u);\n", wDevID);
     if (wDevID >= MAX_WAVEINDRV)
     {
@@ -1762,8 +1766,36 @@ static DWORD widReset(WORD wDevID)
         return MMSYSERR_INVALHANDLE;
     }
 
-    FIXME("unimplemented\n");
-    return MMSYSERR_NOTENABLED;
+    wwi = &WInDev[wDevID];
+    OSSpinLockLock(&wwi->lock);
+
+    if (wwi->state == WINE_WS_CLOSED)
+    {
+        WARN("Trying to reset a closed device.\n");
+        ret = MMSYSERR_INVALHANDLE;
+    }
+    else
+    {
+        lpWaveHdr               = wwi->lpQueuePtr;
+        wwi->lpQueuePtr         = NULL;
+        wwi->state              = WINE_WS_STOPPED;
+        wwi->dwTotalRecorded    = 0;
+    }
+
+    OSSpinLockUnlock(&wwi->lock);
+
+    while (lpWaveHdr)
+    {
+        WAVEHDR* lpNext = lpWaveHdr->lpNext;
+
+        lpWaveHdr->dwFlags &= ~WHDR_INQUEUE;
+        lpWaveHdr->dwFlags |= WHDR_DONE;
+        widNotifyClient(wwi, WIM_DATA, (DWORD)lpWaveHdr, 0);
+
+        lpWaveHdr = lpNext;
+    }
+
+    return ret;
 }
 
 




More information about the wine-cvs mailing list