README
上传用户:weiliju62
上传日期:2007-01-06
资源大小:619k
文件大小:4k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. This is a small description for the Reed-Solomon library intended for
  2. CD sector formatting.
  3. Basics:
  4. It is assumed that you have a basic knowledge of cd sector formats.
  5. The library can handle three types of sector data:
  6.   data sectors,
  7.   audio sectors, and
  8.   sub channel r-w sectors
  9. Currently only encoding is implemented. Decoding and optionally
  10. error correction is planned for later.
  11. Stages:
  12. The process of sector formatting has several stages. Beginning with
  13. a data sector (2048, 2324, or 2336 bytes) a sector of 2352 bytes is
  14. built. This format can be read raw by SCSI MMC-2 and ATAPI drives and
  15. is accepted by cd burners. The additions are an optionally 32 bit CRC
  16. checksum and two layers of Reed-Solomon codes (called Reed-Solomon
  17. Product Code RSPC).
  18. This sector is then scrambled (exor'ed with a bitstream).
  19. The result is called F1 frames. Afterwards even and odd bytes are
  20. swapped, this is called F2 frames. The result is equivalent to an
  21. audio sector and is treated as such by the cd burner.
  22. So, if we wrote a series of sectors (F2 frames) into a CDR file and
  23. later burned them as 'audio', they would turn up as perfect data sectors.
  24. So, now we are at the level of audio sectors. Audio sectors get their
  25. own error correction data (called CIRC). Sector size goes up to 
  26. 3136 bytes (that is 4/3 times 2352 bytes). Furthermore different
  27. words get delayed differently and swap positions. The result is ready
  28. to be fed into the so-called EightFourteenModulator (when subchannels
  29. have been added).
  30. Now, only sub channels are missing. While the p and q sub
  31. channels have to be generated elsewhere, any supplied r-w subchannel
  32. user data is protected by two levels of error correction
  33. codes. This format is read by cd burners when burning cd+graphics.
  34. The cdimage is a sequence of sectors, each containing audio data and
  35. after that subchannel data.
  36. Similar to audio sectors delaying and permutation of words
  37. takes place. After that the cd burner would mix sub channel data with
  38. the formatted audio sectors to feed the EFModulator.
  39. NOTE: Most of the described stages need not to be done in order to
  40. prepare sectors for burning, since all cd burners do at least CIRC,
  41. delaying and swaps. For data sectors they also do scrambling and f2
  42. frame generation.
  43. Encoding routines:
  44. For data sectors
  45.  int do_encode_L2(unsigned char *inout, int sectortype, unsigned address);
  46.  encodes data sectors. The returned data is __unscrambled__ and not in
  47.  F2-frame format.
  48. Parameters are:
  49.   inout        pointer to an array of at least 2352 bytes.
  50.   sectortype   One of the MODE_* constants from ecc.h. This defines
  51.                how to format the sector.
  52.   address      The logical address to be used in the header 
  53.                (150 = 0:2.0 MSF).
  54. NOTE: the data portion has be to aligned properly for performance
  55. reasons (see ecc.h for details). So, no moves are necessary here.
  56. Generating f2 frames to be used like audio sectors
  57.  int scramble_L2(unsigned char *inout)
  58.  generates f2 frames in place from sectors generated by do_encode_L2().
  59. Parameters are:
  60.   inout        pointer to an array of at least 2352 bytes.
  61. For sub channels
  62.  int do_encode_sub(unsigned char in[LSUB_RAW*PACKETS_PER_SUBCHANNELFRAME],
  63. unsigned char out[(LSUB_RAW+LSUB_Q+LSUB_P)*
  64. PACKETS_PER_SUBCHANNELFRAME],
  65. int delay1, int permute);
  66.  repack user data and add error correction data. P and q subchannels
  67. should be added later, since all bytes are in place then.
  68. Parameters are:
  69.   in           pointer to an array of at least 72 bytes. It contains
  70.                the user data for one frame.
  71.   out          pointer to an array of at least 96 bytes. Here is
  72.                output frame is placed.
  73.   delay1       do low level delaying, when set to 1.
  74.   permute      do low level permutations, when set to 1.
  75. NOTE: Probably both options need either to be set on (1) or off (0) together.
  76. There is more, but that is seldomly used.
  77. Tests:
  78. The library is accompanied by small verify programs, that compare real
  79. raw sectors with the formatted results. They are also intended as demo
  80. applications (how to use the library). In order to be able to feed
  81. real raw sectors into them, the package read2448 is recommended/needed.
  82. You can only verify sector streams of one sector type, currently no mix.
  83. For more information have a look into ecc.h
  84. recommended Documents:
  85. Yellow Book or ISO 10149
  86. Appendix Red Book
  87. Red Book or IEC 908