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