Ken Thomases : winecoreaudio.drv: Add support for waveOutBreakLoop/ WODM_BREAKLOOP.

Alexandre Julliard julliard at winehq.org
Fri Feb 6 09:55:45 CST 2009


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

Author: Ken Thomases <ken at codeweavers.com>
Date:   Thu Feb  5 15:49:04 2009 -0600

winecoreaudio.drv: Add support for waveOutBreakLoop/WODM_BREAKLOOP.

---

 dlls/winecoreaudio.drv/audio.c |   32 +++++++++++++++++++++++++++++++-
 1 files changed, 31 insertions(+), 1 deletions(-)

diff --git a/dlls/winecoreaudio.drv/audio.c b/dlls/winecoreaudio.drv/audio.c
index 1d5df02..43f2451 100644
--- a/dlls/winecoreaudio.drv/audio.c
+++ b/dlls/winecoreaudio.drv/audio.c
@@ -1329,6 +1329,36 @@ static DWORD wodReset(WORD wDevID)
 }
 
 /**************************************************************************
+*           wodBreakLoop                [internal]
+*/
+static DWORD wodBreakLoop(WORD wDevID)
+{
+    WINE_WAVEOUT* wwo;
+
+    TRACE("(%u);\n", wDevID);
+
+    if (wDevID >= MAX_WAVEOUTDRV)
+    {
+        WARN("bad device ID !\n");
+        return MMSYSERR_BADDEVICEID;
+    }
+
+    wwo = &WOutDev[wDevID];
+
+    OSSpinLockLock(&wwo->lock);
+
+    if (wwo->lpLoopPtr != NULL)
+    {
+        /* ensure exit at end of current loop */
+        wwo->dwLoops = 1;
+    }
+
+    OSSpinLockUnlock(&wwo->lock);
+
+    return MMSYSERR_NOERROR;
+}
+
+/**************************************************************************
 * 				wodGetPosition			[internal]
 */
 static DWORD wodGetPosition(WORD wDevID, LPMMTIME lpTime, DWORD uSize)
@@ -1488,7 +1518,7 @@ DWORD WINAPI CoreAudio_wodMessage(UINT wDevID, UINT wMsg, DWORD dwUser,
         case WODM_WRITE:        return wodWrite(wDevID, (LPWAVEHDR) dwParam1, dwParam2);
         case WODM_PAUSE:        return wodPause(wDevID);  
         case WODM_GETPOS:       return wodGetPosition(wDevID, (LPMMTIME) dwParam1, dwParam2);
-        case WODM_BREAKLOOP:    return MMSYSERR_NOTSUPPORTED;
+        case WODM_BREAKLOOP:    return wodBreakLoop(wDevID);
         case WODM_PREPARE:      return wodPrepare(wDevID, (LPWAVEHDR)dwParam1, dwParam2);
         case WODM_UNPREPARE:    return wodUnprepare(wDevID, (LPWAVEHDR)dwParam1, dwParam2);
             




More information about the wine-cvs mailing list