Ken Thomases : winecoreaudio: Implement widAddBuffer.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Dec 29 06:47:18 CST 2006
Module: wine
Branch: master
Commit: 58ea6abe726c935a602b210297a2cd4a76405704
URL: http://source.winehq.org/git/wine.git/?a=commit;h=58ea6abe726c935a602b210297a2cd4a76405704
Author: Ken Thomases <ken at codeweavers.com>
Date: Thu Dec 28 11:06:02 2006 -0600
winecoreaudio: Implement widAddBuffer.
---
dlls/winmm/winecoreaudio/audio.c | 31 +++++++++++++++++++++++++++++--
1 files changed, 29 insertions(+), 2 deletions(-)
diff --git a/dlls/winmm/winecoreaudio/audio.c b/dlls/winmm/winecoreaudio/audio.c
index 51e71a8..f40d8f8 100644
--- a/dlls/winmm/winecoreaudio/audio.c
+++ b/dlls/winmm/winecoreaudio/audio.c
@@ -1666,6 +1666,9 @@ static DWORD widClose(WORD wDevID)
*/
static DWORD widAddBuffer(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize)
{
+ DWORD ret = MMSYSERR_NOERROR;
+ WINE_WAVEIN* wwi;
+
TRACE("(%u, %p, %08X);\n", wDevID, lpWaveHdr, dwSize);
if (wDevID >= MAX_WAVEINDRV)
@@ -1684,8 +1687,32 @@ static DWORD widAddBuffer(WORD wDevID, L
return WAVERR_STILLPLAYING;
}
- FIXME("unimplemented\n");
- return MMSYSERR_NOTENABLED;
+ wwi = &WInDev[wDevID];
+ OSSpinLockLock(&wwi->lock);
+
+ if (wwi->state == WINE_WS_CLOSED)
+ {
+ WARN("Trying to add buffer to closed device.\n");
+ ret = MMSYSERR_INVALHANDLE;
+ }
+ else
+ {
+ LPWAVEHDR* wh;
+
+ lpWaveHdr->dwFlags |= WHDR_INQUEUE;
+ lpWaveHdr->dwFlags &= ~WHDR_DONE;
+ lpWaveHdr->dwBytesRecorded = 0;
+ lpWaveHdr->lpNext = NULL;
+
+ /* insert buffer at end of queue */
+ for (wh = &(wwi->lpQueuePtr); *wh; wh = &((*wh)->lpNext))
+ /* Do nothing */;
+ *wh = lpWaveHdr;
+ }
+
+ OSSpinLockUnlock(&wwi->lock);
+
+ return ret;
}
More information about the wine-cvs
mailing list