Jörg Höhle : mciavi: Simplify play loop.
Alexandre Julliard
julliard at winehq.org
Tue Dec 1 09:19:45 CST 2009
Module: wine
Branch: master
Commit: f47ea4681f0cb2b0b5957d3432f732d7b35a9ebe
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f47ea4681f0cb2b0b5957d3432f732d7b35a9ebe
Author: Jörg Höhle <hoehle at users.sourceforge.net>
Date: Sun Nov 22 15:38:26 2009 +0100
mciavi: Simplify play loop.
---
dlls/mciavi32/mciavi.c | 35 ++++++++++++++---------------------
1 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/dlls/mciavi32/mciavi.c b/dlls/mciavi32/mciavi.c
index d268ee7..8613bff 100644
--- a/dlls/mciavi32/mciavi.c
+++ b/dlls/mciavi32/mciavi.c
@@ -387,13 +387,13 @@ static DWORD MCIAVI_mciPlay_async(WINE_MCIAVI *wma, DWORD dwFlags, LPMCI_PLAY_PA
static DWORD MCIAVI_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
{
WINE_MCIAVI *wma;
- DWORD tc;
DWORD frameTime;
- DWORD delta;
DWORD dwRet;
LPWAVEHDR waveHdr = NULL;
unsigned i, nHdr = 0;
DWORD dwFromFrame, dwToFrame;
+ DWORD numEvents = 1;
+ HANDLE events[2];
TRACE("(%04x, %08X, %p)\n", wDevID, dwFlags, lpParms);
@@ -467,6 +467,7 @@ static DWORD MCIAVI_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms
/* time is in microseconds, we should convert it to milliseconds */
frameTime = (wma->mah.dwMicroSecPerFrame + 500) / 1000;
+ events[0] = wma->hStopEvent;
if (wma->lpWaveFormat) {
if (MCIAVI_OpenAudio(wma, &nHdr, &waveHdr) != 0)
{
@@ -474,14 +475,19 @@ static DWORD MCIAVI_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms
HeapFree(GetProcessHeap(), 0, wma->lpWaveFormat);
wma->lpWaveFormat = NULL;
}
- else
- /* fill the queue with as many wave headers as possible */
- MCIAVI_PlayAudioBlocks(wma, nHdr, waveHdr);
+ else
+ {
+ /* fill the queue with as many wave headers as possible */
+ MCIAVI_PlayAudioBlocks(wma, nHdr, waveHdr);
+ events[1] = wma->hEvent;
+ numEvents = 2;
+ }
}
while (wma->dwStatus == MCI_MODE_PLAY)
{
HDC hDC;
+ DWORD tc, delta;
DWORD ret;
tc = GetTickCount();
@@ -493,21 +499,8 @@ static DWORD MCIAVI_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms
ReleaseDC(wma->hWndPaint, hDC);
}
- if (wma->lpWaveFormat) {
- HANDLE events[2];
-
- events[0] = wma->hStopEvent;
- events[1] = wma->hEvent;
-
+ if (wma->lpWaveFormat)
MCIAVI_PlayAudioBlocks(wma, nHdr, waveHdr);
- delta = GetTickCount() - tc;
-
- LeaveCriticalSection(&wma->cs);
- ret = WaitForMultipleObjects(2, events, FALSE, (delta >= frameTime) ? 0 : frameTime - delta);
- EnterCriticalSection(&wma->cs);
-
- if (ret == WAIT_OBJECT_0 || wma->dwStatus != MCI_MODE_PLAY) break;
- }
delta = GetTickCount() - tc;
if (delta < frameTime)
@@ -516,9 +509,9 @@ static DWORD MCIAVI_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms
delta = 0;
LeaveCriticalSection(&wma->cs);
- ret = WaitForMultipleObjects(1, &wma->hStopEvent, FALSE, delta);
+ ret = WaitForMultipleObjects(numEvents, events, FALSE, delta);
EnterCriticalSection(&wma->cs);
- if (ret == WAIT_OBJECT_0) break;
+ if (ret == WAIT_OBJECT_0 || wma->dwStatus != MCI_MODE_PLAY) break;
if (wma->dwCurrVideoFrame < dwToFrame)
wma->dwCurrVideoFrame++;
More information about the wine-cvs
mailing list