Ken Thomases : winecoreaudio: Inline & eliminate the specializations of wodHelper_BeginWaveHdr.

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


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

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

winecoreaudio: Inline & eliminate the specializations of wodHelper_BeginWaveHdr.

---

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

diff --git a/dlls/winmm/winecoreaudio/audio.c b/dlls/winmm/winecoreaudio/audio.c
index 8b416bb..ac3095d 100644
--- a/dlls/winmm/winecoreaudio/audio.c
+++ b/dlls/winmm/winecoreaudio/audio.c
@@ -883,58 +883,6 @@ static void wodHelper_CheckForLoopBegin(
 
 
 /**************************************************************************
-* 				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_BeginWaveHdrPlay(WINE_WAVEOUT* wwo, LPWAVEHDR lpWaveHdr)
-{
-    wwo->lpPlayPtr = lpWaveHdr;
-
-    if (!lpWaveHdr)
-    {
-        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)
-    {
-        OSStatus status = AudioOutputUnitStart(wwo->audioUnit);
-        if (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;
-    }
-
-    wodHelper_CheckForLoopBegin(wwo);
-
-    wwo->dwPartialOffset = 0;
-}
-
-
-/**************************************************************************
 * 				wodHelper_PlayPtrNext	        [internal]
 *
 * Advance the play pointer to the next waveheader, looping if required.
@@ -969,15 +917,27 @@ static LPWAVEHDR wodHelper_PlayPtrNext(W
             wwo->lpLoopPtr = NULL;
         }
     }
-
     if (!didLoopBack)
     {
         /* We didn't loop back.  Advance to the next wave header */
-        wodHelper_BeginWaveHdrPlay(wwo, lpWaveHdr = lpWaveHdr->lpNext);
-    }
+        lpWaveHdr = lpWaveHdr->lpNext;
 
-    pthread_mutex_unlock(&wwo->lock);
+        wwo->lpPlayPtr = lpWaveHdr;
+
+        if (!lpWaveHdr)
+        {
+            OSStatus status;
+            wwo->state = WINE_WS_STOPPED;
+            status = AudioOutputUnitStop(wwo->audioUnit);
+            if (status && wwo->err_on)
+                fprintf(stderr, "err:winecoreaudio:wodHelper_PlayPtrNext AudioOutputUnitStop return %c%c%c%c\n",
+                        (char) (status >> 24), (char) (status >> 16), (char) (status >> 8), (char) status);
+        }
+        else
+            wodHelper_CheckForLoopBegin(wwo);
+    }
     
+    pthread_mutex_unlock(&wwo->lock);
     return lpWaveHdr;
 }
 
@@ -1128,11 +1088,26 @@ static DWORD wodWrite(WORD wDevID, LPWAV
     for (wh = &(wwo->lpQueuePtr); *wh; wh = &((*wh)->lpNext))
         /* Do nothing */;
     *wh = lpWaveHdr;
-
+    
     if (!wwo->lpPlayPtr)
-        wodHelper_BeginWaveHdrWrite(wwo,lpWaveHdr);
-    pthread_mutex_unlock(&wwo->lock);
+    {
+        wwo->lpPlayPtr = lpWaveHdr;
 
+        if (wwo->state == WINE_WS_STOPPED)
+        {
+            OSStatus status = AudioOutputUnitStart(wwo->audioUnit);
+            if (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;
+        }
+
+        wodHelper_CheckForLoopBegin(wwo);
+
+        wwo->dwPartialOffset = 0;
+    }
+    pthread_mutex_unlock(&wwo->lock);
+    
     return MMSYSERR_NOERROR;
 }
 




More information about the wine-cvs mailing list