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