You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

162 lines
3.6 KiB

  1. /*
  2. * cd.h -- cd structure
  3. *
  4. * Copyright (C) 2004 Svend Sorensen
  5. * For license terms, see the file COPYING in this distribution.
  6. */
  7. /* references: MMC-3 draft revsion - 10g */
  8. #ifndef CD_H
  9. #define CD_H
  10. #include "cdtext.h"
  11. #define MAXTRACK 99 /* Red Book track limit */
  12. #define MAXINDEX 99 /* Red Book index limit */
  13. /*
  14. * disc modes
  15. * DATA FORM OF MAIN DATA (5.29.2.8)
  16. */
  17. enum DiscMode {
  18. MODE_CD_DA, /* CD-DA */
  19. MODE_CD_ROM, /* CD-ROM mode 1 */
  20. MODE_CD_ROM_XA /* CD-ROM XA and CD-I */
  21. };
  22. /*
  23. * track modes
  24. * 5.29.2.8 DATA FORM OF MAIN DATA
  25. * Table 350 - Data Block Type Codes
  26. */
  27. enum TrackMode {
  28. MODE_AUDIO, /* 2352 byte block length */
  29. MODE_MODE1, /* 2048 byte block length */
  30. MODE_MODE1_RAW, /* 2352 byte block length */
  31. MODE_MODE2, /* 2336 byte block length */
  32. MODE_MODE2_FORM1, /* 2048 byte block length */
  33. MODE_MODE2_FORM2, /* 2324 byte block length */
  34. MODE_MODE2_FORM_MIX, /* 2332 byte block length */
  35. MODE_MODE2_RAW /* 2352 byte block length */
  36. };
  37. /*
  38. * sub-channel mode
  39. * 5.29.2.13 Data Form of Sub-channel
  40. * NOTE: not sure if this applies to cue files
  41. */
  42. enum TrackSubMode {
  43. SUB_MODE_RW, /* RAW Data */
  44. SUB_MODE_RW_RAW /* PACK DATA (written R-W */
  45. };
  46. /*
  47. * track flags
  48. * Q Sub-channel Control Field (4.2.3.3, 5.29.2.2)
  49. */
  50. enum TrackFlag {
  51. FLAG_NONE =0x00, /* no flags set */
  52. FLAG_PRE_EMPHASIS =0x01, /* audio recorded with pre-emphasis */
  53. FLAG_COPY_PERMITTED =0x02, /* digital copy permitted */
  54. FLAG_DATA =0x04, /* data track */
  55. FLAG_FOUR_CHANNEL =0x08, /* 4 audio channels */
  56. FLAG_SCMS =0x10, /* SCMS (not Q Sub-ch.) (5.29.2.7) */
  57. FLAG_ANY =0xff /* any flags set */
  58. };
  59. enum DataType {
  60. DATA_AUDIO,
  61. DATA_DATA,
  62. DATA_FIFO,
  63. DATA_ZERO
  64. };
  65. /* ADTs */
  66. typedef struct Cd Cd;
  67. typedef struct Track Track;
  68. /* return pointer to CD structure */
  69. Cd *cd_init ();
  70. /* dump all info from CD structure
  71. * in human readable format (for debugging)
  72. */
  73. void cd_dump (Cd *cd);
  74. /*
  75. * Cd functions
  76. */
  77. void cd_set_mode (Cd *cd, int mode);
  78. int cd_get_mode (Cd *cd);
  79. void cd_set_catalog (Cd *cd, char *catalog);
  80. char *cd_get_catalog (Cd *cd);
  81. /*
  82. * return pointer to cd's Cdtext
  83. */
  84. Cdtext *cd_get_cdtext (Cd *cd);
  85. /*
  86. * add a new track to cd, increment number of tracks
  87. * and return pointer to new track
  88. */
  89. Track *cd_add_track (Cd *cd);
  90. /*
  91. * return number of tracks in cd
  92. */
  93. int cd_get_ntrack (Cd *cd);
  94. Track *cd_get_track (Cd *cd, int i);
  95. /*
  96. * Track functions
  97. */
  98. /* filename of data file */
  99. void track_set_filename (Track *track, char *filename);
  100. char *track_get_filename (Track *track);
  101. /* track start is starting position in data file */
  102. void track_set_start (Track *track, long start);
  103. long track_get_start (Track *track);
  104. /* track length is length of data file to use */
  105. void track_set_length (Track *track, long length);
  106. long track_get_length (Track *track);
  107. /* see enum TrackMode */
  108. void track_set_mode (Track *track, int mode);
  109. int track_get_mode (Track *track);
  110. /* see enum TrackSubMode */
  111. void track_set_sub_mode (Track *track, int sub_mode);
  112. int track_get_sub_mode (Track *track);
  113. /* see enum TrackFlag */
  114. void track_set_flag (Track *track, int flag);
  115. void track_clear_flag (Track *track, int flag);
  116. int track_is_set_flag (Track *track, int flag);
  117. /* zero data pregap */
  118. void track_set_zero_pre (Track *track, long length);
  119. long track_get_zero_pre (Track *track);
  120. /* zero data postgap */
  121. void track_set_zero_post (Track *track, long length);
  122. long track_get_zero_post (Track *track);
  123. void track_set_isrc (Track *track, char *isrc);
  124. char *track_get_isrc (Track *track);
  125. Cdtext *track_get_cdtext (Track *track);
  126. void track_add_index (Track *track, long index);
  127. int track_get_nindex (Track *track);
  128. long track_get_index (Track *track, int i);
  129. #endif