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