From aad78b91f786d29906395ff2b5889c3e3db7db1e Mon Sep 17 00:00:00 2001 From: James Abbatiello Date: Wed, 27 Sep 2000 01:18:08 +0000 Subject: [PATCH] MCI_STATUS_LENGTH on Windows returns one frame less than the total track length for the last track on a CD. This also affects queries for the total length of the CD. --- dlls/winmm/mcicda/mcicda.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/dlls/winmm/mcicda/mcicda.c b/dlls/winmm/mcicda/mcicda.c index 6fc6597a2dd..fa39c0c4b27 100644 --- a/dlls/winmm/mcicda/mcicda.c +++ b/dlls/winmm/mcicda/mcicda.c @@ -440,8 +440,15 @@ static DWORD MCICDA_Status(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParm if (lpParms->dwTrack > wmcda->wcda.nTracks || lpParms->dwTrack == 0) return MCIERR_OUTOFRANGE; lpParms->dwReturn = wmcda->wcda.lpdwTrackLen[lpParms->dwTrack - 1]; + /* Windows returns one frame less than the total track length for the + last track on the CD. See CDDB HOWTO. Verified on Win95OSR2. */ + if (lpParms->dwTrack == wmcda->wcda.nTracks) + lpParms->dwReturn--; } else { - lpParms->dwReturn = wmcda->wcda.dwLastFrame; + /* Sum of the lengths of all of the tracks. Inherits the + 'off by one frame' behavior from the length of the last track. + See above comment. */ + lpParms->dwReturn = wmcda->wcda.dwLastFrame - wmcda->wcda.dwFirstFrame - 1; } lpParms->dwReturn = MCICDA_CalcTime(wmcda, (wmcda->dwTimeFormat == MCI_FORMAT_TMSF)