1 
2 /* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
3    Copyright (c) 2006 - 2013 Thomas Schmitt <scdbackup@gmx.net>
4    Provided under GPL version 2 or later.
5 */
6 
7 #ifndef BURN__OPTIONS_H
8 #define BURN__OPTIONS_H
9 
10 #include "libburn.h"
11 
12 /** Options for disc writing operations. This should be created with
13     burn_write_opts_new() and freed with burn_write_opts_free(). */
14 struct burn_write_opts
15 {
16 	/** Drive the write opts are good for */
17 	struct burn_drive *drive;
18 
19 	/** For internal use. */
20 	int refcount;
21 
22 	/** The method/style of writing to use. */
23 	enum burn_write_types write_type;
24 	/** format of the data to send to the drive */
25 	enum burn_block_types block_type;
26 
27 	/** Number of toc entries.  if this is 0, they will be auto generated*/
28 	int toc_entries;
29 	/** Toc entries for the disc */
30 	struct burn_toc_entry *toc_entry;
31 
32 	/** Simulate the write so that the disc is not actually written */
33 	unsigned int simulate:1;
34 	/** If available, enable a drive feature which prevents buffer
35 	    underruns if not enough data is available to keep up with the
36 	    drive. */
37 	unsigned int underrun_proof:1;
38 	/** Perform calibration of the drive's laser before beginning the
39 	    write. */
40 	unsigned int perform_opc:1;
41 
42 	/* ts A61219 : Output block size to trigger buffer flush if hit.
43 			 -1 with CD, 32 kB with DVD */
44 	int obs;
45 	int obs_pad; /* >0 pad up last block to obs, 0 do not
46 	                2 indicates burn_write_opts_set_obs_pad(,1)
47 	             */
48 
49 	/* ts A61222 : Start address for media which offer a choice */
50 	off_t start_byte;
51 
52 	/* ts A70213 : Whether to fill up the available space on media */
53 	int fill_up_media;
54 
55 	/* ts A70303 : Whether to override conformance checks:
56 	   - the check whether CD write+block type is supported by the drive
57 	*/
58 	int force_is_set;
59 
60 	/* ts A80412 : whether to use WRITE12 with Streaming bit set
61 	   rather than WRITE10. Speeds up DVD-RAM. Might help with BD-RE.
62 	   This gets transferred to burn_drive.do_stream_recording
63 	*/
64 	int do_stream_recording;
65 
66 	/* ts A91115 : override value for .obs on DVD media.
67 	   Only values 0, 32K and 64K are allowed for now. */
68 	int dvd_obs_override;
69 
70 	/* ts A91115 : size of the fsync() interval for stdio writing.
71 	   Values 0 or >= 32 counted in 2 KB blocks. */
72 	int stdio_fsync_size;
73 
74 	/* ts B11203 : CD-TEXT */
75 	unsigned char *text_packs;
76 	int num_text_packs;
77 	int no_text_pack_crc_check;
78 
79 	/** A disc can have a media catalog number */
80 	int has_mediacatalog;
81 	unsigned char mediacatalog[13];
82 	/** Session format */
83 	int format;
84 
85 	/* internal use only */
86 	unsigned char control;
87 
88 	/* Whether to keep medium appendable */
89 	unsigned char multi;
90 
91 	/* ts B31024 */
92 	/* The severity to be attributed to error messages about failed
93 	   write attempt with blank DVD-RW, possibly due to falsely reported
94 	   feature 21h Incremental Streaming Writable
95 	*/
96 	int feat21h_fail_sev;
97 };
98 
99 /* Default value for burn_write_opts.stdio_flush_size
100 */
101 #define Libburn_stdio_fsync_limiT 8192
102 
103 /* Maximum number of Lead-in text packs.
104    READ TOC/PMA/ATIP can at most return 3640.7 packs.
105    The sequence counters of the packs have 8 bits. There are 8 blocks at most.
106    Thus max 2048 packs.
107  */
108 #define Libburn_leadin_cdtext_packs_maX 2048
109 
110 
111 /** Options for disc reading operations. This should be created with
112     burn_read_opts_new() and freed with burn_read_opts_free(). */
113 struct burn_read_opts
114 {
115 	/** Drive the read opts are good for */
116 	struct burn_drive *drive;
117 
118 	/** For internal use. */
119 	int refcount;
120 
121 	/** Read in raw mode, so that everything in the data tracks on the
122 	    disc is read, including headers. Not needed if just reading a
123 	    filesystem off a disc, but it should usually be used when making a
124 	    disc image or copying a disc. */
125 	unsigned int raw:1;
126 	/** Report c2 errors. Useful for statistics reporting */
127 	unsigned int c2errors:1;
128 	/** Read subcodes from audio tracks on the disc */
129 	unsigned int subcodes_audio:1;
130 	/** Read subcodes from data tracks on the disc */
131 	unsigned int subcodes_data:1;
132 	/** Have the drive recover errors if possible */
133 	unsigned int hardware_error_recovery:1;
134 	/** Report errors even when they were recovered from */
135 	unsigned int report_recovered_errors:1;
136 	/** Read blocks even when there are unrecoverable errors in them */
137 	unsigned int transfer_damaged_blocks:1;
138 
139 	/** The number of retries the hardware should make to correct
140 	    errors. */
141 	unsigned char hardware_error_retries;
142 
143 	/* ts B21119 */
144 	/* >>> Needs API access */
145 	/** Whether to set DAP bit which allows the drive to apply
146 	    "flaw obscuring mechanisms like audio data mute and interpolate"
147 	*/
148 	unsigned int dap_bit;
149 
150 };
151 
152 
153 int burn_write_opts_clone(struct burn_write_opts *from,
154                           struct burn_write_opts **to, int flag);
155 
156 
157 #endif /* BURN__OPTIONS_H */
158