New ioctl to support Enhanced CD (or Extra CD)

WATANABE Kazuhiro CQG00620 at nifty.ne.jp
Mon Apr 13 08:56:33 PDT 2009


Hi.

I've tested your patch, and found some problems.

(1) Cannot mount a data part.

capricorn# cdcontrol info
Starting track = 1, ending track = 12, TOC size = 106 bytes
track     start  duration   block  length   type
-------------------------------------------------
    1   0:02.00   6:18.00       0   28350  audio
    2   6:20.00   6:03.10   28350   27235  audio
    3  12:23.10   5:32.37   55585   24937  audio
    4  17:55.47   3:35.65   80522   16190  audio
    5  21:31.37   5:28.33   96712   24633  audio
    6  26:59.70   3:58.15  121345   17865  audio
    7  30:58.10   4:57.62  139210   22337  audio
    8  35:55.72   4:58.55  161547   22405  audio
    9  40:54.52   6:28.68  183952   29168  audio
   10  47:23.45   5:01.50  213120   22625  audio
   11  52:25.20   6:48.32  235745   30632  audio
   12  61:45.52   8:10.74  277777   36824   data
  170  69:56.51         -  314601       -      -
capricorn# mount_cd9660 /dev/acd0 /cdrom
mount_cd9660: /dev/acd0: Invalid argument
capricorn# 

(2) When I read the last audio track via /dev/acd0tXX, the output data
    has wrong length.

capricorn# dd if=/dev/acd0t10 bs=2352 > /dev/null
22625+0 records in
22625+0 records out			# correct length
53214000 bytes transferred in 19.750258 secs (2694345 bytes/sec)
capricorn# dd if=/dev/acd0t11 bs=2352 > /dev/null
dd: /dev/acd0t11: Input/output error
41883+0 records in
41883+0 records out			# wrong length (!= 30632)
98508816 bytes transferred in 35.804241 secs (2751317 bytes/sec)
capricorn# 

(3) When I play the last audio track with cdcontrol(1), the "next"
    command doesn't work (the drive stops playing).

capricorn# cdcontrol play 11
capricorn# cdcontrol status
Audio status = 17<playing>, current track = 11, current position = 0:13.68
No media catalog info available
Left volume = 255, right volume = 255
capricorn# cdcontrol next
acd0: FAILURE - PLAY_MSF ILLEGAL REQUEST asc=0x64 ascq=0x00
capricorn# cdcontrol status
Audio status = 0<invalid>, current track = 11, current position = 0:26.57
Media catalog is inactive
Left volume = 255, right volume = 255
capricorn# 

(These tests are done with Noriyuki Makihara's "Such a Lovely Place"
(Sony Records, 1997).)


By the way, I have an another patch that solves problems that you have
pointed out and described above.

 http://homepage2.nifty.com/dumb_show/unix/work/ata.releng71.diff
 http://homepage2.nifty.com/dumb_show/unix/work/cdcontrol.releng71.diff

I've tested the patch on FreeBSD 7.1-RELEASE and 8-current.

This patch is not my original.  The original patch was written by
Chiharu Shibata for FreeBSD 4.4-RELEASE.

 http://www32.ocn.ne.jp/~chi/myprog/FreeBSD/atapi-cd.html

One year later he rewrote the patch for FreeBSD 4.7-RELEASE.  It also
includes some quirks for old CD-ROM drives which are generally used
with NEC PC-98 series.

 http://home.jp.freebsd.org/cgi-bin/showmail/FreeBSD-users-jp/74432

I rewrote the latter patch for FreeBSD 5.x, 6.x, and 7.x.


At Thu, 09 Apr 2009 15:33:54 +0200,
Jean-S?bastien P?dron wrote:
> Hello,
> 
> Enhanced CD (or Extra CA) is an Audio CD with an additionnal data track
> at the end. Audio tracks belong to the first session while the data
> track belongs to the second session. Therefore the last audio track ends
> way before the data track start.
> 
> The first consequence is that the duration of the last audio track isn't
> reported correctly. Here is the output of cdcontrol(1) with such a CD[1]:
>     $ cdcontrol info
>     ...
>     12  46:03.67   9:54.43  207142   44593  audio
>     13  55:58.35   6:38.51  251735   29901   data
> 
> The expected output is:
>     $ cdcontrol info
>     ...
>     12  46:03.67   7:22.43  207142   33193  audio
>     13  55:58.35   6:38.51  251735   29901   data
> 
> A more "audible" consequence is that cdparanoia(1) copies 9'54" of data
> instead of 7'22". The end of the ripped file is full of garbage.
> 
> I made a patch (attached) that adds a new ioctl to query the start
> address of the last session. This new ioctl is named
> CDIOREADLASTSESSIONADDR. The patch also includes changes to cdcontrol(1).
> 
> I added a new member at the end of struct acd_softc to store the last
> session address. I don't know if this causes ABI breakage.
> 
> Linux' corresponding ioctl is CDROMMULTISESSION. Beside this address, it
> returns a flag named "xa_flag". Currently, I don't understand what it is
> but it may be useful to add it to our ioctl too if someone knows its
> purpose.
> 
> Before I spend some time to teach cdparanoia(1) about this new ioctl,
> I'd like some feedback on this patch, especially the name and the struct
> ioc_read_last_session_addr. I would appreciate some test reports too! :)
> 
> [1] This was tested with Avishai Cohen's last album, "Aurora".
> 
> --
> Jean-Sébastien Pédron
> http://www.dumbbell.fr/
(snip)
---
WATANABE Kazuhiro (CQG00620 at nifty.ne.jp)


More information about the freebsd-current mailing list