Jörg Höhle : mciwave: Abort the play loop in case of audio error.

Alexandre Julliard julliard at winehq.org
Fri Dec 4 09:11:28 CST 2009


Module: wine
Branch: master
Commit: ee3c8794eaab91fb3a453c394b131ea894cc6e0e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ee3c8794eaab91fb3a453c394b131ea894cc6e0e

Author: Jörg Höhle <hoehle at users.sourceforge.net>
Date:   Tue Nov 17 09:59:05 2009 +0100

mciwave: Abort the play loop in case of audio error.

---

 dlls/mciwave/mciwave.c |   14 ++++++++------
 1 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/dlls/mciwave/mciwave.c b/dlls/mciwave/mciwave.c
index 6d9b39e..456936c 100644
--- a/dlls/mciwave/mciwave.c
+++ b/dlls/mciwave/mciwave.c
@@ -876,14 +876,18 @@ static DWORD WAVE_mciPlay(MCIDEVICEID wDevID, DWORD_PTR dwFlags, DWORD_PTR pmt,
 	 */
 	waveHdr[whidx].dwBufferLength = count;
 	waveHdr[whidx].dwFlags &= ~WHDR_DONE;
-	TRACE("before WODM_WRITE lpWaveHdr=%p dwBufferLength=%u dwBytesRecorded=%u\n",
-	      &waveHdr[whidx], waveHdr[whidx].dwBufferLength,
-	      waveHdr[whidx].dwBytesRecorded);
+	TRACE("before WODM_WRITE lpWaveHdr=%p dwBufferLength=%u\n",
+	      &waveHdr[whidx], waveHdr[whidx].dwBufferLength);
 	dwRet = waveOutWrite(wmw->hWave, &waveHdr[whidx], sizeof(WAVEHDR));
+	if (dwRet) {
+	    ERR("Aborting play loop, WODM_WRITE error %d\n", dwRet);
+	    dwRet = MCIERR_HARDWARE;
+	    break;
+	}
 	left -= count;
 	wmw->dwPosition += count;
 	TRACE("after WODM_WRITE dwPosition=%u\n", wmw->dwPosition);
-
+	/* InterlockedDecrement if and only if waveOutWrite is successful */
 	WAVE_mciPlayWaitDone(wmw);
 	whidx ^= 1;
     }
@@ -896,8 +900,6 @@ static DWORD WAVE_mciPlay(MCIDEVICEID wDevID, DWORD_PTR dwFlags, DWORD_PTR pmt,
     waveOutUnprepareHeader(wmw->hWave, &waveHdr[0], sizeof(WAVEHDR));
     waveOutUnprepareHeader(wmw->hWave, &waveHdr[1], sizeof(WAVEHDR));
 
-    dwRet = 0;
-
 cleanUp:
     if (dwFlags & MCI_NOTIFY)
 	oldcb = InterlockedExchangePointer(&wmw->hCallback, NULL);




More information about the wine-cvs mailing list