1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
2 /*
3  * Libbrasero-burn
4  * Copyright (C) Philippe Rouquier 2005-2009 <bonfire-app@wanadoo.fr>
5  *
6  * Libbrasero-burn is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * The Libbrasero-burn authors hereby grant permission for non-GPL compatible
12  * GStreamer plugins to be used and distributed together with GStreamer
13  * and Libbrasero-burn. This permission is above and beyond the permissions granted
14  * by the GPL license by which Libbrasero-burn is covered. If you modify this code
15  * you may extend this exception to your version of the code, but you are not
16  * obligated to do so. If you do not wish to do so, delete this exception
17  * statement from your version.
18  *
19  * Libbrasero-burn is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22  * GNU Library General Public License for more details.
23  *
24  * You should have received a copy of the GNU General Public License
25  * along with this program; if not, write to:
26  * 	The Free Software Foundation, Inc.,
27  * 	51 Franklin Street, Fifth Floor
28  * 	Boston, MA  02110-1301, USA.
29  */
30 
31 #ifndef _BURN_PLUGIN_H_REGISTRATION_
32 #define _BURN_PLUGIN_H_REGISTRATION_
33 
34 #include <glib.h>
35 
36 #include "brasero-medium.h"
37 
38 #include "brasero-enums.h"
39 #include "brasero-track.h"
40 #include "brasero-track-stream.h"
41 #include "brasero-track-data.h"
42 #include "brasero-plugin.h"
43 
44 G_BEGIN_DECLS
45 
46 #define BRASERO_PLUGIN_BURN_FLAG_MASK	(BRASERO_BURN_FLAG_DUMMY|		\
47 					 BRASERO_BURN_FLAG_MULTI|		\
48 					 BRASERO_BURN_FLAG_DAO|			\
49 					 BRASERO_BURN_FLAG_RAW|			\
50 					 BRASERO_BURN_FLAG_BURNPROOF|		\
51 					 BRASERO_BURN_FLAG_OVERBURN|		\
52 					 BRASERO_BURN_FLAG_NOGRACE|		\
53 					 BRASERO_BURN_FLAG_APPEND|		\
54 					 BRASERO_BURN_FLAG_MERGE)
55 
56 #define BRASERO_PLUGIN_IMAGE_FLAG_MASK	(BRASERO_BURN_FLAG_APPEND|		\
57 					 BRASERO_BURN_FLAG_MERGE)
58 
59 #define BRASERO_PLUGIN_BLANK_FLAG_MASK	(BRASERO_BURN_FLAG_NOGRACE|		\
60 					 BRASERO_BURN_FLAG_FAST_BLANK)
61 
62 /**
63  * These are the functions a plugin must implement
64  */
65 
66 GType brasero_plugin_register_caps (BraseroPlugin *plugin, gchar **error);
67 
68 void
69 brasero_plugin_define (BraseroPlugin *plugin,
70 		       const gchar *name,
71                        const gchar *display_name,
72 		       const gchar *description,
73 		       const gchar *author,
74 		       guint priority);
75 void
76 brasero_plugin_set_compulsory (BraseroPlugin *self,
77 			       gboolean compulsory);
78 
79 void
80 brasero_plugin_register_group (BraseroPlugin *plugin,
81 			       const gchar *name);
82 
83 typedef enum {
84 	BRASERO_PLUGIN_IO_NONE			= 0,
85 	BRASERO_PLUGIN_IO_ACCEPT_PIPE		= 1,
86 	BRASERO_PLUGIN_IO_ACCEPT_FILE		= 1 << 1,
87 } BraseroPluginIOFlag;
88 
89 GSList *
90 brasero_caps_image_new (BraseroPluginIOFlag flags,
91 			BraseroImageFormat format);
92 
93 GSList *
94 brasero_caps_audio_new (BraseroPluginIOFlag flags,
95 			BraseroStreamFormat format);
96 
97 GSList *
98 brasero_caps_data_new (BraseroImageFS fs_type);
99 
100 GSList *
101 brasero_caps_disc_new (BraseroMedia media);
102 
103 GSList *
104 brasero_caps_checksum_new (BraseroChecksumType checksum);
105 
106 void
107 brasero_plugin_link_caps (BraseroPlugin *plugin,
108 			  GSList *outputs,
109 			  GSList *inputs);
110 
111 void
112 brasero_plugin_blank_caps (BraseroPlugin *plugin,
113 			   GSList *caps);
114 
115 /**
116  * This function is important since not only does it set the flags but it also
117  * tells brasero which types of media are supported. So even if a plugin doesn't
118  * support any flag, use it to tell brasero which media are supported.
119  * That's only needed if the plugin supports burn/blank operations.
120  */
121 void
122 brasero_plugin_set_flags (BraseroPlugin *plugin,
123 			  BraseroMedia media,
124 			  BraseroBurnFlag supported,
125 			  BraseroBurnFlag compulsory);
126 void
127 brasero_plugin_set_blank_flags (BraseroPlugin *self,
128 				BraseroMedia media,
129 				BraseroBurnFlag supported,
130 				BraseroBurnFlag compulsory);
131 
132 void
133 brasero_plugin_process_caps (BraseroPlugin *plugin,
134 			     GSList *caps);
135 
136 void
137 brasero_plugin_set_process_flags (BraseroPlugin *plugin,
138 				  BraseroPluginProcessFlag flags);
139 
140 void
141 brasero_plugin_check_caps (BraseroPlugin *plugin,
142 			   BraseroChecksumType type,
143 			   GSList *caps);
144 
145 /**
146  * Plugin configure options
147  */
148 
149 BraseroPluginConfOption *
150 brasero_plugin_conf_option_new (const gchar *key,
151 				const gchar *description,
152 				BraseroPluginConfOptionType type);
153 
154 BraseroBurnResult
155 brasero_plugin_add_conf_option (BraseroPlugin *plugin,
156 				BraseroPluginConfOption *option);
157 
158 BraseroBurnResult
159 brasero_plugin_conf_option_bool_add_suboption (BraseroPluginConfOption *option,
160 					       BraseroPluginConfOption *suboption);
161 
162 BraseroBurnResult
163 brasero_plugin_conf_option_int_set_range (BraseroPluginConfOption *option,
164 					  gint min,
165 					  gint max);
166 
167 BraseroBurnResult
168 brasero_plugin_conf_option_choice_add (BraseroPluginConfOption *option,
169 				       const gchar *string,
170 				       gint value);
171 
172 void
173 brasero_plugin_add_error (BraseroPlugin *plugin,
174                           BraseroPluginErrorType type,
175                           const gchar *detail);
176 
177 void
178 brasero_plugin_test_gstreamer_plugin (BraseroPlugin *plugin,
179                                       const gchar *name);
180 
181 void
182 brasero_plugin_test_app (BraseroPlugin *plugin,
183                          const gchar *name,
184                          const gchar *version_arg,
185                          const gchar *version_format,
186                          gint version [3]);
187 
188 /**
189  * Boiler plate for plugin definition to save the hassle of definition.
190  * To be put at the beginning of the .c file.
191  */
192 typedef GType	(* BraseroPluginRegisterType)	(BraseroPlugin *plugin);
193 
194 G_MODULE_EXPORT void
195 brasero_plugin_check_config (BraseroPlugin *plugin);
196 
197 #define BRASERO_PLUGIN_BOILERPLATE(PluginName, plugin_name, PARENT_NAME, ParentName) \
198 typedef struct {								\
199 	ParentName parent;							\
200 } PluginName;									\
201 										\
202 typedef struct {								\
203 	ParentName##Class parent_class;						\
204 } PluginName##Class;								\
205 										\
206 static GType plugin_name##_type = 0;						\
207 										\
208 static GType									\
209 plugin_name##_get_type (void)							\
210 {										\
211 	return plugin_name##_type;						\
212 }										\
213 										\
214 static void plugin_name##_class_init (PluginName##Class *klass);		\
215 static void plugin_name##_init (PluginName *sp);				\
216 static void plugin_name##_finalize (GObject *object);			\
217 static void plugin_name##_export_caps (BraseroPlugin *plugin);	\
218 G_MODULE_EXPORT GType								\
219 brasero_plugin_register (BraseroPlugin *plugin);				\
220 G_MODULE_EXPORT GType								\
221 brasero_plugin_register (BraseroPlugin *plugin)				\
222 {														\
223 	if (brasero_plugin_get_gtype (plugin) == G_TYPE_NONE)	\
224 		plugin_name##_export_caps (plugin);					\
225 	static const GTypeInfo our_info = {					\
226 		sizeof (PluginName##Class),					\
227 		NULL,										\
228 		NULL,										\
229 		(GClassInitFunc)plugin_name##_class_init,			\
230 		NULL,										\
231 		NULL,										\
232 		sizeof (PluginName),							\
233 		0,											\
234 		(GInstanceInitFunc)plugin_name##_init,			\
235 	};												\
236 	plugin_name##_type = g_type_module_register_type (G_TYPE_MODULE (plugin),		\
237 							  PARENT_NAME,			\
238 							  G_STRINGIFY (PluginName),		\
239 							  &our_info,				\
240 							  0);						\
241 	return plugin_name##_type;						\
242 }
243 
244 #define BRASERO_PLUGIN_ADD_STANDARD_CDR_FLAGS(plugin_MACRO, unsupported_MACRO)	\
245 	/* Use DAO for first session since AUDIO need it to write CD-TEXT */	\
246 	brasero_plugin_set_flags (plugin_MACRO,					\
247 				  BRASERO_MEDIUM_CD|				\
248 				  BRASERO_MEDIUM_WRITABLE|			\
249 				  BRASERO_MEDIUM_BLANK,				\
250 				  (BRASERO_BURN_FLAG_DAO|			\
251 				  BRASERO_BURN_FLAG_MULTI|			\
252 				  BRASERO_BURN_FLAG_BURNPROOF|			\
253 				  BRASERO_BURN_FLAG_OVERBURN|			\
254 				  BRASERO_BURN_FLAG_DUMMY|			\
255 				  BRASERO_BURN_FLAG_NOGRACE) &			\
256 				  (~(unsupported_MACRO)),				\
257 				  BRASERO_BURN_FLAG_NONE);			\
258 	/* This is a CDR with data data can be merged or at least appended */	\
259 	brasero_plugin_set_flags (plugin_MACRO,					\
260 				  BRASERO_MEDIUM_CD|				\
261 				  BRASERO_MEDIUM_WRITABLE|			\
262 				  BRASERO_MEDIUM_APPENDABLE|			\
263 				  BRASERO_MEDIUM_HAS_AUDIO|			\
264 				  BRASERO_MEDIUM_HAS_DATA,			\
265 				  (BRASERO_BURN_FLAG_APPEND|			\
266 				  BRASERO_BURN_FLAG_MERGE|			\
267 				  BRASERO_BURN_FLAG_BURNPROOF|			\
268 				  BRASERO_BURN_FLAG_OVERBURN|			\
269 				  BRASERO_BURN_FLAG_MULTI|			\
270 				  BRASERO_BURN_FLAG_DUMMY|			\
271 				  BRASERO_BURN_FLAG_NOGRACE) &			\
272 				  (~(unsupported_MACRO)),				\
273 				  BRASERO_BURN_FLAG_APPEND);
274 
275 #define BRASERO_PLUGIN_ADD_STANDARD_CDRW_FLAGS(plugin_MACRO, unsupported_MACRO)			\
276 	/* Use DAO for first session since AUDIO needs it to write CD-TEXT */	\
277 	brasero_plugin_set_flags (plugin_MACRO,					\
278 				  BRASERO_MEDIUM_CD|				\
279 				  BRASERO_MEDIUM_REWRITABLE|			\
280 				  BRASERO_MEDIUM_BLANK,				\
281 				  (BRASERO_BURN_FLAG_DAO|			\
282 				  BRASERO_BURN_FLAG_MULTI|			\
283 				  BRASERO_BURN_FLAG_BURNPROOF|			\
284 				  BRASERO_BURN_FLAG_OVERBURN|			\
285 				  BRASERO_BURN_FLAG_DUMMY|			\
286 				  BRASERO_BURN_FLAG_NOGRACE) &			\
287 				  (~(unsupported_MACRO)),				\
288 				  BRASERO_BURN_FLAG_NONE);			\
289 	/* It is a CDRW we want the CD to be either blanked before or appended	\
290 	 * that's why we set MERGE as compulsory. That way if the CD is not 	\
291 	 * MERGED we force the blank before writing to avoid appending sessions	\
292 	 * endlessly until there is no free space. */				\
293 	brasero_plugin_set_flags (plugin_MACRO,					\
294 				  BRASERO_MEDIUM_CD|				\
295 				  BRASERO_MEDIUM_REWRITABLE|			\
296 				  BRASERO_MEDIUM_APPENDABLE|			\
297 				  BRASERO_MEDIUM_HAS_AUDIO|			\
298 				  BRASERO_MEDIUM_HAS_DATA,			\
299 				  (BRASERO_BURN_FLAG_APPEND|			\
300 				  BRASERO_BURN_FLAG_MERGE|			\
301 				  BRASERO_BURN_FLAG_BURNPROOF|			\
302 				  BRASERO_BURN_FLAG_OVERBURN|			\
303 				  BRASERO_BURN_FLAG_MULTI|			\
304 				  BRASERO_BURN_FLAG_DUMMY|			\
305 				  BRASERO_BURN_FLAG_NOGRACE) &			\
306 				  (~(unsupported_MACRO)),				\
307 				  BRASERO_BURN_FLAG_MERGE);
308 
309 #define BRASERO_PLUGIN_ADD_STANDARD_DVDR_FLAGS(plugin_MACRO, unsupported_MACRO)			\
310 	/* DAO and MULTI are exclusive */					\
311 	brasero_plugin_set_flags (plugin_MACRO,					\
312 				  BRASERO_MEDIUM_DVDR|				\
313 				  BRASERO_MEDIUM_DUAL_L|			\
314 				  BRASERO_MEDIUM_JUMP|				\
315 				  BRASERO_MEDIUM_BLANK,				\
316 				  (BRASERO_BURN_FLAG_DAO|			\
317 				  BRASERO_BURN_FLAG_BURNPROOF|			\
318 				  BRASERO_BURN_FLAG_DUMMY|			\
319 				  BRASERO_BURN_FLAG_NOGRACE) &			\
320 				  (~(unsupported_MACRO)),				\
321 				  BRASERO_BURN_FLAG_NONE);			\
322 	brasero_plugin_set_flags (plugin_MACRO,					\
323 				  BRASERO_MEDIUM_DVDR|				\
324 				  BRASERO_MEDIUM_DUAL_L|			\
325 				  BRASERO_MEDIUM_JUMP|				\
326 				  BRASERO_MEDIUM_BLANK,				\
327 				  (BRASERO_BURN_FLAG_BURNPROOF|			\
328 				  BRASERO_BURN_FLAG_MULTI|			\
329 				  BRASERO_BURN_FLAG_DUMMY|			\
330 				  BRASERO_BURN_FLAG_NOGRACE) &			\
331 				  (~(unsupported_MACRO)),				\
332 				  BRASERO_BURN_FLAG_NONE);			\
333 	/* This is a DVDR with data; data can be merged or at least appended */	\
334 	brasero_plugin_set_flags (plugin_MACRO,					\
335 				  BRASERO_MEDIUM_DVDR|				\
336 				  BRASERO_MEDIUM_DUAL_L|			\
337 				  BRASERO_MEDIUM_JUMP|				\
338 				  BRASERO_MEDIUM_APPENDABLE|			\
339 				  BRASERO_MEDIUM_HAS_DATA,			\
340 				  (BRASERO_BURN_FLAG_APPEND|			\
341 				  BRASERO_BURN_FLAG_MERGE|			\
342 				  BRASERO_BURN_FLAG_BURNPROOF|			\
343 				  BRASERO_BURN_FLAG_MULTI|			\
344 				  BRASERO_BURN_FLAG_DUMMY|			\
345 				  BRASERO_BURN_FLAG_NOGRACE) &			\
346 				  (~(unsupported_MACRO)),				\
347 				  BRASERO_BURN_FLAG_APPEND);
348 
349 #define BRASERO_PLUGIN_ADD_STANDARD_DVDR_PLUS_FLAGS(plugin_MACRO, unsupported_MACRO)		\
350 	/* DVD+R don't have a DUMMY mode */					\
351 	brasero_plugin_set_flags (plugin_MACRO,					\
352 				  BRASERO_MEDIUM_DVDR_PLUS|			\
353 				  BRASERO_MEDIUM_DUAL_L|			\
354 				  BRASERO_MEDIUM_BLANK,				\
355 				  (BRASERO_BURN_FLAG_DAO|			\
356 				  BRASERO_BURN_FLAG_BURNPROOF|			\
357 				  BRASERO_BURN_FLAG_NOGRACE) &			\
358 				  (~(unsupported_MACRO)),				\
359 				  BRASERO_BURN_FLAG_NONE);			\
360 	brasero_plugin_set_flags (plugin_MACRO,					\
361 				  BRASERO_MEDIUM_DVDR_PLUS|			\
362 				  BRASERO_MEDIUM_DUAL_L|			\
363 				  BRASERO_MEDIUM_BLANK,				\
364 				  (BRASERO_BURN_FLAG_BURNPROOF|			\
365 				  BRASERO_BURN_FLAG_MULTI|			\
366 				  BRASERO_BURN_FLAG_NOGRACE) &			\
367 				  (~(unsupported_MACRO)),				\
368 				  BRASERO_BURN_FLAG_NONE);			\
369 	/* DVD+R with data: data can be merged or at least appended */		\
370 	brasero_plugin_set_flags (plugin_MACRO,					\
371 				  BRASERO_MEDIUM_DVDR_PLUS|			\
372 				  BRASERO_MEDIUM_DUAL_L|			\
373 				  BRASERO_MEDIUM_APPENDABLE|			\
374 				  BRASERO_MEDIUM_HAS_DATA,			\
375 				  (BRASERO_BURN_FLAG_MERGE|			\
376 				  BRASERO_BURN_FLAG_APPEND|			\
377 				  BRASERO_BURN_FLAG_BURNPROOF|			\
378 				  BRASERO_BURN_FLAG_MULTI|			\
379 				  BRASERO_BURN_FLAG_NOGRACE) &			\
380 				  (~(unsupported_MACRO)),				\
381 				  BRASERO_BURN_FLAG_APPEND);
382 
383 #define BRASERO_PLUGIN_ADD_STANDARD_DVDRW_FLAGS(plugin_MACRO, unsupported_MACRO)			\
384 	brasero_plugin_set_flags (plugin_MACRO,					\
385 				  BRASERO_MEDIUM_DVDRW|				\
386 				  BRASERO_MEDIUM_UNFORMATTED|			\
387 				  BRASERO_MEDIUM_BLANK,				\
388 				  (BRASERO_BURN_FLAG_DAO|			\
389 				  BRASERO_BURN_FLAG_BURNPROOF|			\
390 				  BRASERO_BURN_FLAG_DUMMY|			\
391 				  BRASERO_BURN_FLAG_NOGRACE) &			\
392 				  (~(unsupported_MACRO)),				\
393 				  BRASERO_BURN_FLAG_NONE);			\
394 	brasero_plugin_set_flags (plugin_MACRO,					\
395 				  BRASERO_MEDIUM_DVDRW|				\
396 				  BRASERO_MEDIUM_BLANK,				\
397 				  (BRASERO_BURN_FLAG_BURNPROOF|			\
398 				  BRASERO_BURN_FLAG_MULTI|			\
399 				  BRASERO_BURN_FLAG_DUMMY|			\
400 				  BRASERO_BURN_FLAG_NOGRACE) &			\
401 				  (~(unsupported_MACRO)),				\
402 				  BRASERO_BURN_FLAG_NONE);			\
403 	/* This is a DVDRW we want the DVD to be either blanked before or	\
404 	 * appended that's why we set MERGE as compulsory. That way if the DVD	\
405 	 * is not MERGED we force the blank before writing to avoid appending	\
406 	 * sessions endlessly until there is no free space. */			\
407 	brasero_plugin_set_flags (plugin_MACRO,					\
408 				  BRASERO_MEDIUM_DVDRW|				\
409 				  BRASERO_MEDIUM_APPENDABLE|			\
410 				  BRASERO_MEDIUM_HAS_DATA,			\
411 				  (BRASERO_BURN_FLAG_MERGE|			\
412 				  BRASERO_BURN_FLAG_APPEND|			\
413 				  BRASERO_BURN_FLAG_BURNPROOF|			\
414 				  BRASERO_BURN_FLAG_MULTI|			\
415 				  BRASERO_BURN_FLAG_DUMMY|			\
416 				  BRASERO_BURN_FLAG_NOGRACE) &			\
417 				  (~(unsupported_MACRO)),				\
418 				  BRASERO_BURN_FLAG_MERGE);
419 
420 /**
421  * These kind of media don't support:
422  * - BURNPROOF
423  * - DAO
424  * - APPEND
425  * since they don't behave and are not written in the same way.
426  * They also can't be closed so MULTI is compulsory.
427  */
428 #define BRASERO_PLUGIN_ADD_STANDARD_DVDRW_PLUS_FLAGS(plugin_MACRO, unsupported_MACRO)		\
429 	brasero_plugin_set_flags (plugin_MACRO,					\
430 				  BRASERO_MEDIUM_DVDRW_PLUS|			\
431 				  BRASERO_MEDIUM_DUAL_L|			\
432 				  BRASERO_MEDIUM_UNFORMATTED|			\
433 				  BRASERO_MEDIUM_BLANK,				\
434 				  (BRASERO_BURN_FLAG_MULTI|			\
435 				  BRASERO_BURN_FLAG_NOGRACE) &			\
436 				  (~(unsupported_MACRO)),				\
437 				  BRASERO_BURN_FLAG_MULTI);			\
438 	brasero_plugin_set_flags (plugin_MACRO,					\
439 				  BRASERO_MEDIUM_DVDRW_PLUS|			\
440 				  BRASERO_MEDIUM_DUAL_L|			\
441 				  BRASERO_MEDIUM_APPENDABLE|			\
442 				  BRASERO_MEDIUM_CLOSED|			\
443 				  BRASERO_MEDIUM_HAS_DATA,			\
444 				  (BRASERO_BURN_FLAG_MULTI|			\
445 				  BRASERO_BURN_FLAG_NOGRACE|			\
446 				  BRASERO_BURN_FLAG_MERGE) &			\
447 				  (~(unsupported_MACRO)),				\
448 				  BRASERO_BURN_FLAG_MULTI);
449 
450 /**
451  * The above statement apply to these as well. There is no longer dummy mode
452  * NOTE: there is no such thing as a DVD-RW DL.
453  */
454 #define BRASERO_PLUGIN_ADD_STANDARD_DVDRW_RESTRICTED_FLAGS(plugin_MACRO, unsupported_MACRO)	\
455 	brasero_plugin_set_flags (plugin_MACRO,					\
456 				  BRASERO_MEDIUM_DVD|				\
457 				  BRASERO_MEDIUM_RESTRICTED|			\
458 				  BRASERO_MEDIUM_REWRITABLE|			\
459 				  BRASERO_MEDIUM_UNFORMATTED|			\
460 				  BRASERO_MEDIUM_BLANK,				\
461 				  (BRASERO_BURN_FLAG_MULTI|			\
462 				  BRASERO_BURN_FLAG_NOGRACE) &			\
463 				  (~(unsupported_MACRO)),				\
464 				  BRASERO_BURN_FLAG_MULTI);			\
465 	brasero_plugin_set_flags (plugin_MACRO,					\
466 				  BRASERO_MEDIUM_DVD|				\
467 				  BRASERO_MEDIUM_RESTRICTED|			\
468 				  BRASERO_MEDIUM_REWRITABLE|			\
469 				  BRASERO_MEDIUM_APPENDABLE|			\
470 				  BRASERO_MEDIUM_CLOSED|			\
471 				  BRASERO_MEDIUM_HAS_DATA,			\
472 				  (BRASERO_BURN_FLAG_MULTI|			\
473 				  BRASERO_BURN_FLAG_NOGRACE|			\
474 				  BRASERO_BURN_FLAG_MERGE) &			\
475 				  (~(unsupported_MACRO)),				\
476 				  BRASERO_BURN_FLAG_MULTI);
477 
478 #define BRASERO_PLUGIN_ADD_STANDARD_BD_R_FLAGS(plugin_MACRO, unsupported_MACRO)			\
479 	/* DAO and MULTI are exclusive */					\
480 	brasero_plugin_set_flags (plugin_MACRO,					\
481 				  BRASERO_MEDIUM_BDR_RANDOM|			\
482 				  BRASERO_MEDIUM_BDR_SRM|			\
483 				  BRASERO_MEDIUM_BDR_SRM_POW|			\
484 				  BRASERO_MEDIUM_DUAL_L|			\
485 				  BRASERO_MEDIUM_BLANK,				\
486 				  (BRASERO_BURN_FLAG_DAO|			\
487 				  BRASERO_BURN_FLAG_DUMMY|			\
488 				  BRASERO_BURN_FLAG_NOGRACE) &			\
489 				  (~(unsupported_MACRO)),				\
490 				  BRASERO_BURN_FLAG_NONE);			\
491 	brasero_plugin_set_flags (plugin_MACRO,					\
492 				  BRASERO_MEDIUM_BDR_RANDOM|			\
493 				  BRASERO_MEDIUM_BDR_SRM|			\
494 				  BRASERO_MEDIUM_BDR_SRM_POW|			\
495 				  BRASERO_MEDIUM_DUAL_L|			\
496 				  BRASERO_MEDIUM_BLANK,				\
497 				  (BRASERO_BURN_FLAG_MULTI|			\
498 				  BRASERO_BURN_FLAG_DUMMY|			\
499 				  BRASERO_BURN_FLAG_NOGRACE) &			\
500 				  (~(unsupported_MACRO)),				\
501 				  BRASERO_BURN_FLAG_NONE);			\
502 	/* This is a DVDR with data data can be merged or at least appended */	\
503 	brasero_plugin_set_flags (plugin_MACRO,					\
504 				  BRASERO_MEDIUM_BDR_RANDOM|			\
505 				  BRASERO_MEDIUM_BDR_SRM|			\
506 				  BRASERO_MEDIUM_BDR_SRM_POW|			\
507 				  BRASERO_MEDIUM_DUAL_L|			\
508 				  BRASERO_MEDIUM_APPENDABLE|			\
509 				  BRASERO_MEDIUM_HAS_DATA,			\
510 				  (BRASERO_BURN_FLAG_APPEND|			\
511 				  BRASERO_BURN_FLAG_MERGE|			\
512 				  BRASERO_BURN_FLAG_MULTI|			\
513 				  BRASERO_BURN_FLAG_DUMMY|			\
514 				  BRASERO_BURN_FLAG_NOGRACE) &			\
515 				  (~(unsupported_MACRO)),				\
516 				  BRASERO_BURN_FLAG_APPEND);
517 
518 /**
519  * These kind of media don't support:
520  * - BURNPROOF
521  * - DAO
522  * - APPEND
523  * since they don't behave and are not written in the same way.
524  * They also can't be closed so MULTI is compulsory.
525  */
526 #define BRASERO_PLUGIN_ADD_STANDARD_BD_RE_FLAGS(plugin_MACRO, unsupported_MACRO)			\
527 	brasero_plugin_set_flags (plugin_MACRO,					\
528 				  BRASERO_MEDIUM_BDRE|				\
529 				  BRASERO_MEDIUM_DUAL_L|			\
530 				  BRASERO_MEDIUM_UNFORMATTED|			\
531 				  BRASERO_MEDIUM_BLANK,				\
532 				  (BRASERO_BURN_FLAG_MULTI|			\
533 				  BRASERO_BURN_FLAG_NOGRACE) &			\
534 				  (~(unsupported_MACRO)),				\
535 				  BRASERO_BURN_FLAG_MULTI);			\
536 	brasero_plugin_set_flags (plugin_MACRO,					\
537 				  BRASERO_MEDIUM_BDRE|				\
538 				  BRASERO_MEDIUM_DUAL_L|			\
539 				  BRASERO_MEDIUM_APPENDABLE|			\
540 				  BRASERO_MEDIUM_CLOSED|			\
541 				  BRASERO_MEDIUM_HAS_DATA,			\
542 				  (BRASERO_BURN_FLAG_MULTI|			\
543 				  BRASERO_BURN_FLAG_NOGRACE|			\
544 				  BRASERO_BURN_FLAG_MERGE) &			\
545 				  (~(unsupported_MACRO)),				\
546 				  BRASERO_BURN_FLAG_MULTI);
547 
548 G_END_DECLS
549 
550 #endif
551