Updated documentation of CD-TEXT pack types 0x87 and 0x8f

This commit is contained in:
Thomas Schmitt 2011-12-08 12:46:30 +00:00
parent 3ebb2babb1
commit cf05995c34

View File

@ -224,12 +224,8 @@ sync. libburn uses the info provided by 52h READ TRACK INFORMATION.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Guided by reading libburn/* 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/ 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, and by experiments with drives NEC ND-4570A, LG GSA-4082B, LITE-ON LTR48125S,
Optiarc BD RW BD-5300S, Optiarc BD RW BD-5300S,
which used in part code from http://icculus.org/burn.
For libburnia-project.org by Thomas Schmitt <scdbackup@gmx.net> For libburnia-project.org by Thomas Schmitt <scdbackup@gmx.net>
@ -410,9 +406,16 @@ Following are text packs of 18 bytes each.
(mmc5r03c.pdf 6.26.3.7.1 table 495) (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: 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 Each pack consists of a 4-bytes are header, 12 byte of payload, and 2 bytes
of CRC. 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." 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. The known information about the meaning of the pack payload is incomplete.
Pack types 0x80 to 0x85 and 0x8e contain 0-terminated cleartext. 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 Type 0x87 seems to contain 2 binary bytes and 10 bytes of 0-terminated
cleartext. 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.) Unclear yet: 0x88 = Table of Content information
The payload bytes of three packs form a 36 byte record.
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 : Byte :
0 : Character code: 0 : Character code:
0x00 = ISO-8859-1 0x00 = ISO-8859-1
@ -475,6 +530,7 @@ The payload bytes of three packs form a 36 byte record.
1 : Number of first track 1 : Number of first track
2 : Number of last track 2 : Number of last track
3 : libcdio source states: "cd-text information copyright byte" 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. 4 - 19 : Pack count of the various types 0x80 to 0x8f.
Byte number N tells the count of packs of type 0x80 + (N - 4). 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. 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 0x29 = Turkish
0x2a = Flemish 0x2a = Flemish
0x2b = Wallon 0x2b = Wallon
0x45 = Zuku 0x45 = Zulu
0x46 = Vietnamese 0x46 = Vietnamese
0x47 = Uzbek 0x47 = Uzbek
0x48 = Urdu 0x48 = Urdu
@ -571,7 +627,7 @@ The payload bytes of three packs form a 36 byte record.
0x72 = Fulani 0x72 = Fulani
0x73 = Dari 0x73 = Dari
0x74 = Churash 0x74 = Churash
0x75 = Chines 0x75 = Chinese
0x76 = Burmese 0x76 = Burmese
0x77 = Bulgarian 0x77 = Bulgarian
0x78 = Bengali 0x78 = Bengali
@ -581,7 +637,7 @@ The payload bytes of three packs form a 36 byte record.
0x7c = Assamese 0x7c = Assamese
0x7d = Armenian 0x7d = Armenian
0x7e = Arabic 0x7e = Arabic
0x7e = Amharic 0x7f = Amharic
E.g. these three packs E.g. these three packs
42 : 8f 00 2a 00 01 01 03 00 06 05 04 05 07 06 01 02 48 65 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 0 : 01 = ASCII 7-bit
1 : 01 = first track is 1 1 : 01 = first track is 1
2 : 03 = last track is 3 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 4 : 06 = 6 packs of type 0x80
5 : 05 = 5 packs of type 0x81 5 : 05 = 5 packs of type 0x81
6 : 04 = 4 packs of type 0x82 6 : 04 = 4 packs of type 0x82
@ -608,9 +664,9 @@ Byte :Value Meaning
19 : 03 = 3 packs of type 0x8f 19 : 03 = 3 packs of type 0x8f
20 : 2c = last sequence for block 0 20 : 2c = last sequence for block 0
This matches the sequence number of the last text pack (0x2c = 44) 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 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 : What is known about mixed mode sessions :