=?UTF-8?Q?J=C3=B6rg=20H=C3=B6hle=20?=: mciseq: Separate player loop from MCI_PLAY command.

Alexandre Julliard julliard at winehq.org
Mon Oct 8 13:39:57 CDT 2012


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

Author: Jörg Höhle <Joerg-Cyril.Hoehle at t-systems.com>
Date:   Thu Oct  4 12:02:35 2012 +0200

mciseq: Separate player loop from MCI_PLAY command.

---

 dlls/mciseq/mcimidi.c |   97 +++++++++++++++++++++++++++----------------------
 1 files changed, 53 insertions(+), 44 deletions(-)

diff --git a/dlls/mciseq/mcimidi.c b/dlls/mciseq/mcimidi.c
index 066820d..86ce66c 100644
--- a/dlls/mciseq/mcimidi.c
+++ b/dlls/mciseq/mcimidi.c
@@ -903,55 +903,15 @@ static MCI_MIDITRACK*	MIDI_mciFindNextEvent(WINE_MCIMIDI* wmm, LPDWORD hiPulse)
 }
 
 /**************************************************************************
- * 				MIDI_mciPlay			[internal]
+ * 				MIDI_player			[internal]
  */
-static DWORD MIDI_mciPlay(WINE_MCIMIDI* wmm, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
+static DWORD MIDI_player(WINE_MCIMIDI* wmm, DWORD dwStartMS, DWORD dwEndMS, DWORD dwFlags)
 {
-    DWORD		dwStartMS, dwEndMS;
-    DWORD		dwRet = 0;
+    DWORD		dwRet;
     WORD		doPlay, nt;
     MCI_MIDITRACK*	mmt;
     DWORD		hiPulse;
-    HANDLE		oldcb;
-
-    TRACE("(%d, %08X, %p);\n", wmm->wDevID, dwFlags, lpParms);
-
-    if (wmm->hFile == 0) {
-	WARN("Can't play: no file %s!\n", debugstr_w(wmm->lpstrElementName));
-	return MCIERR_FILE_NOT_FOUND;
-    }
-
-    if (wmm->dwStatus != MCI_MODE_STOP) {
-	if (wmm->dwStatus == MCI_MODE_PAUSE) {
-	    /* FIXME: parameters (start/end) in lpParams may not be used */
-	    return MIDI_mciResume(wmm, dwFlags, (LPMCI_GENERIC_PARMS)lpParms);
-	}
-	WARN("Can't play: device is not stopped !\n");
-	return MCIERR_INTERNAL;
-    }
-
-    if (!(dwFlags & MCI_WAIT)) {
-	return MCI_SendCommandAsync(wmm->wDevID, MCI_PLAY, dwFlags, (DWORD_PTR)lpParms, sizeof(MCI_PLAY_PARMS));
-    }
-
-    if (lpParms && (dwFlags & MCI_FROM)) {
-	dwStartMS = MIDI_ConvertTimeFormatToMS(wmm, lpParms->dwFrom);
-    } else {
-	dwStartMS = wmm->dwPositionMS;
-    }
-
-    if (lpParms && (dwFlags & MCI_TO)) {
-	dwEndMS = MIDI_ConvertTimeFormatToMS(wmm, lpParms->dwTo);
-    } else {
-	dwEndMS = 0xFFFFFFFFul;
-    }
-
-    TRACE("Playing from %u to %u\n", dwStartMS, dwEndMS);
-
-    oldcb = InterlockedExchangePointer(&wmm->hCallback,
-	(dwFlags & MCI_NOTIFY) ? HWND_32(LOWORD(lpParms->dwCallback)) : NULL);
-    if (oldcb) mciDriverNotify(oldcb, wmm->wDevID, MCI_NOTIFY_ABORTED);
-    oldcb = NULL;
+    HANDLE		oldcb = NULL;
 
     /* init tracks */
     for (nt = 0; nt < wmm->nTracks; nt++) {
@@ -1183,6 +1143,55 @@ static DWORD MIDI_mciPlay(WINE_MCIMIDI* wmm, DWORD dwFlags, LPMCI_PLAY_PARMS lpP
 }
 
 /**************************************************************************
+ * 				MIDI_mciPlay			[internal]
+ */
+static DWORD MIDI_mciPlay(WINE_MCIMIDI* wmm, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
+{
+    DWORD		dwStartMS, dwEndMS;
+    HANDLE		oldcb;
+
+    TRACE("(%d, %08X, %p);\n", wmm->wDevID, dwFlags, lpParms);
+
+    if (wmm->hFile == 0) {
+	WARN("Can't play: no file %s!\n", debugstr_w(wmm->lpstrElementName));
+	return MCIERR_FILE_NOT_FOUND;
+    }
+
+    if (wmm->dwStatus != MCI_MODE_STOP) {
+	if (wmm->dwStatus == MCI_MODE_PAUSE) {
+	    /* FIXME: parameters (start/end) in lpParams may not be used */
+	    return MIDI_mciResume(wmm, dwFlags, (LPMCI_GENERIC_PARMS)lpParms);
+	}
+	WARN("Can't play: device is not stopped !\n");
+	return MCIERR_INTERNAL;
+    }
+
+    if (!(dwFlags & MCI_WAIT)) {
+	return MCI_SendCommandAsync(wmm->wDevID, MCI_PLAY, dwFlags, (DWORD_PTR)lpParms, sizeof(MCI_PLAY_PARMS));
+    }
+
+    if (lpParms && (dwFlags & MCI_FROM)) {
+	dwStartMS = MIDI_ConvertTimeFormatToMS(wmm, lpParms->dwFrom);
+    } else {
+	dwStartMS = wmm->dwPositionMS;
+    }
+
+    if (lpParms && (dwFlags & MCI_TO)) {
+	dwEndMS = MIDI_ConvertTimeFormatToMS(wmm, lpParms->dwTo);
+    } else {
+	dwEndMS = 0xFFFFFFFFul;
+    }
+
+    TRACE("Playing from %u to %u\n", dwStartMS, dwEndMS);
+
+    oldcb = InterlockedExchangePointer(&wmm->hCallback,
+	(dwFlags & MCI_NOTIFY) ? HWND_32(LOWORD(lpParms->dwCallback)) : NULL);
+    if (oldcb) mciDriverNotify(oldcb, wmm->wDevID, MCI_NOTIFY_ABORTED);
+
+    return MIDI_player(wmm, dwStartMS, dwEndMS, dwFlags);
+}
+
+/**************************************************************************
  * 				MIDI_mciPause			[internal]
  */
 static DWORD MIDI_mciPause(WINE_MCIMIDI* wmm, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)




More information about the wine-cvs mailing list