=?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