Ken Thomases : winecoreaudio: Move a memset out of a mutex-guarded
section.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Dec 21 10:36:35 CST 2006
Module: wine
Branch: master
Commit: 234558c2c7bcc815c43791acf6fdf4ad7262376d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=234558c2c7bcc815c43791acf6fdf4ad7262376d
Author: Ken Thomases <ken at codeweavers.com>
Date: Thu Dec 21 03:50:09 2006 -0600
winecoreaudio: Move a memset out of a mutex-guarded section.
---
dlls/winmm/winecoreaudio/audio.c | 61 ++++++++++++++++++-------------------
1 files changed, 30 insertions(+), 31 deletions(-)
diff --git a/dlls/winmm/winecoreaudio/audio.c b/dlls/winmm/winecoreaudio/audio.c
index a28057d..e5b9e41 100644
--- a/dlls/winmm/winecoreaudio/audio.c
+++ b/dlls/winmm/winecoreaudio/audio.c
@@ -1365,47 +1365,46 @@ OSStatus CoreAudio_woAudioUnitIOProc(voi
pthread_mutex_lock(&wwo->lock);
- while (dataNeeded > 0)
+ while (dataNeeded > 0 && wwo->state == WINE_WS_PLAYING && wwo->lpPlayPtr)
{
- if (wwo->state == WINE_WS_PLAYING && wwo->lpPlayPtr)
- {
- unsigned int available = wwo->lpPlayPtr->dwBufferLength - wwo->dwPartialOffset;
- unsigned int toCopy;
-
- if (available >= dataNeeded)
- toCopy = dataNeeded;
- else
- toCopy = available;
+ unsigned int available = wwo->lpPlayPtr->dwBufferLength - wwo->dwPartialOffset;
+ unsigned int toCopy;
- if (toCopy > 0)
- {
- memcpy((char*)ioData->mBuffers[0].mData + dataProvided,
- wwo->lpPlayPtr->lpData + wwo->dwPartialOffset, toCopy);
- wwo->dwPartialOffset += toCopy;
- wwo->dwPlayedTotal += toCopy;
- dataProvided += toCopy;
- dataNeeded -= toCopy;
- available -= toCopy;
- }
+ if (available >= dataNeeded)
+ toCopy = dataNeeded;
+ else
+ toCopy = available;
- if (available == 0)
- {
- wodHelper_PlayPtrNext(wwo);
- needNotify = 1;
- }
+ if (toCopy > 0)
+ {
+ memcpy((char*)ioData->mBuffers[0].mData + dataProvided,
+ wwo->lpPlayPtr->lpData + wwo->dwPartialOffset, toCopy);
+ wwo->dwPartialOffset += toCopy;
+ wwo->dwPlayedTotal += toCopy;
+ dataProvided += toCopy;
+ dataNeeded -= toCopy;
+ available -= toCopy;
}
- else
+
+ if (available == 0)
{
- if (!dataProvided)
- *ioActionFlags |= kAudioUnitRenderAction_OutputIsSilence;
- memset((char*)ioData->mBuffers[0].mData + dataProvided, 0, dataNeeded);
- dataProvided += dataNeeded;
- dataNeeded = 0;
+ wodHelper_PlayPtrNext(wwo);
+ needNotify = 1;
}
}
pthread_mutex_unlock(&wwo->lock);
+ /* We can't provide any more wave data. Fill the rest with silence. */
+ if (dataNeeded > 0)
+ {
+ if (!dataProvided)
+ *ioActionFlags |= kAudioUnitRenderAction_OutputIsSilence;
+ memset((char*)ioData->mBuffers[0].mData + dataProvided, 0, dataNeeded);
+ dataProvided += dataNeeded;
+ dataNeeded = 0;
+ }
+
/* We only fill buffer 0. Set any others that might be requested to 0. */
for (buffer = 1; buffer < ioData->mNumberBuffers; buffer++)
{
More information about the wine-cvs
mailing list