http://bugs.winehq.org/show_bug.cgi?id=20323
--- Comment #4 from Jörg Höhle hoehle@users.sourceforge.net 2010-08-07 14:32:17 --- Created an attachment (id=30045) --> (http://bugs.winehq.org/attachment.cgi?id=30045) Log snippet around failing RAW_READ ioctl
As of 1.3.0, the situation improve quite a bit. Most of comment #3 is obsolete. I see a possibility to implement mcicda solely with READ_TOC and RAW_READ. However Wine is not quite there yet:
A. "open cdaudio alias c" fails in the MCI, see comment #0 I worked around this by explicitly setting the CD-ROM type in winecfg -- and leaving it open, because restarting Wine seems to reinitialise the type to "Automatic".
B. TOC missing a 2 seconds offset? On native and Linux, "status c position start" typically yields "00:02:00" On MacOS, it's 00:00:00. It appears that all status c position track <N> are 2 seconds less than on native and Linux (for the same disk). I can't find where I once read that a CD-ROM has to start with a 2 seconds offset.
C. RAW_READ fails here with an audio CD set c time format tmsf play c from 2 to 3 yields: cdrom:CDROM_DeviceIoControl 0x40 IOCTL_CDROM_RAW_READ 0x33e310 16 0x187658 91728 0x33de58 cdrom:CDROM_DeviceIoControl opening parent /dev/rdisk1 cdrom:CDROM_RawRead RAW_READ_INFO: DiskOffset=0,151994368 SectorCount=39 TrackMode=2 buffer=0x187658 len=91728 sz=0x33dd4c ntdll:FILE_GetNtStatus errno = 22 -- EINVAL RawRead is the topic of the present bug report.
For now, avoid command like seek c to start/end/xyz status c position status c current track as they use ioctl not supported on the Mac. I claim that those ioctl are not needed on the Mac (nor Linux) for mcicda because I could implement it as follows: - position initially returns position start from the TOC, then what's being played. - current track initially returns 1, then what's played. - seek does no IOCTL_SEEK and simply (performs a range check based on the TOC and) remembers the position for playing and the status command.
If RAW_READ would work, then all that would be left to do is a proper separation of the two CD playing modes that mcicda currently implements (which I'll write about in a new bug report): RAW_READ with dsound vs. IOCTL_CDROM_PLAY/PAUSE/STOP/RESUME/SEEK_AUDIO. Currently, the lack of separation causes the MCI commands to report inconsistent results (e.g. IOCTL SEEK and CURRENT_POSITION are independent from RAW_READ).