[03/16] winecoreaudio: Extract wodHelper_CheckForLoopBegin() from
wodHelper_BeginWaveHdr().
Ken Thomases
ken at codeweavers.com
Thu Dec 21 03:47:19 CST 2006
This refactoring prepares the ground for subsequent refactoring of
wodHelper_BeginWaveHdr.
---
dlls/winmm/winecoreaudio/audio.c | 53
++++++++++++++++++++++++++------------
1 files changed, 36 insertions(+), 17 deletions(-)
-------------- next part --------------
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;
}
More information about the wine-patches
mailing list