Module: wine Branch: master Commit: 234558c2c7bcc815c43791acf6fdf4ad7262376d URL: http://source.winehq.org/git/wine.git/?a=commit;h=234558c2c7bcc815c43791acf6...
Author: Ken Thomases ken@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++) {