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: Wed, 07 Dec 2011 13:19:13 +0100

Hi,

> > http://tech.ebu.ch/docs/tech/tech3264.pdf Appendix 3
> Those two-character language codes have nothing to do with the
> CDTEXT spec.

On the risk to appear stubborn: the list has single character codes.
E.g. 0x08 = German, 0x09 = English, 0x56 = Russian, 0x75 = Chinese.
So it cannot be totally unrelated to the CDIO_CDTEXT_LANG_ macros of
libcdio.


> The spec is pretty specific about that. Some fields (DISC ID) only accept
> plain ASCII, some (ISRC, GENRE INFORMATION) must accept ISO 8859-1.

Is that spec public ?


> Be aware that the spec requires you to set a field for every track, if you
> specify it for one.

Yes. This is already written in my cookbook.
I will have to fill in default values if a track lacks of a pack
for a combination of block and pack type in the overall session.

The libburn model for now looks like this:

   burn_session --- 1:1 --- burn_cd_text[8]
       |                    unsigned char character_code
       |                    unsigned char copyright
      1:n                   unsigned char language[8]
       |
       |
   burn_track ----- 1:1 --- burn_cd_text[8]

   burn_cdtext consists of:
      unsigned char *payload[16];   /* one for each pack type 0x80 to 0x8f */
      int length[16];               /* one for each pack type */
      int flags;                    /* bit0-bit15= Double Byte bits */

This is simple but a bit wasteful. 100 tracks on 64-bit Linux occupy
20 kB of empty burn_cd_text objects. But on the other hand i do not
have to handle a dozen pack types by individual variable names.

The interpreter which converts above graph into a set of packs
will of course have to take into respect certain type peculiarities.
Finally it will generate 3 packs of type 0x8f.
(Hmm. I could reduce [16] to [15], actually.)

A pack type P for block B will be generated if the session has a non-NULL
pointer burn_cd_text[B] and if burn_cd_text[B]->payload[P] is not NULL.
If the pack type is track specific, then packs will be generated for
each single track, too.


Have a nice day :)

Thomas




reply via email to

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