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