Ken Thomases : winecoreaudio: Merge wodReset and wodHelper_Reset.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Dec 21 10:36:35 CST 2006
Module: wine
Branch: master
Commit: acf349991626dc58b6d7005e79cef91ca069b571
URL: http://source.winehq.org/git/wine.git/?a=commit;h=acf349991626dc58b6d7005e79cef91ca069b571
Author: Ken Thomases <ken at codeweavers.com>
Date: Thu Dec 21 03:49:58 2006 -0600
winecoreaudio: Merge wodReset and wodHelper_Reset.
---
dlls/winmm/winecoreaudio/audio.c | 104 ++++++++++++--------------------------
1 files changed, 32 insertions(+), 72 deletions(-)
diff --git a/dlls/winmm/winecoreaudio/audio.c b/dlls/winmm/winecoreaudio/audio.c
index b0d6c2c..a28057d 100644
--- a/dlls/winmm/winecoreaudio/audio.c
+++ b/dlls/winmm/winecoreaudio/audio.c
@@ -970,75 +970,6 @@ static void wodHelper_NotifyCompletions(
}
}
-/**************************************************************************
-* wodHelper_Reset [internal]
-*
-* Resets current output stream.
-*/
-static DWORD wodHelper_Reset(WINE_WAVEOUT* wwo, BOOL reset)
-{
- OSStatus status;
-
- FIXME("\n");
-
- /* updates current notify list */
- /* if resetting, remove all wave headers and notify client that all headers were completed */
- wodHelper_NotifyCompletions(wwo, reset);
-
- pthread_mutex_lock(&wwo->lock);
-
- if (reset)
- {
- wwo->lpPlayPtr = wwo->lpQueuePtr = wwo->lpLoopPtr = NULL;
- wwo->state = WINE_WS_STOPPED;
- wwo->dwPlayedTotal = wwo->dwWrittenTotal = 0;
-
- wwo->dwPartialOffset = 0; /* Clear partial wavehdr */
- }
- else
- {
- if (wwo->lpLoopPtr)
- {
- /* complicated case, not handled yet (could imply modifying the loop counter) */
- FIXME("Pausing while in loop isn't correctly handled yet, except strange results\n");
- wwo->lpPlayPtr = wwo->lpLoopPtr;
- wwo->dwPartialOffset = 0;
- wwo->dwWrittenTotal = wwo->dwPlayedTotal; /* this is wrong !!! */
- } else
- {
- LPWAVEHDR ptr;
- DWORD sz = wwo->dwPartialOffset;
-
- /* reset all the data as if we had written only up to lpPlayedTotal bytes */
- /* compute the max size playable from lpQueuePtr */
- for (ptr = wwo->lpQueuePtr; ptr && ptr != wwo->lpPlayPtr; ptr = ptr->lpNext)
- {
- sz += ptr->dwBufferLength;
- }
-
- /* because the reset lpPlayPtr will be lpQueuePtr */
- if (wwo->dwWrittenTotal > wwo->dwPlayedTotal + sz) ERR("doh\n");
- wwo->dwPartialOffset = sz - (wwo->dwWrittenTotal - wwo->dwPlayedTotal);
- wwo->dwWrittenTotal = wwo->dwPlayedTotal;
- wwo->lpPlayPtr = wwo->lpQueuePtr;
- }
-
- wwo->state = WINE_WS_PAUSED;
- }
-
- pthread_mutex_unlock(&wwo->lock);
-
- 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);
- return MMSYSERR_ERROR; /* FIXME return an error based on the OSStatus */
- }
-
- return MMSYSERR_NOERROR;
-}
-
/**************************************************************************
* wodWrite [internal]
@@ -1183,15 +1114,44 @@ static DWORD wodRestart(WORD wDevID)
*/
static DWORD wodReset(WORD wDevID)
{
+ WINE_WAVEOUT* wwo;
+ OSStatus status;
+
TRACE("(%u);\n", wDevID);
-
+
if (wDevID >= MAX_WAVEOUTDRV)
{
WARN("bad device ID !\n");
return MMSYSERR_BADDEVICEID;
}
-
- return wodHelper_Reset(&WOutDev[wDevID], TRUE);
+
+ wwo = &WOutDev[wDevID];
+
+ FIXME("\n");
+
+ /* updates current notify list */
+ /* if resetting, remove all wave headers and notify client that all headers were completed */
+ wodHelper_NotifyCompletions(wwo, TRUE);
+
+ pthread_mutex_lock(&wwo->lock);
+
+ wwo->lpPlayPtr = wwo->lpQueuePtr = wwo->lpLoopPtr = NULL;
+ wwo->state = WINE_WS_STOPPED;
+ wwo->dwPlayedTotal = wwo->dwWrittenTotal = 0;
+
+ wwo->dwPartialOffset = 0; /* Clear partial wavehdr */
+
+ pthread_mutex_unlock(&wwo->lock);
+
+ 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);
+ return MMSYSERR_ERROR; /* FIXME return an error based on the OSStatus */
+ }
+
+ return MMSYSERR_NOERROR;
}
/**************************************************************************
More information about the wine-cvs
mailing list