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