libcdio-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Libcdio-devel] CD-Text patches


From: Thomas Schmitt
Subject: Re: [Libcdio-devel] CD-Text patches
Date: Tue, 06 Dec 2011 13:47:34 +0100

Hi,

i am pleased to report a first success of libburn with writing of CD-TEXT:

  cdrskin dev=/dev/sr3 -v -sao textfile=cdtext.dat \
          -audio cdtext.bin cdtext.bin cdtext.bin

The documentation still lacks of explanations for the payload format
of the pack types which are mentioned in MMC-3 appendix J by
 "Packs with ID1=86h, 87h, 88h, 89h and 8Fh contains binary information
  in the Text Data Field."

Is there anything known about them ?

Totally obscure:
  0x86 = Disc Identification
  0x88 = Table of Content information
  0x89 = Second Table of Content information

I found some info in libcdio, but am still puzzled:
  0x87 = Genre Identification

This seems to be quite well explored in libcdio:
  0x8f = Size Information of the Block

How mandatory are they at all ?


I will next strive for creating a complete set of text packs from
user cleartext input.
Are there proposals for tests which i should do with the result ?

Currently i am digging in libcdio sources for information about CD-TEXT
entrails.

Some questions and remarks:
------------------------------------------------------------------------
In lib/driver/cdtext.c i see
  static const char cdtext_genre[][30] =
which is used in function
  cdtext_genre2str

But i cannot spot any usage of this function.
Is the index number in cdtext_genre[] related to the binary data in
text pack type 0x87 ?
  34 : 87 00 22 00 00 1b  A  n  i  m  a  l     S  o  u ed 40
  35 : 87 00 23 0a 00 1b  n  d  z 00 00 00 00 00 00 00 b6 f1
would be index 27 "Spoken Word".

------------------------------------------------------------------------
lib/driver/cdtext_private.h has this very promising info about type 0x8f.

  extern const enum cdtext_charcode_enum_s

  extern const enum cdtext_lang_enum_s

  struct CDText_blocksize
  {
    uint8_t charcode;     /* character code */
    uint8_t i_first_track; /* first track number */
    uint8_t i_last_track;  /* last track number */
    uint8_t copyright;    /* cd-text information copyright byte */
    uint8_t i_packs[16];/* number of packs of each type 
                           * 0 TITLE; 1 PERFORMER; 2 SONGWRITER; 3 COMPOSER;
                           * 4 ARRANGER; 5 MESSAGE; 6 DISCID; 7 GENRE; 
                           * 8 TOC; 9 TOC2; 10-12 RESERVED; 13 CLOSED;
                           * 14 UPC_ISRC; 15 BLOCKSIZE */
    uint8_t lastseq[8];   /* last sequence for block 0..7 */
    uint8_t langcode[8];  /* language code for block 0..7 */
  } GNUC_PACKED;

But i still riddle over the copyright byte.
In cdtext.cdt it is 0.

------------------------------------------------------------------------

Can it be that this comment is wrong ?
lib/driver/cdtext.c:cdtext_data_init() has:

  if (p_blocksize.i_packs[15] >= 3) {
    /* if there were more than 3 BLOCKSIZE packs */

But actually the C code tests for at least 3 packs, not for more than 3.
Further i cannot see any handling of packs after the third one.

------------------------------------------------------------------------

lib/driver/cdtext_private.h has:

  /*!
   * The language code is encoded as specified in ANNEX 1 to part 5 of EBU
   * Tech 32 58 -E (1991).
   */

I failed to find a free copy of EBU Tech 3258.
But i found the language codes in http://tech.ebu.ch/docs/tech/tech3264.pdf
Appendix 3.
It states:
  "The codes are identical to those used in the systems of the MAC/packet
   family, and are reproduced from the EBU specification for these systems
  [3].
  [...]
  [3] Specification of the systems of the MAC/packet family
      EBU document Tech. 3258, 1986.
  "

------------------------------------------------------------------------


Have a nice day :)

Thomas




reply via email to

[Prev in Thread] Current Thread [Next in Thread]