diff --git a/doc/cookbook.txt b/doc/cookbook.txt index 1d25dc0..acebbf9 100644 --- a/doc/cookbook.txt +++ b/doc/cookbook.txt @@ -222,14 +222,10 @@ sync. libburn uses the info provided by 52h READ TRACK INFORMATION. ------------------------------------------------------------------------------- SAO CD Cookbook ------------------------------------------------------------------------------- -Guided by reading libburn/* from http://icculus.org/burn -backed by reading mmc5r03c.pdf from http://www.t10.org/ftp/t10/drafts/mmc5/ -by reading mmc3r10g.pdf from http://www.t10.org/ftp/t10/drafts/mmc3/ -by reading source of libcdio from http://www.gnu.org/s/libcdio -by reading tech3264.pdf from http://tech.ebu.ch/docs/tech/ -and by experiments with drives NEC ND-4570A, LG GSA-4082B, LITE-ON LTR48125S, - Optiarc BD RW BD-5300S, -which used in part code from http://icculus.org/burn. +Guided by reading libburn/* from http://icculus.org/burn +backed by reading mmc5r03c.pdf from http://www.t10.org/ftp/t10/drafts/mmc5/ +and by experiments with drives NEC ND-4570A, LG GSA-4082B, LITE-ON LTR48125S, + Optiarc BD RW BD-5300S, For libburnia-project.org by Thomas Schmitt @@ -410,9 +406,16 @@ Following are text packs of 18 bytes each. (mmc5r03c.pdf 6.26.3.7.1 table 495) ------------------------------------------------------------------------------- +Guided by Leon Merten Lohse via libcdio-devel@gnu.org +by reading mmc3r10g.pdf from http://www.t10.org/ftp/t10/drafts/mmc3/ +by reading tech3264.pdf from http://tech.ebu.ch/docs/tech/ +by studying output of cdtext.zip from http://www.sonydadc.com/file/ +by reading source of libcdio from http://www.gnu.org/s/libcdio +which quotes source of cdrecord from ftp://ftp.berlios.de/pub/cdrecord/alpha + Format of CD-TEXT packs: -The format of a text pack is explained in (mmc3r10g.pdf, appendix J). +The format of a text pack is explained in (mmc3r10g.pdf, Annex J). Each pack consists of a 4-bytes are header, 12 byte of payload, and 2 bytes of CRC. @@ -455,15 +458,67 @@ The CRC algorithm uses divisor 0x11021 and is known as CRC-16-CCITT. MMC-3 says: "All bits shall be inverted." +The text packs are grouped in up to 8 blocks of at most 256 packs. Each block +is in charge for one language. Sequence numbers of each block are counted +separately. All packs of block 0 come before the packs of block 1. + +The limitation of block number and sequence numbers imply that there are at +most 2048 text packs possible. (READ TOC/PMS/ATIP could retrieve 3640 packs, +as it is limited to 64 kB - 2.) + + The known information about the meaning of the pack payload is incomplete. Pack types 0x80 to 0x85 and 0x8e contain 0-terminated cleartext. +Unclear yet: 0x86 = Disc Identification + Type 0x87 seems to contain 2 binary bytes and 10 bytes of 0-terminated cleartext. +The two binary bytes may or may not be repeated at the start of each pack. +They form a big-endian index to the following list (from libcdio source, which +learned it from cdrecord source, stating "Genre codes from Enhanced CD +Specification page 21"). + 0x0000 = "Not Used" + 0x0001 = "Not Defined" + 0x0002 = "Adult Contemporary" + 0x0003 = "Alternative Rock" + 0x0004 = "Childrens Music" + 0x0005 = "Classical" + 0x0006 = "Contemporary Christian" + 0x0007 = "Country" + 0x0008 = "Dance" + 0x0009 = "Easy Listening" + 0x000a = "Erotic" + 0x000b = "Folk" + 0x000c = "Gospel" + 0x000d = "Hip Hop" + 0x000e = "Jazz" + 0x000f = "Latin" + 0x0010 = "Musical" + 0x0011 = "New Age" + 0x0012 = "Opera" + 0x0013 = "Operetta" + 0x0014 = "Pop Music" + 0x0015 = "Rap" + 0x0016 = "Reggae" + 0x0017 = "Rock Music" + 0x0018 = "Rhythm & Blues" + 0x0019 = "Sound Effects" + 0x001a = "Spoken Word" + 0x001b = "World Music" +The meaning of the cleartext part is yet unclear. Probably it shall give +a more specific description of the genre. -Type 0x8f summarizes the whole list of text packs. (Learned from libcdio.) -The payload bytes of three packs form a 36 byte record. +Unclear yet: 0x88 = Table of Content information + +Unclear yet: 0x89 = Second Table of Content information + +Type 0x8f summarizes the whole list of text packs of a block. +So there is one group of three 0x8f packs per block. +Nevertheless each 0x8f group tells the highest sequence number and the +language code of all blocks. +The payload bytes of three 0x8f packs form a 36 byte record. Byte : 0 : Character code: 0x00 = ISO-8859-1 @@ -475,6 +530,7 @@ The payload bytes of three packs form a 36 byte record. 1 : Number of first track 2 : Number of last track 3 : libcdio source states: "cd-text information copyright byte" + Probably 3 means "copyrighted", 0 means "not copyrighted". 4 - 19 : Pack count of the various types 0x80 to 0x8f. Byte number N tells the count of packs of type 0x80 + (N - 4). I.e. the first byte in this field of 16 counts packs of type 0x80. @@ -524,7 +580,7 @@ The payload bytes of three packs form a 36 byte record. 0x29 = Turkish 0x2a = Flemish 0x2b = Wallon - 0x45 = Zuku + 0x45 = Zulu 0x46 = Vietnamese 0x47 = Uzbek 0x48 = Urdu @@ -571,7 +627,7 @@ The payload bytes of three packs form a 36 byte record. 0x72 = Fulani 0x73 = Dari 0x74 = Churash - 0x75 = Chines + 0x75 = Chinese 0x76 = Burmese 0x77 = Bulgarian 0x78 = Bengali @@ -581,7 +637,7 @@ The payload bytes of three packs form a 36 byte record. 0x7c = Assamese 0x7d = Armenian 0x7e = Arabic - 0x7e = Amharic + 0x7f = Amharic E.g. these three packs 42 : 8f 00 2a 00 01 01 03 00 06 05 04 05 07 06 01 02 48 65 @@ -592,7 +648,7 @@ Byte :Value Meaning 0 : 01 = ASCII 7-bit 1 : 01 = first track is 1 2 : 03 = last track is 3 - 3 : 00 = copyright (>>> what does this mean ?) + 3 : 00 = copyright (0 = public domain, 3 = copyrighted ?) 4 : 06 = 6 packs of type 0x80 5 : 05 = 5 packs of type 0x81 6 : 04 = 4 packs of type 0x82 @@ -608,9 +664,9 @@ Byte :Value Meaning 19 : 03 = 3 packs of type 0x8f 20 : 2c = last sequence for block 0 This matches the sequence number of the last text pack (0x2c = 44) - 21 : 00 00 00 00 00 00 00 = last sequence for block 1..7 (none) + 21 : 00 00 00 00 00 00 00 = last sequence numbers for block 1..7 (none) 28 : 09 = language code for block 0: English - 29 : 00 00 00 00 00 00 00 = language code for block 1..7 (none) + 29 : 00 00 00 00 00 00 00 = language codes for block 1..7 (none) ---------------------------------------------------------------------------- What is known about mixed mode sessions :