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.

преди 19 години
преди 19 години
преди 18 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. /*
  2. * cd.h -- cd structure
  3. *
  4. * Copyright (C) 2004, 2005, 2006, 2007, 2013 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