Module: wine Branch: master Commit: 91c5ec961660c13de1d8fbd6cef233ad3aadcdbf URL: http://source.winehq.org/git/wine.git/?a=commit;h=91c5ec961660c13de1d8fbd6ce...
Author: Ken Thomases ken@codeweavers.com Date: Thu Dec 21 03:47:19 2006 -0600
winecoreaudio: Extract wodHelper_CheckForLoopBegin() from wodHelper_BeginWaveHdr().
This refactoring prepares the ground for subsequent refactoring of wodHelper_BeginWaveHdr.
---
dlls/winmm/winecoreaudio/audio.c | 53 +++++++++++++++++++++++++------------ 1 files changed, 36 insertions(+), 17 deletions(-)
diff --git a/dlls/winmm/winecoreaudio/audio.c b/dlls/winmm/winecoreaudio/audio.c index 255f7ab..d28759b 100644 --- a/dlls/winmm/winecoreaudio/audio.c +++ b/dlls/winmm/winecoreaudio/audio.c @@ -848,6 +848,40 @@ static DWORD wodUnprepare(WORD wDevID, L return MMSYSERR_NOERROR; }
+ +/************************************************************************** +* wodHelper_CheckForLoopBegin [internal] +* +* Check if the new waveheader is the beginning of a loop, and set up +* state if so. +* This is called with the WAVEOUT lock held. +* Call from AudioUnit IO thread can't use Wine debug channels. +*/ +static void wodHelper_CheckForLoopBegin(WINE_WAVEOUT* wwo) +{ + LPWAVEHDR lpWaveHdr = wwo->lpPlayPtr; + + if (lpWaveHdr->dwFlags & WHDR_BEGINLOOP) + { + if (wwo->lpLoopPtr) + { + if (wwo->warn_on) + fprintf(stderr, "warn:winecoreaudio:wodHelper_CheckForLoopBegin Already in a loop. Discarding loop on this header (%p)\n", lpWaveHdr); + } + else + { + if (wwo->trace_on) + fprintf(stderr, "trace:winecoreaudio:wodHelper_CheckForLoopBegin Starting loop (%dx) with %p\n", lpWaveHdr->dwLoops, lpWaveHdr); + + wwo->lpLoopPtr = lpWaveHdr; + /* Windows does not touch WAVEHDR.dwLoops, + * so we need to make an internal copy */ + wwo->dwLoops = lpWaveHdr->dwLoops; + } + } +} + + /************************************************************************** * wodHelper_BeginWaveHdr [internal] * @@ -885,24 +919,9 @@ static void wodHelper_BeginWaveHdr(WINE_ } else wwo->state = WINE_WS_PLAYING; } - - if (lpWaveHdr->dwFlags & WHDR_BEGINLOOP) - { - if (wwo->lpLoopPtr) - { - if (wwo->warn_on) - fprintf(stderr, "warn:winecoreaudio:wodHelper_BeginWaveHdr Already in a loop. Discarding loop on this header (%p)\n", lpWaveHdr); - } else - { - if (wwo->trace_on) - fprintf(stderr, "trace:winecoreaudio:wodHelper_BeginWaveHdr Starting loop (%dx) with %p\n", lpWaveHdr->dwLoops, lpWaveHdr);
- wwo->lpLoopPtr = lpWaveHdr; - /* Windows does not touch WAVEHDR.dwLoops, - * so we need to make an internal copy */ - wwo->dwLoops = lpWaveHdr->dwLoops; - } - } + wodHelper_CheckForLoopBegin(wwo); + wwo->dwPartialOffset = 0; }