Date: Sat, 24 Aug 2024 07:24:36 +0000 From: bugzilla-noreply@freebsd.org To: bugs@FreeBSD.org Subject: [Bug 281020] Cannot play sound tracks on mixed-mode CDs (read() fails with EINVAL) Message-ID: <bug-281020-227@https.bugs.freebsd.org/bugzilla/>
index | next in thread | raw e-mail
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=281020 Bug ID: 281020 Summary: Cannot play sound tracks on mixed-mode CDs (read() fails with EINVAL) Product: Base System Version: 14.1-RELEASE Hardware: Any OS: Any Status: New Severity: Affects Some People Priority: --- Component: kern Assignee: bugs@FreeBSD.org Reporter: damjan.jov@gmail.com On a mixed-mode CD (a CD with both data and sound tracks), it is not possible to play the sound tracks. The way that eg. multimedia/vlc reads sound from a CD involves: int fd = open("/dev/cd0", ...) int block_size = 2352; ioctl(fd, CDRIOCSETBLOCKSIZE, &block_size); lseek(fd, some multiple of 2352, SEEK_SET); read(fd, buffer, some multiple of 2352); and on a pure sound CD, this works perfectly, both in VLC and a test application I made. However when using that code on a mixed-mode CD (with both data and sound tracks), read() always fails with EINVAL, whether the offset is within a data track or a sound track. The only way to make read() succeed on such CDs, is to use a block size of 2048, and an offset that places the read within a data track. Attempting to read music tracks always fails with EINVAL, regardless of the block size. It will take me some time to confirm, but this may be a regression from commit dd78f43259efd551f76a6cb7744bce49c215863e, which was meant to "make the media check asynchronous", but also made many other changes, including setting a block size of 2352 for pure sound CDs (which could be why they still work, but mixed-mode CDs don't). -- You are receiving this mail because: You are the assignee for the bug.help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-281020-227>
