brasero r1771 - in trunk: . data src/plugins/cdrdao src/plugins/growisofs



Author: philippr
Date: Sat Jan 17 13:58:39 2009
New Revision: 1771
URL: http://svn.gnome.org/viewvc/brasero?rev=1771&view=rev

Log:
2009-01-17  Philippe Rouquier  <ykw localhost localdomain>

	Fix #564748 â Brasero fails to burn DVDs
	This adds a workaround for some drives that don't work properly with
	growisofs when DAO is on

	Reworked patch by Luis Medinas

	* data/brasero.schemas.in:
	* src/plugins/cdrdao/burn-cdrdao.c (brasero_cdrdao_class_init):
	* src/plugins/growisofs/Makefile.am:
	* src/plugins/growisofs/burn-growisofs.c
	(brasero_growisofs_export_caps):


Modified:
   trunk/ChangeLog
   trunk/data/brasero.schemas.in
   trunk/src/plugins/cdrdao/burn-cdrdao.c
   trunk/src/plugins/growisofs/Makefile.am
   trunk/src/plugins/growisofs/burn-growisofs.c

Modified: trunk/data/brasero.schemas.in
==============================================================================
--- trunk/data/brasero.schemas.in	(original)
+++ trunk/data/brasero.schemas.in	Sat Jan 17 13:58:39 2009
@@ -42,6 +42,19 @@
 	</locale>
        </schema>
 
+       <schema>
+ 	<key>/schemas/apps/brasero/config/dao_flag</key>
+ 	<applyto>/apps/brasero/config/dao_flag</applyto>
+ 	<owner>brasero</owner>
+ 	<type>bool</type>
+ 	<default>true</default>
+ 	<locale name="C">
+ 	<short>Whether to use "-use-the-force-luke=dao" flag with growisofs</short>
+ 	<long>Whether to use "-use-the-force-luke=dao" flag with
+ 	growisofs. Set to false, brasero won't use it; it may be a workaround for some drives/setups.</long>
+ 	</locale>
+ 	</schema> 
+
       <schema>
         <key>/schemas/apps/brasero/config/minbuf_value</key>
 	<applyto>/apps/brasero/config/minbuf_value</applyto>
@@ -63,7 +76,7 @@
 	<locale name="C">
 	<short>Whether to use "--driver generic-mmc-raw" flag with cdrdao</short>
 	<long>Whether to use "--driver generic-mmc-raw" flag with
-	cdrdao. Set to True, brasero won't use it; it may be a workaround for some drives/setups.</long>
+	cdrdao. Set to True, brasero will use it; it may be a workaround for some drives/setups.</long>
 	</locale>
       </schema> 
 

Modified: trunk/src/plugins/cdrdao/burn-cdrdao.c
==============================================================================
--- trunk/src/plugins/cdrdao/burn-cdrdao.c	(original)
+++ trunk/src/plugins/cdrdao/burn-cdrdao.c	Sat Jan 17 13:58:39 2009
@@ -543,7 +543,7 @@
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 	BraseroProcessClass *process_class = BRASERO_PROCESS_CLASS (klass);
 
-	g_type_class_add_private (klass, sizeof(BraseroCdrdaoPrivate));
+	g_type_class_add_private (klass, sizeof (BraseroCdrdaoPrivate));
 
 	parent_class = g_type_class_peek_parent(klass);
 	object_class->finalize = brasero_cdrdao_finalize;

Modified: trunk/src/plugins/growisofs/Makefile.am
==============================================================================
--- trunk/src/plugins/growisofs/Makefile.am	(original)
+++ trunk/src/plugins/growisofs/Makefile.am	Sat Jan 17 13:58:39 2009
@@ -10,14 +10,15 @@
 	-DBRASERO_DATADIR=\"$(datadir)/brasero\"     	    	\
 	-DBRASERO_LIBDIR=\"$(libdir)\"  	         	\
 	$(DISABLE_DEPRECATED)				\
-	$(BRASERO_GLIB_CFLAGS)
+	$(BRASERO_GLIB_CFLAGS)				\
+	$(BRASERO_GCONF_CFLAGS)
 
 #growisofs
 growisofsdir = $(libdir)/brasero/plugins
 growisofs_LTLIBRARIES = libbrasero-growisofs.la
 libbrasero_growisofs_la_SOURCES = burn-growisofs.c burn-growisofs.h \
 	burn-growisofs-common.h 
-libbrasero_growisofs_la_LIBADD = $(BRASERO_GLIB_LIBS)
+libbrasero_growisofs_la_LIBADD = $(BRASERO_GLIB_LIBS) $(BRASERO_GCONF_LIBS)
 libbrasero_growisofs_la_LDFLAGS = -module -avoid-version
 
 #dvdrwformat

Modified: trunk/src/plugins/growisofs/burn-growisofs.c
==============================================================================
--- trunk/src/plugins/growisofs/burn-growisofs.c	(original)
+++ trunk/src/plugins/growisofs/burn-growisofs.c	Sat Jan 17 13:58:39 2009
@@ -40,6 +40,8 @@
 
 #include <gmodule.h>
 
+#include <gconf/gconf-client.h> 
+
 #include "burn-basics.h"
 #include "burn-plugin.h"
 #include "burn-job.h"
@@ -53,6 +55,7 @@
 struct BraseroGrowisofsPrivate {
 	guint use_utf8:1;
 	guint use_genisoimage:1;
+  	guint use_dao:1;
 };
 typedef struct BraseroGrowisofsPrivate BraseroGrowisofsPrivate;
 
@@ -60,6 +63,8 @@
 
 static GObjectClass *parent_class = NULL;
 
+#define GCONF_KEY_DAO_FLAG "/apps/brasero/config/dao_flag" 
+
 /* Process start */
 static BraseroBurnResult
 brasero_growisofs_read_stdout (BraseroProcess *process, const gchar *line)
@@ -418,7 +423,9 @@
 	 * DVD+-R. It will close the disc. Which make sense since DAO means
 	 * Disc At Once. That's checked in burn-caps.c with coherency checks.
 	 * NOTE 2: dao is supported for DL DVD after 6.0 (think about that for
-	 * BurnCaps) */
+	 * BurnCaps)
+	 * Moreover even for single session DVDs it doesn't work properly so
+	 * there is a workaround to turn it off entirely. */
 	if (flags & BRASERO_BURN_FLAG_DAO)
 		g_ptr_array_add (argv, g_strdup ("-use-the-force-luke=dao"));
 
@@ -709,7 +716,10 @@
 static BraseroBurnResult
 brasero_growisofs_export_caps (BraseroPlugin *plugin, gchar **error)
 {
+	BraseroPluginConfOption *use_dao;
+	gboolean use_dao_gconf_key;
 	BraseroBurnResult result;
+	GConfClient *client;
 	GSList *output;
 	GSList *input;
 
@@ -811,15 +821,80 @@
 	g_slist_free (output);
 	g_slist_free (input);
 
-	/* For DVD-W and DVD-RW sequential */
-	BRASERO_PLUGIN_ADD_STANDARD_DVDR_FLAGS (plugin, BRASERO_BURN_FLAG_NONE);
+	/* For DVD-RW sequential */
 	BRASERO_PLUGIN_ADD_STANDARD_DVDRW_FLAGS (plugin, BRASERO_BURN_FLAG_NONE);
 
-	/* see NOTE for DVD-RW restricted overwrite below */
+	/* see NOTE for DVD-RW restricted overwrite */
 	BRASERO_PLUGIN_ADD_STANDARD_DVDRW_RESTRICTED_FLAGS (plugin, BRASERO_BURN_FLAG_NONE);
 
-	/* DVD+ W */
-	BRASERO_PLUGIN_ADD_STANDARD_DVDR_PLUS_FLAGS (plugin, BRASERO_BURN_FLAG_NONE);
+	/* DVD+R and DVD-R. DAO and growisofs don't always work well with these
+	 * types of media and with some drives. So don't allow it if the
+	 * workaround is set in GConf. */
+	client = gconf_client_get_default ();
+	use_dao_gconf_key = gconf_client_get_bool (client,
+						   GCONF_KEY_DAO_FLAG,
+						   NULL);
+	g_object_unref (client);
+	if (use_dao_gconf_key == TRUE) {
+		BRASERO_PLUGIN_ADD_STANDARD_DVDR_FLAGS (plugin, BRASERO_BURN_FLAG_NONE);
+		BRASERO_PLUGIN_ADD_STANDARD_DVDR_PLUS_FLAGS (plugin, BRASERO_BURN_FLAG_NONE);
+	}
+	else {
+		/* All above standard flags minus DAO flag support */
+		brasero_plugin_set_flags (plugin,
+					  BRASERO_MEDIUM_DVDR_PLUS|
+					  BRASERO_MEDIUM_DUAL_L|
+					  BRASERO_MEDIUM_BLANK,                         
+					  (BRASERO_BURN_FLAG_BURNPROOF|                 
+					  BRASERO_BURN_FLAG_OVERBURN|                   
+					  BRASERO_BURN_FLAG_MULTI|                      
+					  BRASERO_BURN_FLAG_NOGRACE) &                  
+					  (~BRASERO_BURN_FLAG_NONE),                         
+					  BRASERO_BURN_FLAG_NONE);                      
+
+		brasero_plugin_set_flags (plugin,
+					  BRASERO_MEDIUM_DVDR_PLUS|
+					  BRASERO_MEDIUM_DUAL_L|
+					  BRASERO_MEDIUM_APPENDABLE|
+					  BRASERO_MEDIUM_HAS_DATA,
+					  (BRASERO_BURN_FLAG_MERGE|
+					  BRASERO_BURN_FLAG_APPEND|
+					  BRASERO_BURN_FLAG_BURNPROOF|
+					  BRASERO_BURN_FLAG_OVERBURN|
+					  BRASERO_BURN_FLAG_MULTI|
+					  BRASERO_BURN_FLAG_NOGRACE) &
+					  (~BRASERO_BURN_FLAG_NONE),
+					  BRASERO_BURN_FLAG_APPEND);
+
+		brasero_plugin_set_flags (plugin,
+					  BRASERO_MEDIUM_DVDR|
+					  BRASERO_MEDIUM_DUAL_L|
+					  BRASERO_MEDIUM_JUMP|
+					  BRASERO_MEDIUM_BLANK,
+					  (BRASERO_BURN_FLAG_BURNPROOF|
+					  BRASERO_BURN_FLAG_OVERBURN|
+					  BRASERO_BURN_FLAG_MULTI|
+					  BRASERO_BURN_FLAG_DUMMY|
+					  BRASERO_BURN_FLAG_NOGRACE) &
+					  (~BRASERO_BURN_FLAG_NONE),
+					  BRASERO_BURN_FLAG_NONE);
+
+		brasero_plugin_set_flags (plugin,
+					  BRASERO_MEDIUM_DVDR|
+					  BRASERO_MEDIUM_DUAL_L|
+					  BRASERO_MEDIUM_JUMP|
+					  BRASERO_MEDIUM_APPENDABLE|
+					  BRASERO_MEDIUM_HAS_DATA,
+					  (BRASERO_BURN_FLAG_APPEND|
+					  BRASERO_BURN_FLAG_MERGE|
+					  BRASERO_BURN_FLAG_BURNPROOF|
+					  BRASERO_BURN_FLAG_OVERBURN|
+					  BRASERO_BURN_FLAG_MULTI|
+					  BRASERO_BURN_FLAG_DUMMY|
+					  BRASERO_BURN_FLAG_NOGRACE) &
+					  (~BRASERO_BURN_FLAG_NONE),
+					  BRASERO_BURN_FLAG_APPEND);
+	}
 
 	/* for DVD+RW */
 	BRASERO_PLUGIN_ADD_STANDARD_DVDRW_PLUS_FLAGS (plugin, BRASERO_BURN_FLAG_NONE);
@@ -870,6 +945,12 @@
 					BRASERO_BURN_FLAG_FAST_BLANK,
 					BRASERO_BURN_FLAG_FAST_BLANK);
 
+	use_dao = brasero_plugin_conf_option_new (GCONF_KEY_DAO_FLAG,
+						  _("Allow DAO use"),
+						  BRASERO_PLUGIN_OPTION_BOOL);
+
+	brasero_plugin_add_conf_option (plugin, use_dao); 
+
 	brasero_plugin_register_group (plugin, _(GROWISOFS_DESCRIPTION));
 
 	return BRASERO_BURN_OK;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]