1 /* @(#)cdda2wav.h 1.9 15/10/19 Copyright 1998-2000,2015 Heiko Eissfeldt, Copyright 2004-2006 J. Schilling */ 2 /* 3 * Copyright (C) 1998-2000,2015 Heiko Eissfeldt 4 * Copyright (c) 2004-2006 J. Schilling 5 * 6 * prototypes from cdda2wav.c 7 */ 8 /* 9 * The contents of this file are subject to the terms of the 10 * Common Development and Distribution License, Version 1.0 only 11 * (the "License"). You may not use this file except in compliance 12 * with the License. 13 * 14 * See the file CDDL.Schily.txt in this distribution for details. 15 * A copy of the CDDL is also available via the Internet at 16 * http://www.opensource.org/licenses/cddl1.txt 17 * 18 * When distributing Covered Code, include this CDDL HEADER in each 19 * file and include the License file CDDL.Schily.txt from this distribution. 20 */ 21 #ifdef max 22 #undef max 23 #endif 24 #ifdef min 25 #undef min 26 #endif 27 #define max(a, b) ((a) > (b) ? (a) : (b)) 28 #define min(a, b) ((a) < (b) ? (a) : (b)) 29 30 31 /* verbose levels */ 32 #define SHOW_TOC 1 33 #define SHOW_SUMMARY 2 34 #define SHOW_INDICES 4 35 #define SHOW_MCN 8 36 #define SHOW_ISRC 16 37 #define SHOW_STARTPOSITIONS 32 38 #define SHOW_TITLES 64 39 #define SHOW_JUSTAUDIOTRACKS 128 40 #define SHOW_MAX 255 41 42 /* Endianess */ 43 #define GUESS (-2) 44 #define NONE (-1) 45 #define LITTLE 0 46 #define BIG 1 47 48 extern void FatalError __PR((int err, const char *szMessage, ...)); 49 extern void AnalyzeQchannel __PR((unsigned frame)); 50 extern long SamplesNeeded __PR((long amount, long undersampling)); 51 extern unsigned int get_current_track_writing __PR((void)); 52 53 #if defined(sun) && !defined(SVR4) 54 #define atexit(f) on_exit(f, 0) 55 #endif 56 57 #ifndef _LINUX_CDROM_H 58 #define _LINUX_CDROM_H 59 60 /* 61 * some fix numbers 62 */ 63 #define CD_MINS 74 /* max. minutes per CD, not really a limit */ 64 #define CD_SECS 60 /* seconds per minute */ 65 #define CD_FRAMES 75 /* frames per second */ 66 67 #define CD_SYNC_SIZE 12 /* 12 sync bytes per raw data frame, not transfered by the drive */ 68 #define CD_HEAD_SIZE 4 /* header (address) bytes per raw data frame */ 69 #define CD_SUBHEAD_SIZE 8 /* subheader bytes per raw XA data frame */ 70 #define CD_XA_HEAD (CD_HEAD_SIZE+CD_SUBHEAD_SIZE) /* "before data" part of raw XA frame */ 71 #define CD_XA_SYNC_HEAD (CD_SYNC_SIZE+CD_XA_HEAD) /* sync bytes + header of XA frame */ 72 73 #define CD_FRAMESIZE 2048 /* bytes per frame, "cooked" mode */ 74 #define CD_FRAMESIZE_RAW 2352 /* bytes per frame, "raw" mode */ 75 /* most drives don't deliver everything: */ 76 #define CD_FRAMESIZE_RAW1 (CD_FRAMESIZE_RAW-CD_SYNC_SIZE) /* 2340 */ 77 #define CD_FRAMESIZE_RAW0 (CD_FRAMESIZE_RAW-CD_SYNC_SIZE-CD_HEAD_SIZE) /* 2336 */ 78 /* Optics drive also has a 'read all' mode: */ 79 #define CD_FRAMESIZE_RAWER 2646 /* bytes per frame */ 80 81 #define CD_EDC_SIZE 4 /* bytes EDC per most raw data frame types */ 82 #define CD_ZERO_SIZE 8 /* bytes zero per yellow book mode 1 frame */ 83 #define CD_ECC_SIZE 276 /* bytes ECC per most raw data frame types */ 84 #define CD_XA_TAIL (CD_EDC_SIZE+CD_ECC_SIZE) /* "after data" part of raw XA frame */ 85 86 #define CD_FRAMESIZE_SUB 96 /* subchannel data "frame" size */ 87 #define CD_MSF_OFFSET 150 /* MSF numbering offset of first frame */ 88 89 #define CD_CHUNK_SIZE 24 /* lowest-level "data bytes piece" */ 90 #define CD_NUM_OF_CHUNKS 98 /* chunks per frame */ 91 92 #define CD_FRAMESIZE_XA CD_FRAMESIZE_RAW1 /* obsolete name */ 93 #define CD_BLOCK_OFFSET CD_MSF_OFFSET /* obsolete name */ 94 95 /* 96 * the raw frame layout: 97 * 98 * - audio (red): | audio_sample_bytes | 99 * | 2352 | 100 * 101 * - data (yellow, mode1): | sync - head - data - EDC - zero - ECC | 102 * | 12 - 4 - 2048 - 4 - 8 - 276 | 103 * 104 * - data (yellow, mode2): | sync - head - data | 105 * | 12 - 4 - 2336 | 106 * 107 * - XA data (green, mode2 form1): | sync - head - sub - data - EDC - ECC | 108 * | 12 - 4 - 8 - 2048 - 4 - 276 | 109 * 110 * - XA data (green, mode2 form2): | sync - head - sub - data - EDC | 111 * | 12 - 4 - 8 - 2324 - 4 | 112 */ 113 114 115 /* 116 * CD-ROM address types (cdrom_tocentry.cdte_format) 117 */ 118 #if !defined CDROM_LBA 119 #define CDROM_LBA 0x01 /* "logical block": first frame is #0 */ 120 #define CDROM_MSF 0x02 /* "minute-second-frame": binary, not bcd here! */ 121 #endif 122 /* 123 * bit to tell whether track is data or audio (cdrom_tocentry.cdte_ctrl) 124 */ 125 #define CDROM_DATA_TRACK 0x04 126 127 /* 128 * The leadout track is always 0xAA, regardless of # of tracks on disc 129 */ 130 #define CDROM_LEADOUT 0xAA 131 132 /* 133 * audio states (from SCSI-2, but seen with other drives, too) 134 */ 135 #define CDROM_AUDIO_INVALID 0x00 /* audio status not supported */ 136 #define CDROM_AUDIO_PLAY 0x11 /* audio play operation in progress */ 137 #define CDROM_AUDIO_PAUSED 0x12 /* audio play operation paused */ 138 #define CDROM_AUDIO_COMPLETED 0x13 /* audio play successfully completed */ 139 #define CDROM_AUDIO_ERROR 0x14 /* audio play stopped due to error */ 140 #define CDROM_AUDIO_NO_STATUS 0x15 /* no current audio status to return */ 141 142 #ifdef FIVETWELVE 143 #define CDROM_MODE1_SIZE 512 144 #else 145 #define CDROM_MODE1_SIZE 2048 146 #endif 147 148 #define CDROM_MODE2_SIZE 2336 149 150 #endif /* _LINUX_CDROM_H */ 151