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