PATCH: Fixes some problems with the CD-ROM
Waldeck Schutzer
schutzer at math.rutgers.edu
Mon Jan 27 03:07:01 CST 2003
Hi,
This should fix some bizzare problems with the MCI access to the CD-ROM
which would often result in playing the wrong track or not playing at
all. Please note that the Windows cdplayer is still not working at this
time for not detecting any audible tracks.
Apparently the present problem was due to a wrong address formatting by
the cdrom driver's ReadTOC function, which is addressed by this patch.
Enjoy,
Waldeck
-------------- next part --------------
Index: wine/dlls/ntdll/cdrom.c
===================================================================
RCS file: /home/wine/wine/dlls/ntdll/cdrom.c,v
retrieving revision 1.24
diff -u -p -r1.24 cdrom.c
--- wine/dlls/ntdll/cdrom.c 23 Jan 2003 21:32:36 -0000 1.24
+++ wine/dlls/ntdll/cdrom.c 27 Jan 2003 08:58:25 -0000
@@ -482,10 +482,10 @@ static DWORD CDROM_ReadTOC(int dev, CDRO
toc->TrackData[i - toc->FirstTrack].Adr = entry.cdte_adr;
/* marking last track with leadout value as index */
toc->TrackData[i - toc->FirstTrack].TrackNumber = entry.cdte_track;
- toc->TrackData[i - toc->FirstTrack].Address[0] = 0;
- toc->TrackData[i - toc->FirstTrack].Address[1] = entry.cdte_addr.msf.minute;
- toc->TrackData[i - toc->FirstTrack].Address[2] = entry.cdte_addr.msf.second;
- toc->TrackData[i - toc->FirstTrack].Address[3] = entry.cdte_addr.msf.frame;
+ toc->TrackData[i - toc->FirstTrack].Address[3] = 0;
+ toc->TrackData[i - toc->FirstTrack].Address[0] = entry.cdte_addr.msf.minute;
+ toc->TrackData[i - toc->FirstTrack].Address[1] = entry.cdte_addr.msf.second;
+ toc->TrackData[i - toc->FirstTrack].Address[2] = entry.cdte_addr.msf.frame;
}
end:
ret = CDROM_GetStatusCode(io);
@@ -528,10 +528,10 @@ end:
toc->TrackData[i - toc->FirstTrack].Adr = toc_buffer.addr_type;
/* marking last track with leadout value as index */
toc->TrackData[i - toc->FirstTrack].TrackNumber = entry.starting_track;
- toc->TrackData[i - toc->FirstTrack].Address[0] = 0;
- toc->TrackData[i - toc->FirstTrack].Address[1] = toc_buffer.addr.msf.minute;
- toc->TrackData[i - toc->FirstTrack].Address[2] = toc_buffer.addr.msf.second;
- toc->TrackData[i - toc->FirstTrack].Address[3] = toc_buffer.addr.msf.frame;
+ toc->TrackData[i - toc->FirstTrack].Address[3] = 0;
+ toc->TrackData[i - toc->FirstTrack].Address[0] = toc_buffer.addr.msf.minute;
+ toc->TrackData[i - toc->FirstTrack].Address[1] = toc_buffer.addr.msf.second;
+ toc->TrackData[i - toc->FirstTrack].Address[2] = toc_buffer.addr.msf.frame;
}
end:
ret = CDROM_GetStatusCode(io);
@@ -555,7 +555,7 @@ static DWORD CDROM_GetDiskData(int dev,
if ((ret = CDROM_ReadTOC(dev, &toc)) != 0) return ret;
data->DiskData = 0;
for (i = toc.FirstTrack; i <= toc.LastTrack; i++) {
- if (toc.TrackData[i].Control & 0x04)
+ if (toc.TrackData[i-toc.FirstTrack].Control & 0x04)
data->DiskData |= CDROM_DISK_DATA_TRACK;
else
data->DiskData |= CDROM_DISK_AUDIO_TRACK;
More information about the wine-patches
mailing list