Ken Thomases : winecoreaudio: Specialize wodHelper_BeginWaveHdr for its two callers and simplify.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Dec 21 10:36:31 CST 2006


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

Author: Ken Thomases <ken at codeweavers.com>
Date:   Thu Dec 21 03:48:38 2006 -0600

winecoreaudio: Specialize wodHelper_BeginWaveHdr for its two callers and simplify.

wodHelper_PlayPtrNext is only called when state == WINE_WS_PLAYING.  Also, it
clears dwPartialOffset itself.

wodWrite only calls wodHelper_BeginWaveHdr[Write] with a non-NULL lpWaveHdr
parameter.  wodWrite is not called from the Audio Unit render callback, so it
can use Wine debug channels.

---

 dlls/winmm/winecoreaudio/audio.c |   54 +++++++++++++++++++++----------------
 1 files changed, 31 insertions(+), 23 deletions(-)

diff --git a/dlls/winmm/winecoreaudio/audio.c b/dlls/winmm/winecoreaudio/audio.c
index 9e26c31..8b416bb 100644
--- a/dlls/winmm/winecoreaudio/audio.c
+++ b/dlls/winmm/winecoreaudio/audio.c
@@ -883,39 +883,47 @@ static void wodHelper_CheckForLoopBegin(
 
 
 /**************************************************************************
-* 				wodHelper_BeginWaveHdr          [internal]
+* 				wodHelper_BeginWaveHdrPlay          [internal]
 *
 * Makes the specified lpWaveHdr the currently playing wave header.
 * If the specified wave header is a begin loop and we're not already in
 * a loop, setup the loop.
 * Call from AudioUnit IO thread can't use Wine debug channels.
 */
-static void wodHelper_BeginWaveHdr(WINE_WAVEOUT* wwo, LPWAVEHDR lpWaveHdr)
+static void wodHelper_BeginWaveHdrPlay(WINE_WAVEOUT* wwo, LPWAVEHDR lpWaveHdr)
 {
-    OSStatus status;
-
     wwo->lpPlayPtr = lpWaveHdr;
-    
+
     if (!lpWaveHdr)
     {
-        if (wwo->state == WINE_WS_PLAYING)
-        {
-            wwo->state = WINE_WS_STOPPED;
-            status = AudioOutputUnitStop(wwo->audioUnit);
-            if (status && wwo->err_on)
-                fprintf(stderr, "err:winecoreaudio:wodHelper_BeginWaveHdr AudioOutputUnitStop return %c%c%c%c\n",
-                        (char) (status >> 24), (char) (status >> 16), (char) (status >> 8), (char) status);
-        }
-        return;
+        OSStatus status;
+        wwo->state = WINE_WS_STOPPED;
+        status = AudioOutputUnitStop(wwo->audioUnit);
+        if (status && wwo->err_on)
+            fprintf(stderr, "err:winecoreaudio:wodHelper_BeginWaveHdrPlay AudioOutputUnitStop return %c%c%c%c\n",
+                    (char) (status >> 24), (char) (status >> 16), (char) (status >> 8), (char) status);
     }
+    else
+        wodHelper_CheckForLoopBegin(wwo);
+}
+
+
+/**************************************************************************
+* 				wodHelper_BeginWaveHdrWrite          [internal]
+*
+* Makes the specified lpWaveHdr the currently playing wave header.
+* If the specified wave header is a begin loop and we're not already in
+* a loop, setup the loop.
+*/
+static void wodHelper_BeginWaveHdrWrite(WINE_WAVEOUT* wwo, LPWAVEHDR lpWaveHdr)
+{
+    wwo->lpPlayPtr = lpWaveHdr;
 
     if (wwo->state == WINE_WS_STOPPED)
     {
-        status = AudioOutputUnitStart(wwo->audioUnit);
+        OSStatus status = AudioOutputUnitStart(wwo->audioUnit);
         if (status) {
-            if (wwo->err_on)
-                fprintf(stderr, "err:winecoreaudio:AudioOutputUnitStart return %c%c%c%c\n",
-                        (char) (status >> 24), (char) (status >> 16), (char) (status >> 8), (char) status);
+            ERR("AudioOutputUnitStart return %c%c%c%c\n", (char) (status >> 24), (char) (status >> 16), (char) (status >> 8), (char) status);
         }
         else wwo->state = WINE_WS_PLAYING;
     }
@@ -965,9 +973,9 @@ static LPWAVEHDR wodHelper_PlayPtrNext(W
     if (!didLoopBack)
     {
         /* We didn't loop back.  Advance to the next wave header */
-        wodHelper_BeginWaveHdr(wwo, lpWaveHdr = lpWaveHdr->lpNext);
+        wodHelper_BeginWaveHdrPlay(wwo, lpWaveHdr = lpWaveHdr->lpNext);
     }
-    
+
     pthread_mutex_unlock(&wwo->lock);
     
     return lpWaveHdr;
@@ -1120,11 +1128,11 @@ static DWORD wodWrite(WORD wDevID, LPWAV
     for (wh = &(wwo->lpQueuePtr); *wh; wh = &((*wh)->lpNext))
         /* Do nothing */;
     *wh = lpWaveHdr;
-    
+
     if (!wwo->lpPlayPtr)
-        wodHelper_BeginWaveHdr(wwo,lpWaveHdr);
+        wodHelper_BeginWaveHdrWrite(wwo,lpWaveHdr);
     pthread_mutex_unlock(&wwo->lock);
-    
+
     return MMSYSERR_NOERROR;
 }
 




More information about the wine-cvs mailing list