|
libcdio-paranoia
10.2+0.90
|
00001 /* 00002 Copyright (C) 2004, 2005, 2006, 2008, 2011, 2012 00003 Rocky Bernstein <rocky@gnu.org> 00004 Copyright (C) 2001 Xiph.org and Heiko Eissfeldt heiko@escape.colossus.de 00005 CopyPolicy: GNU Lesser General Public License 2.1 applies 00006 */ 00007 00015 #ifndef CDIO__PARANOIA__CDDA_H_ 00016 #define CDIO__PARANOIA__CDDA_H_ 00017 00018 #include <cdio/cdio.h> 00019 00020 #ifdef __cplusplus 00021 extern "C" { 00022 #endif /* __cplusplus */ 00023 00027 typedef struct cdrom_paranoia_s cdrom_paranoia_t; 00028 typedef struct cdrom_drive_s cdrom_drive_t; 00029 00041 typedef enum { 00042 CDDA_MESSAGE_FORGETIT = 0, 00043 CDDA_MESSAGE_PRINTIT = 1, 00044 CDDA_MESSAGE_LOGIT = 2, 00045 CD_FRAMESAMPLES = CDIO_CD_FRAMESIZE_RAW / 4, 00046 MAXTRK = (CDIO_CD_MAX_TRACKS+1) 00047 } paranoia_cdda_enums_t; 00048 00049 00050 #include <signal.h> 00051 00055 #define MAXTRK (CDIO_CD_MAX_TRACKS+1) 00056 00058 typedef struct TOC_s { 00059 unsigned char bTrack; 00060 int32_t dwStartSector; 00061 } TOC_t; 00062 00064 #define TOC TOC_t 00065 00067 struct cdrom_drive_s { 00068 00069 CdIo_t *p_cdio; 00070 int opened; 00072 char *cdda_device_name; 00073 00074 char *drive_model; 00075 int drive_type; 00076 int bigendianp; 00080 int nsectors; 00084 int cd_extra; 00090 bool b_swap_bytes; 00093 track_t tracks; 00094 TOC_t disc_toc[MAXTRK]; 00099 lsn_t audio_first_sector; 00100 lsn_t audio_last_sector; 00101 00102 int errordest; 00103 int messagedest; 00104 char *errorbuf; 00105 char *messagebuf; 00106 00107 /* functions specific to particular drives/interfaces */ 00108 00109 int (*enable_cdda) (cdrom_drive_t *d, int onoff); 00110 int (*read_toc) (cdrom_drive_t *d); 00111 long (*read_audio) (cdrom_drive_t *d, void *p, lsn_t begin, 00112 long sectors); 00113 int (*set_speed) (cdrom_drive_t *d, int speed); 00114 int error_retry; 00115 int report_all; 00116 00117 int is_atapi; 00118 int is_mmc; 00119 00120 int i_test_flags; 00125 }; 00126 00127 00136 typedef enum { 00137 CDDA_TEST_JITTER_SMALL = 1, 00138 CDDA_TEST_JITTER_LARGE = 2, 00139 CDDA_TEST_JITTER_MASSIVE = 3, 00140 CDDA_TEST_FRAG_SMALL = (1<<3), 00141 CDDA_TEST_FRAG_LARGE = (2<<3), 00142 CDDA_TEST_FRAG_MASSIVE = (3<<3), 00143 CDDA_TEST_UNDERRUN = 64 00144 } paranoia_jitter_t; 00145 00155 #define CDDA_TEST_ALWAYS_JITTER 4 00156 00158 #define CDDA_TEST_FRAG_SMALL (1<<3) 00159 #define CDDA_TEST_FRAG_LARGE (2<<3) 00160 #define CDDA_TEST_FRAG_MASSIVE (3<<3) 00161 00163 #define CDDA_TEST_UNDERRUN 64 00164 00165 #if TESTING_IS_FINISHED 00166 00168 #define CDDA_TEST_SCRATCH 128 00169 #undef CDDA_TEST_BOGUS_BYTES 256 00170 #undef CDDA_TEST_DROPDUPE_BYTES 512 00171 #endif /* TESTING_IS_FINISHED */ 00172 00179 extern cdrom_drive_t *cdio_cddap_find_a_cdrom(int messagedest, 00180 char **ppsz_message); 00181 00186 extern cdrom_drive_t *cdio_cddap_identify(const char *psz_device, 00187 int messagedest, 00188 char **ppsz_message); 00189 00196 cdrom_drive_t *cdio_cddap_identify_cdio(CdIo_t *p_cdio, 00197 int messagedest, char **ppsz_messages); 00198 00201 extern int cdio_cddap_speed_set(cdrom_drive_t *d, int speed); 00202 extern void cdio_cddap_verbose_set(cdrom_drive_t *d, int err_action, 00203 int mes_action); 00204 extern char *cdio_cddap_messages(cdrom_drive_t *d); 00205 extern char *cdio_cddap_errors(cdrom_drive_t *d); 00206 00217 bool cdio_cddap_close_no_free_cdio(cdrom_drive_t *d); 00218 00229 extern int cdio_cddap_close(cdrom_drive_t *d); 00230 00231 extern int cdio_cddap_open(cdrom_drive_t *d); 00232 00233 extern long cdio_cddap_read(cdrom_drive_t *d, void *p_buffer, 00234 lsn_t beginsector, long sectors); 00235 00237 extern lsn_t cdio_cddap_track_firstsector(cdrom_drive_t *d, 00238 track_t i_track); 00239 00242 extern lsn_t cdio_cddap_track_lastsector(cdrom_drive_t *d, track_t i_track); 00243 00245 extern track_t cdio_cddap_tracks(cdrom_drive_t *d); 00246 00252 extern int cdio_cddap_sector_gettrack(cdrom_drive_t *d, lsn_t lsn); 00253 00258 extern int cdio_cddap_track_channels(cdrom_drive_t *d, track_t i_track); 00259 00261 extern int cdio_cddap_track_audiop(cdrom_drive_t *d, track_t i_track); 00262 00264 extern int cdio_cddap_track_copyp(cdrom_drive_t *d, track_t i_track); 00265 00269 extern int cdio_cddap_track_preemp(cdrom_drive_t *d, track_t i_track); 00270 00272 extern lsn_t cdio_cddap_disc_firstsector(cdrom_drive_t *d); 00273 00277 extern lsn_t cdio_cddap_disc_lastsector(cdrom_drive_t *d); 00278 00293 extern int data_bigendianp(cdrom_drive_t *d); 00294 00297 typedef enum { 00298 TR_OK = 0, 00299 TR_EWRITE = 1 , 00300 TR_EREAD = 2 , 00301 TR_UNDERRUN = 3 , 00302 TR_OVERRUN = 4 , 00303 TR_ILLEGAL = 5 , 00304 TR_MEDIUM = 6 , 00305 TR_BUSY = 7 , 00306 TR_NOTREADY = 8 , 00307 TR_FAULT = 9 , 00308 TR_UNKNOWN = 10 , 00309 TR_STREAMING = 11 , 00310 } transport_error_t; 00311 00312 00313 #ifdef NEED_STRERROR_TR 00314 const char *strerror_tr[]={ 00315 "Success", 00316 "Error writing packet command to device", 00317 "Error reading command from device", 00318 "SCSI packet data underrun (too little data)", 00319 "SCSI packet data overrun (too much data)", 00320 "Illegal SCSI request (rejected by target)", 00321 "Medium reading data from medium", 00322 "Device busy", 00323 "Device not ready", 00324 "Target hardware fault", 00325 "Unspecified error", 00326 "Drive lost streaming" 00327 }; 00328 #endif /*NEED_STERROR_TR*/ 00329 00359 #ifndef DO_NOT_WANT_PARANOIA_COMPATIBILITY 00360 00361 #define cdda_find_a_cdrom cdio_cddap_find_a_cdrom 00362 #define cdda_identify cdio_cddap_identify 00363 #define cdda_speed_set cdio_cddap_speed_set 00364 #define cdda_verbose_set cdio_cddap_verbose_set 00365 #define cdda_messages cdio_cddap_messages 00366 #define cdda_errors cdio_cddap_errors 00367 #define cdda_close cdio_cddap_close 00368 #define cdda_open cdio_cddap_open 00369 #define cdda_read cdio_cddap_read 00370 #define cdda_track_firstsector cdio_cddap_track_firstsector 00371 #define cdda_track_lastsector cdio_cddap_track_lastsector 00372 #define cdda_tracks cdio_cddap_tracks 00373 #define cdda_sector_gettrack cdio_cddap_sector_gettrack 00374 #define cdda_track_channels cdio_cddap_track_channels 00375 #define cdda_track_audiop cdio_cddap_track_audiop 00376 #define cdda_track_copyp cdio_cddap_track_copyp 00377 #define cdda_track_preemp cdio_cddap_track_preemp 00378 #define cdda_disc_firstsector cdio_cddap_disc_firstsector 00379 #define cdda_disc_lastsector cdio_cddap_disc_lastsector 00380 #define cdrom_drive cdrom_drive_t 00381 00382 #endif /*DO_NOT_WANT_PARANOIA_COMPATIBILITY*/ 00383 00384 #ifdef __cplusplus 00385 } 00386 #endif /* __cplusplus */ 00387 00394 extern paranoia_jitter_t debug_paranoia_jitter; 00395 extern paranoia_cdda_enums_t debug_paranoia_cdda_enums; 00396 00397 #endif /*CDIO__PARANOIA__CDDA_H_*/ 00398
1.7.6.1