From 7cecf7a40aeaaeab710b80b3e7462cd99892b2f4 Mon Sep 17 00:00:00 2001 From: Ken Thomases Date: Thu, 21 Dec 2006 03:48:45 -0600 Subject: [PATCH] winecoreaudio: Inline & eliminate the specializations of wodHelper_BeginWaveHdr. --- dlls/winmm/winecoreaudio/audio.c | 93 +++++++++++++++------------------------- 1 file changed, 34 insertions(+), 59 deletions(-) diff --git a/dlls/winmm/winecoreaudio/audio.c b/dlls/winmm/winecoreaudio/audio.c index 8b416bb7470..ac3095d4d07 100644 --- a/dlls/winmm/winecoreaudio/audio.c +++ b/dlls/winmm/winecoreaudio/audio.c @@ -883,58 +883,6 @@ static void wodHelper_CheckForLoopBegin(WINE_WAVEOUT* wwo) /************************************************************************** -* 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(WINE_WAVEOUT* wwo) 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, LPWAVEHDR lpWaveHdr, DWORD dwSize) 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; } -- 2.11.4.GIT