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