brasero r809 - in trunk: . src src/plugins/cdrkit src/plugins/cdrtools src/plugins/checksum src/plugins/dvdcss src/plugins/growisofs



Author: philippr
Date: Sat May 10 16:03:08 2008
New Revision: 809
URL: http://svn.gnome.org/viewvc/brasero?rev=809&view=rev

Log:
	Fix #513910 â broken DVD DL support
	Added Dual Layer support

	* src/brasero-burn-dialog.c (brasero_burn_dialog_update_info),
	(brasero_burn_dialog_get_media_type_string),
	(brasero_burn_dialog_progress_changed_real),
	(brasero_burn_dialog_notify_success):
	* src/brasero-dest-selection.c
	(brasero_dest_selection_get_default_output_format):
	* src/brasero-disc-option-dialog.c
	(brasero_disc_option_dialog_update_multi):
	* src/brasero-drive-properties.c
	(brasero_drive_properties_format_disc_speed):
	* src/brasero-project-size.c
	(brasero_project_size_get_ruler_min_width),
	(brasero_project_size_expose), (brasero_project_size_build_menu),
	(brasero_project_size_scroll_event),
	(brasero_project_size_find_proper_drive),
	(brasero_project_size_set_context):
	* src/burn-caps.c (brasero_burn_caps_get_required_media_type),
	(brasero_burn_caps_sort), (brasero_caps_disc_lookup_or_create),
	(brasero_caps_disc_new_status), (brasero_caps_disc_new_attribute),
	(brasero_caps_disc_new_subtype), (brasero_caps_disc_new):
	* src/burn-debug.c (brasero_debug_medium_info_to_string):
	* src/burn-job.c (brasero_job_get_speed),
	(brasero_job_get_max_speed):
	* src/burn-medium.c (brasero_medium_get_medium_type),
	(brasero_medium_track_get_info):
	* src/burn-medium.h:
	* src/burn.c (brasero_burn_is_loaded_dest_media_supported),
	(brasero_burn_reload_dest_media):
	* src/plugins/cdrkit/burn-genisoimage.c
	(brasero_genisoimage_export_caps):
	* src/plugins/cdrkit/burn-readom.c (brasero_readom_export_caps):
	* src/plugins/cdrtools/burn-mkisofs.c
	(brasero_mkisofs_export_caps):
	* src/plugins/cdrtools/burn-readcd.c (brasero_readcd_export_caps):
	* src/plugins/checksum/burn-checksum-files.c
	(brasero_checksum_files_export_caps):
	* src/plugins/dvdcss/burn-dvdcss.c (brasero_dvdcss_export_caps):
	* src/plugins/growisofs/burn-dvd-rw-format.c
	(brasero_dvd_rw_format_export_caps):
	* src/plugins/growisofs/burn-growisofs.c
	(brasero_growisofs_export_caps):

Modified:
   trunk/ChangeLog
   trunk/src/brasero-burn-dialog.c
   trunk/src/brasero-dest-selection.c
   trunk/src/brasero-disc-option-dialog.c
   trunk/src/brasero-drive-properties.c
   trunk/src/brasero-project-size.c
   trunk/src/burn-caps.c
   trunk/src/burn-debug.c
   trunk/src/burn-job.c
   trunk/src/burn-medium.c
   trunk/src/burn-medium.h
   trunk/src/burn.c
   trunk/src/plugins/cdrkit/burn-genisoimage.c
   trunk/src/plugins/cdrkit/burn-readom.c
   trunk/src/plugins/cdrtools/burn-mkisofs.c
   trunk/src/plugins/cdrtools/burn-readcd.c
   trunk/src/plugins/checksum/burn-checksum-files.c
   trunk/src/plugins/dvdcss/burn-dvdcss.c
   trunk/src/plugins/growisofs/burn-dvd-rw-format.c
   trunk/src/plugins/growisofs/burn-growisofs.c

Modified: trunk/src/brasero-burn-dialog.c
==============================================================================
--- trunk/src/brasero-burn-dialog.c	(original)
+++ trunk/src/brasero-burn-dialog.c	Sat May 10 16:03:08 2008
@@ -166,7 +166,7 @@
 		header = g_strdup_printf ("<big><b>Creating image</b></big>");
 		title = g_strdup (_("Brasero - Creating image"));
 	}
-	else if (media & BRASERO_MEDIUM_DVD) {
+	else if (media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL)) {
 		if (input == BRASERO_TRACK_TYPE_DATA) {
 			if (flags & BRASERO_BURN_FLAG_DUMMY) {
 				title = g_strdup (_("Brasero - Burning DVD (simulation)"));
@@ -368,7 +368,7 @@
 				     NULL,
 				     NULL);
 
-		if ((type & BRASERO_MEDIUM_CD) && !(type & BRASERO_MEDIUM_DVD)) {
+		if ((type & BRASERO_MEDIUM_CD) && !(type & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL))) {
 			if (!insert) {
 				if (isosize)
 					message = g_strdup_printf (_("replace the disc with a recordable CD with a least %i MiB free."), 
@@ -384,7 +384,7 @@
 					message = g_strdup_printf (_("insert a recordable CD."));
 			}
 		}
-		else if (!(type & BRASERO_MEDIUM_CD) && (type & BRASERO_MEDIUM_DVD)) {
+		else if (!(type & BRASERO_MEDIUM_CD) && (type & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL))) {
 			if (!insert) {
 				if (isosize)
 					message = g_strdup_printf (_("replace the disc with a recordable DVD with a least %i MiB free."), 
@@ -896,7 +896,7 @@
 								   (guint) (task_progress * 100.0));
 
 	brasero_burn_progress_set_status (BRASERO_BURN_PROGRESS (dialog->priv->progress),
-					  (media & BRASERO_MEDIUM_DVD),
+					  (media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL)),
 					  overall_progress,
 					  task_progress,
 					  remaining,
@@ -1639,13 +1639,13 @@
 		break;
 	case BRASERO_TRACK_TYPE_DISC:
 		if (!brasero_drive_is_fake (drive)) {
-			if (media & BRASERO_MEDIUM_DVD)
+			if (media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL))
 				primary = g_strdup (_("DVD successfully copied"));
 			else
 				primary = g_strdup (_("CD successfully copied"));
 		}
 		else {
-			if (media & BRASERO_MEDIUM_DVD)
+			if (media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL))
 				primary = g_strdup (_("Image of DVD successfully created"));
 			else
 				primary = g_strdup (_("Image of CD successfully created"));
@@ -1653,7 +1653,7 @@
 		break;
 	case BRASERO_TRACK_TYPE_IMAGE:
 		if (!brasero_drive_is_fake (drive)) {
-			if (media & BRASERO_MEDIUM_DVD)
+			if (media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL))
 				primary = g_strdup (_("Image successfully burnt to DVD"));
 			else
 				primary = g_strdup (_("Image successfully burnt to CD"));
@@ -1661,7 +1661,7 @@
 		break;
 	default:
 		if (!brasero_drive_is_fake (drive)) {
-			if (media & BRASERO_MEDIUM_DVD)
+			if (media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL))
 				primary = g_strdup (_("Data DVD successfully burnt"));
 			else
 				primary = g_strdup (_("Data CD successfully burnt"));

Modified: trunk/src/brasero-dest-selection.c
==============================================================================
--- trunk/src/brasero-dest-selection.c	(original)
+++ trunk/src/brasero-dest-selection.c	Sat May 10 16:03:08 2008
@@ -330,7 +330,7 @@
 		return;
 
 	if (source.type == BRASERO_TRACK_TYPE_DATA
-	||  source.subtype.media & BRASERO_MEDIUM_DVD) {
+	||  source.subtype.media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL)) {
 		output->subtype.img_format = BRASERO_IMAGE_FORMAT_BIN;
 		result = brasero_burn_caps_is_output_supported (priv->caps,
 								priv->session,

Modified: trunk/src/brasero-disc-option-dialog.c
==============================================================================
--- trunk/src/brasero-disc-option-dialog.c	(original)
+++ trunk/src/brasero-disc-option-dialog.c	Sat May 10 16:03:08 2008
@@ -276,7 +276,7 @@
 	brasero_burn_session_get_input_type (priv->session, &input);
 	if (input.type == BRASERO_TRACK_TYPE_DATA
 	&& (input.subtype.fs_type & BRASERO_IMAGE_FS_VIDEO)
-	&& (brasero_burn_session_get_dest_media (priv->session) & BRASERO_MEDIUM_DVD)) {
+	&& (brasero_burn_session_get_dest_media (priv->session) & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL))) {
 		gtk_widget_set_sensitive (priv->multi_toggle, FALSE);
 		goto end;
 	}

Modified: trunk/src/brasero-drive-properties.c
==============================================================================
--- trunk/src/brasero-drive-properties.c	(original)
+++ trunk/src/brasero-drive-properties.c	Sat May 10 16:03:08 2008
@@ -245,7 +245,7 @@
 {
 	gchar *text;
 
-	if (media & BRASERO_MEDIUM_DVD)
+	if (media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL))
 		text = g_strdup_printf (_("%.1f x (DVD)"),
 					BRASERO_RATE_TO_SPEED_DVD (rate));
 	else if (media & BRASERO_MEDIUM_CD)

Modified: trunk/src/brasero-project-size.c
==============================================================================
--- trunk/src/brasero-project-size.c	(original)
+++ trunk/src/brasero-project-size.c	Sat May 10 16:03:08 2008
@@ -419,7 +419,7 @@
 	/* the number of interval needs to be reasonable, not over 8 not under 5 */
 	if (self->priv->is_audio_context)
 		interval_size = AUDIO_INTERVAL_CD;
-	else if (self->priv->current->media & BRASERO_MEDIUM_DVD)
+	else if (self->priv->current->media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL))
 		interval_size = DATA_INTERVAL_DVD;
 	else
 		interval_size = DATA_INTERVAL_CD;
@@ -731,7 +731,7 @@
 	
 	if (self->priv->is_audio_context)
 		interval_size = AUDIO_INTERVAL_CD;
-	else if (self->priv->current->media & BRASERO_MEDIUM_DVD)
+	else if (self->priv->current->media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL))
 		interval_size = DATA_INTERVAL_DVD;
 	else
 		interval_size = DATA_INTERVAL_CD;
@@ -1061,7 +1061,7 @@
 			continue;
 
 		if (self->priv->is_audio_context
-		&& (drive->media & BRASERO_MEDIUM_DVD))
+		&& (drive->media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL)))
 			continue;
 
 		if (!drive->medium && !separator) {
@@ -1091,7 +1091,7 @@
 			label = g_strdup_printf ("%s %s", size_str, name);
 			g_free (name);
 		}
-		else if (drive->media & BRASERO_MEDIUM_DL)
+		else if (drive->media & BRASERO_MEDIUM_DVD_DL)
 			label = g_strdup_printf (_("%s (DVD-R Dual Layer)"),
 						 size_str);
 		else if (drive->media & BRASERO_MEDIUM_DVD)
@@ -1129,7 +1129,7 @@
 
 		if (!drive->medium)
 			image = gtk_image_new_from_icon_name ("drive-optical", GTK_ICON_SIZE_MENU);
-		else if (drive->media & BRASERO_MEDIUM_DVD)
+		else if (drive->media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL))
 			image = gtk_image_new_from_icon_name ("gnome-dev-disc-dvdr", GTK_ICON_SIZE_MENU);
 		else
 			image = gtk_image_new_from_icon_name ("gnome-dev-disc-cdr", GTK_ICON_SIZE_MENU);
@@ -1238,7 +1238,7 @@
 				iter = g_list_next (iter);
 			/* in an audio context only CDs are valid */
 			else if (self->priv->is_audio_context
-			     && (drive->media & BRASERO_MEDIUM_DVD))
+			     && (drive->media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL)))
 				iter = g_list_next (iter);
 			/* we want a drive supported by the library */
 			else if (!(media_status & (BRASERO_MEDIUM_WRITABLE|BRASERO_MEDIUM_REWRITABLE)))
@@ -1281,7 +1281,7 @@
 				iter = g_list_previous (iter);
 			/* in an audio context only CDs are valid */
 			else if (self->priv->is_audio_context
-			     && (drive->media & BRASERO_MEDIUM_DVD))
+			     && (drive->media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL)))
 				iter = g_list_previous (iter);
 			/* we want a drive supported by the library */
 			else if (!(media_status & (BRASERO_MEDIUM_WRITABLE|BRASERO_MEDIUM_REWRITABLE)))
@@ -1367,7 +1367,7 @@
 		media_status = brasero_burn_caps_media_capabilities (caps, current->media);
 
 		if (self->priv->is_audio_context
-		&& (current->media & BRASERO_MEDIUM_DVD)) {
+		&& (current->media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL))) {
 			current = NULL;
 		}
 		else if (!BRASERO_MEDIUM_VALID (current->media)) {
@@ -1411,7 +1411,7 @@
 
 		/* No DVD if context is audio */
 		if (self->priv->is_audio_context
-		&& (drive->media & BRASERO_MEDIUM_DVD))
+		&& (drive->media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL)))
 			continue;
 
 		if (!BRASERO_MEDIUM_VALID (drive->media))
@@ -1482,7 +1482,7 @@
 	else if (!current->medium)
 		brasero_project_size_find_proper_drive (self);
 	else if (is_audio
-	     && (current->media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_APPENDABLE)))
+	     && (current->media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL|BRASERO_MEDIUM_APPENDABLE)))
 		brasero_project_size_find_proper_drive (self);
 
 	brasero_project_size_disc_changed (self);

Modified: trunk/src/burn-caps.c
==============================================================================
--- trunk/src/burn-caps.c	(original)
+++ trunk/src/burn-caps.c	Sat May 10 16:03:08 2008
@@ -1990,7 +1990,8 @@
 	/* filter as we are only interested in these */
 	required_media &= BRASERO_MEDIUM_WRITABLE|
 			  BRASERO_MEDIUM_CD|
-			  BRASERO_MEDIUM_DVD;
+			  BRASERO_MEDIUM_DVD|
+			  BRASERO_MEDIUM_DVD_DL;
 
 	return required_media;
 }
@@ -2402,7 +2403,7 @@
 			return ((gint32) BRASERO_MEDIUM_TYPE (caps_a->type.subtype.media) -
 			        (gint32) BRASERO_MEDIUM_TYPE (caps_b->type.subtype.media));
 
-		if ((caps_a->type.subtype.media & BRASERO_MEDIUM_DVD)
+		if ((caps_a->type.subtype.media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL))
 		&&  BRASERO_MEDIUM_SUBTYPE (caps_a->type.subtype.media) !=
 		    BRASERO_MEDIUM_SUBTYPE (caps_b->type.subtype.media))			
 			return ((gint32) BRASERO_MEDIUM_SUBTYPE (caps_a->type.subtype.media) -
@@ -2904,442 +2905,233 @@
 	return retval;
 }
 
-GSList *
-brasero_caps_disc_new (BraseroMedia media)
+static GSList *
+brasero_caps_disc_lookup_or_create (GSList *retval,
+				    BraseroMedia media)
 {
 	GSList *iter;
-	BraseroBurnCaps *self;
-	GSList *retval = NULL;
-	BraseroCaps *caps = NULL;
-	GSList *encompassing = NULL;
- 
-	BRASERO_BURN_LOG_DISC_TYPE (media, "Creating new caps");
-
-	self = brasero_burn_caps_get_default ();
+	BraseroCaps *caps;
 
-	for (iter = self->priv->caps_list; iter; iter = iter->next) {
-		BraseroMedia common;
-		BraseroMedia media_less;
-		BraseroMedia caps_media;
-		BraseroMedia common_type;
-		BraseroMedia common_attr;
-		BraseroMedia common_info;
-		BraseroMedia common_status;
-		BraseroMedia common_subtype;
+	if (!default_caps)
+		brasero_burn_caps_get_default ();
 
+	for (iter = default_caps->priv->caps_list; iter; iter = iter->next) {
 		caps = iter->data;
-
-		media_less = BRASERO_MEDIUM_NONE;
-
-		if (caps->type.type != BRASERO_TRACK_TYPE_DISC)
-			continue;
-
-		caps_media = caps->type.subtype.media;
-
-		if (caps_media == media) {
-			retval = g_slist_prepend (retval, caps);
-			goto end;
-		}
-
-		/* the media and the caps have something in common if and only
-		 * if type, status and attribute have all at least one thing in
-		 * common (and subtype if type is DVD) */
-		common = (caps_media & media);
-
-		common_type = BRASERO_MEDIUM_TYPE (common);
-		if (common_type == BRASERO_MEDIUM_NONE)
-			continue;
-
-		if (common_type & BRASERO_MEDIUM_DVD) {
-			common_subtype = BRASERO_MEDIUM_SUBTYPE (common);
-			if (common_subtype == BRASERO_MEDIUM_NONE)
-				continue;
-		}
-		else
-			common_subtype = BRASERO_MEDIUM_NONE;
-
-		common_attr = BRASERO_MEDIUM_ATTR (common);
-		if (common_attr == BRASERO_MEDIUM_NONE)
-			continue;
-
-		common_status = BRASERO_MEDIUM_STATUS (common);
-		if (common_status == BRASERO_MEDIUM_NONE)
-			continue;
-
-		/* info flags are cumulative and not exclusive like above. i.e.
-		 * you can have DATA + PROTECTED or DATA + AUDIO. Moreover they
-		 * should only be found when CLOSED/APPENDABLE flags are set. */
-		if (common_status & (BRASERO_MEDIUM_APPENDABLE|BRASERO_MEDIUM_CLOSED)) {
-			common_info = BRASERO_MEDIUM_INFO (common);
-			if (common_info == BRASERO_MEDIUM_NONE)
-				continue;
-		}
-		else /* for blank disc */
-			common_info = BRASERO_MEDIUM_NONE;
-
-		if (BRASERO_MEDIUM_TYPE (caps_media) != common_type) {
-			BraseroCaps *new_caps;
-
-			/* common_type == media_type && common_type != caps_type
-			 * so caps_type encompasses media_type: split and keep
-			 * the part we are interested in */
-			caps->type.subtype.media &= ~common_type;
-
-			new_caps = brasero_caps_copy_deep (caps);
-			new_caps->type.subtype.media &= ~BRASERO_MEDIUM_TYPE (caps_media);
-			new_caps->type.subtype.media |= common_type;
-
-			if (!(caps->type.subtype.media & BRASERO_MEDIUM_DVD)
-			&&   (caps->type.subtype.media & BRASERO_MEDIUM_CD))
-				caps->type.subtype.media &= ~(BRASERO_MEDIUM_DL|
-							      BRASERO_MEDIUM_PLUS|
-							      BRASERO_MEDIUM_SEQUENTIAL|
-							      BRASERO_MEDIUM_RESTRICTED);
-
-			if (!(new_caps->type.subtype.media & BRASERO_MEDIUM_DVD)
-			&&   (new_caps->type.subtype.media & BRASERO_MEDIUM_CD))
-				new_caps->type.subtype.media &= ~(BRASERO_MEDIUM_DL|
-								  BRASERO_MEDIUM_PLUS|
-								  BRASERO_MEDIUM_SEQUENTIAL|
-								  BRASERO_MEDIUM_RESTRICTED);
-
-			/* The order of the caps may have changed now */
-			self->priv->caps_list = g_slist_sort (self->priv->caps_list,
-							      brasero_burn_caps_sort);
-
-			self->priv->caps_list = g_slist_insert_sorted (self->priv->caps_list,
-								       new_caps,
-								       brasero_burn_caps_sort);
-			caps = new_caps;
-
-			media_less = common_type;
-			if (!(media & BRASERO_MEDIUM_DVD)
-			&&   (media & BRASERO_MEDIUM_CD))
-				media_less |= (BRASERO_MEDIUM_DL|
-					       BRASERO_MEDIUM_PLUS|
-					       BRASERO_MEDIUM_SEQUENTIAL|
-					       BRASERO_MEDIUM_RESTRICTED);
-		}
-		else if (BRASERO_MEDIUM_TYPE (media) != common_type) {
-			BraseroMedia first_half, second_half;
-
-			/* common_type != media_type && common_type == caps_type
-			 * so caps_type encompasses media_type.
-			 * split the media in two and call ourselves for each */
-			first_half = media & (~common_type);
-
-			if (!(first_half & BRASERO_MEDIUM_DVD)
-			&&   (first_half & BRASERO_MEDIUM_CD))
-				first_half &= ~(BRASERO_MEDIUM_DL|
-						BRASERO_MEDIUM_PLUS|
-						BRASERO_MEDIUM_SEQUENTIAL|
-						BRASERO_MEDIUM_RESTRICTED);
-
-			retval = g_slist_concat (retval, brasero_caps_disc_new (first_half));
-
-			second_half = media & (~BRASERO_MEDIUM_TYPE (media));
-			second_half |= common_type;
-
-			if (!(second_half & BRASERO_MEDIUM_DVD)
-			&&   (second_half & BRASERO_MEDIUM_CD))
-				second_half &= ~(BRASERO_MEDIUM_DL|
-						 BRASERO_MEDIUM_PLUS|
-						 BRASERO_MEDIUM_SEQUENTIAL|
-						 BRASERO_MEDIUM_RESTRICTED);
-
-			retval = g_slist_concat (retval, brasero_caps_disc_new (second_half));
-			goto end;
+		if (caps->type.subtype.media == media) {
+			BRASERO_BURN_LOG_WITH_TYPE (&caps->type,
+						    caps->flags,
+						    "Retrieved");
+			return g_slist_prepend (retval, caps);
 		}
+	}
 
-		common_attr = BRASERO_MEDIUM_ATTR (caps->type.subtype.media & media);
-		if (BRASERO_MEDIUM_ATTR (caps_media) != common_attr) {
-			BraseroCaps *new_caps;
-
-			/* common_attr == media_attr && common_attr != caps_attr
-			 * so caps_attr encompasses media_attr: split */
-			caps->type.subtype.media &= ~common_attr;
-
-			new_caps = brasero_caps_copy_deep (caps);
-			new_caps->type.subtype.media &= ~BRASERO_MEDIUM_ATTR (caps_media);
-			new_caps->type.subtype.media |= common_attr;
-
-			if (!(caps->type.subtype.media & BRASERO_MEDIUM_REWRITABLE))
-				caps->type.subtype.media &= ~BRASERO_MEDIUM_RESTRICTED;
-
-			if (!(caps->type.subtype.media & BRASERO_MEDIUM_WRITABLE)
-			&&  !(caps->type.subtype.media & BRASERO_MEDIUM_REWRITABLE)
-			&&   (caps->type.subtype.media & BRASERO_MEDIUM_ROM))
-				caps->type.subtype.media &= ~(BRASERO_MEDIUM_APPENDABLE|
-							      BRASERO_MEDIUM_SEQUENTIAL|
-							      BRASERO_MEDIUM_BLANK|
-							      BRASERO_MEDIUM_PLUS);
-
-			if (!(new_caps->type.subtype.media & BRASERO_MEDIUM_REWRITABLE))
-				new_caps->type.subtype.media &= ~BRASERO_MEDIUM_RESTRICTED;
-
-			if (!(new_caps->type.subtype.media & BRASERO_MEDIUM_WRITABLE)
-			&&  !(new_caps->type.subtype.media & BRASERO_MEDIUM_REWRITABLE)
-			&&   (new_caps->type.subtype.media & BRASERO_MEDIUM_ROM))
-				new_caps->type.subtype.media &= ~(BRASERO_MEDIUM_SEQUENTIAL|
-								  BRASERO_MEDIUM_APPENDABLE|
-								  BRASERO_MEDIUM_BLANK|
-								  BRASERO_MEDIUM_PLUS);
-
-			/* The order of the caps may have changed now */
-			self->priv->caps_list = g_slist_sort (self->priv->caps_list,
-							      brasero_burn_caps_sort);
-
-			self->priv->caps_list = g_slist_insert_sorted (self->priv->caps_list,
-								       new_caps,
-								       brasero_burn_caps_sort);
-			caps = new_caps;
-
-			media_less = common_attr;
-			if (!(media & BRASERO_MEDIUM_WRITABLE)
-			&&  !(media & BRASERO_MEDIUM_REWRITABLE)
-			&&   (media & BRASERO_MEDIUM_ROM))
-				media_less |= (BRASERO_MEDIUM_SEQUENTIAL|
-					       BRASERO_MEDIUM_APPENDABLE|
-					       BRASERO_MEDIUM_BLANK|
-					       BRASERO_MEDIUM_PLUS);
-
-			if (!(media & BRASERO_MEDIUM_REWRITABLE))
-				media_less |= BRASERO_MEDIUM_RESTRICTED;
-		}
-		else if (BRASERO_MEDIUM_ATTR (media) != common_attr) {
-			BraseroMedia first_half, second_half;
-			/* common_attr != media_attr && common_attr == caps_attr
-			 * so media_attr encompasses caps_attr:
-			 * split the media in two and call ourselves for each */
-			first_half = (media|common_type|common_subtype) & (~common_attr);
-
-			if (!(first_half & BRASERO_MEDIUM_WRITABLE)
-			&&  !(first_half & BRASERO_MEDIUM_REWRITABLE)
-			&&   (first_half & BRASERO_MEDIUM_ROM))
-				first_half &= ~(BRASERO_MEDIUM_SEQUENTIAL|
-						BRASERO_MEDIUM_APPENDABLE|
-						BRASERO_MEDIUM_BLANK|
-						BRASERO_MEDIUM_PLUS);
-
-			if (!(first_half & BRASERO_MEDIUM_REWRITABLE))
-				first_half &= ~BRASERO_MEDIUM_RESTRICTED;
-
-			retval = g_slist_concat (retval, brasero_caps_disc_new (first_half));
-
-			second_half = (media|common_type|common_subtype) & (~(BRASERO_MEDIUM_ATTR (media)));
-			second_half |= common_attr;
-
-			if (!(second_half & BRASERO_MEDIUM_WRITABLE)
-			&&  !(second_half & BRASERO_MEDIUM_REWRITABLE)
-			&&   (second_half & BRASERO_MEDIUM_ROM))
-				second_half &= ~(BRASERO_MEDIUM_SEQUENTIAL|
-						 BRASERO_MEDIUM_APPENDABLE|
-						 BRASERO_MEDIUM_BLANK|
-						 BRASERO_MEDIUM_PLUS);
-
-			if (!(second_half & BRASERO_MEDIUM_REWRITABLE))
-				second_half &= ~BRASERO_MEDIUM_RESTRICTED;
-
-			retval = g_slist_concat (retval, brasero_caps_disc_new (second_half));
-			goto end;
-		}
-
-		if (common_type & BRASERO_MEDIUM_DVD) {
-			common_subtype = BRASERO_MEDIUM_SUBTYPE (caps->type.subtype.media & media);
-			if (BRASERO_MEDIUM_SUBTYPE (caps_media) != common_subtype) {
-				BraseroCaps *new_caps;
+	caps = g_new0 (BraseroCaps, 1);
+	caps->flags = BRASERO_PLUGIN_IO_ACCEPT_FILE;
+	caps->type.type = BRASERO_TRACK_TYPE_DISC;
+	caps->type.subtype.media = media;
 	
-				/* common_subtype == media_subtype &&
-				 * common_subtype != caps_subtype
-				 * so caps_subtype encompasses media_subtype: 
-				 * split and keep the part we are interested in
-				 */
-				caps->type.subtype.media &= ~common_subtype;
-
-				new_caps = brasero_caps_copy_deep (caps);
-				new_caps->type.subtype.media &= ~BRASERO_MEDIUM_SUBTYPE (caps_media);
-				new_caps->type.subtype.media |= common_subtype;
-
-				if (!(caps->type.subtype.media & BRASERO_MEDIUM_PLUS)
-				&&  !(caps->type.subtype.media & BRASERO_MEDIUM_SEQUENTIAL)
-				&&   (caps->type.subtype.media & BRASERO_MEDIUM_RESTRICTED))
-					caps->type.subtype.media &= ~(BRASERO_MEDIUM_WRITABLE);
-
-				if (!(new_caps->type.subtype.media & BRASERO_MEDIUM_PLUS)
-				&&  !(new_caps->type.subtype.media & BRASERO_MEDIUM_SEQUENTIAL)
-				&&   (new_caps->type.subtype.media & BRASERO_MEDIUM_RESTRICTED))
-					new_caps->type.subtype.media &= ~(BRASERO_MEDIUM_WRITABLE);
-
-				/* The order of the caps may have changed now */
-				self->priv->caps_list = g_slist_sort (self->priv->caps_list,
-								      brasero_burn_caps_sort);
-
-				self->priv->caps_list = g_slist_insert_sorted (self->priv->caps_list,
-									       new_caps,
-									       brasero_burn_caps_sort);
-
-				caps = new_caps;
-				media_less = common_subtype;
-
-				if (!(media & BRASERO_MEDIUM_PLUS)
-				&&  !(media & BRASERO_MEDIUM_SEQUENTIAL)
-				&&   (media & BRASERO_MEDIUM_RESTRICTED))
-					media_less |= (BRASERO_MEDIUM_WRITABLE);
-			}
-			else if (BRASERO_MEDIUM_SUBTYPE (media) != common_subtype) {
-				BraseroMedia first_half, second_half;
-
-				/* common_subtype != media_subtype &&
-				 * common_subtype == caps_subtype
-				 * so caps_subtype encompasses media_subtype.
-				 * split the media in two and call ourselves for
-				 * each */
-				first_half = (media|common_type) & (~common_subtype);
-
-				if (!(first_half & BRASERO_MEDIUM_PLUS)
-				&&  !(first_half & BRASERO_MEDIUM_SEQUENTIAL)
-				&&   (first_half & BRASERO_MEDIUM_RESTRICTED))
-					first_half &= ~(BRASERO_MEDIUM_WRITABLE);
-
-				retval = g_slist_concat (retval, brasero_caps_disc_new (first_half));
-
-				second_half = (media|common_type) & (~BRASERO_MEDIUM_SUBTYPE (media));
-				second_half |= common_subtype;
-
-				if (!(second_half & BRASERO_MEDIUM_PLUS)
-				&&  !(second_half & BRASERO_MEDIUM_SEQUENTIAL)
-				&&   (second_half & BRASERO_MEDIUM_RESTRICTED))
-					second_half &= ~(BRASERO_MEDIUM_WRITABLE);
-
-				retval = g_slist_concat (retval, brasero_caps_disc_new (second_half));
-				goto end;
-			}
-		}
-
-		common_status = BRASERO_MEDIUM_STATUS (caps->type.subtype.media & media);
-		if (BRASERO_MEDIUM_STATUS (caps_media) != common_status) {
-			BraseroCaps *new_caps;
-
-			/* common_status == media_status && common_status != caps_status
-			 * so caps_status encompasses media_status: split */
-			caps->type.subtype.media &= ~common_status;
-
-			new_caps = brasero_caps_copy_deep (caps);
-			new_caps->type.subtype.media &= ~BRASERO_MEDIUM_STATUS (caps_media);
-			new_caps->type.subtype.media |= common_status;
-
-			if (!(caps->type.subtype.media & BRASERO_MEDIUM_APPENDABLE)
-			&&  !(caps->type.subtype.media & BRASERO_MEDIUM_CLOSED)
-			&&   (caps->type.subtype.media & BRASERO_MEDIUM_BLANK))
-				caps->type.subtype.media &= ~(BRASERO_MEDIUM_HAS_AUDIO|BRASERO_MEDIUM_HAS_DATA);
-
-			if (!(new_caps->type.subtype.media & BRASERO_MEDIUM_APPENDABLE)
-			&&  !(new_caps->type.subtype.media & BRASERO_MEDIUM_CLOSED)
-			&&   (new_caps->type.subtype.media & BRASERO_MEDIUM_BLANK))
-				new_caps->type.subtype.media &= ~(BRASERO_MEDIUM_HAS_AUDIO|BRASERO_MEDIUM_HAS_DATA);
-
-			/* The order of the caps may have changed now */
-			self->priv->caps_list = g_slist_sort (self->priv->caps_list,
-							      brasero_burn_caps_sort);
-
-			self->priv->caps_list = g_slist_insert_sorted (self->priv->caps_list,
-								       new_caps,
-								       brasero_burn_caps_sort);
-
-			caps = new_caps;
-
-			media_less = common_status;
-			if (!(media & BRASERO_MEDIUM_APPENDABLE)
-			&&  !(media & BRASERO_MEDIUM_CLOSED)
-			&&   (media & BRASERO_MEDIUM_BLANK))
-				media_less |= (BRASERO_MEDIUM_HAS_AUDIO|BRASERO_MEDIUM_HAS_DATA);
-		}
-		else if (BRASERO_MEDIUM_STATUS (media) != common_status) {
-			BraseroMedia first_half, second_half;
-
-			/* common_status != media_status && common_status == caps_status
-			 * so caps_status encompasses media_status:
-			 * split the media in two and call ourselves for each */
-			first_half = (media|common_type|common_subtype|common_attr) & (~common_status);
-
-			if (!(first_half & BRASERO_MEDIUM_APPENDABLE)
-			&&  !(first_half & BRASERO_MEDIUM_CLOSED)
-			&&   (first_half & BRASERO_MEDIUM_BLANK))
-				first_half &= ~(BRASERO_MEDIUM_HAS_AUDIO|BRASERO_MEDIUM_HAS_DATA);
-
-			retval = g_slist_concat (retval, brasero_caps_disc_new (first_half));
-
-			second_half = (media|common_type|common_subtype|common_attr) & (~BRASERO_MEDIUM_STATUS (media));
-			second_half |= common_status;
-
-			if (!(second_half & BRASERO_MEDIUM_APPENDABLE)
-			&&  !(second_half & BRASERO_MEDIUM_CLOSED)
-			&&   (second_half & BRASERO_MEDIUM_BLANK))
-				second_half &= ~(BRASERO_MEDIUM_HAS_AUDIO|BRASERO_MEDIUM_HAS_DATA);
-
-			retval = g_slist_concat (retval, brasero_caps_disc_new (second_half));
-			goto end;
-		}
+	BRASERO_BURN_LOG_WITH_TYPE (&caps->type,
+				    caps->flags,
+				    "Created");
 
-		media &= ~media_less;
+	default_caps->priv->caps_list = g_slist_prepend (default_caps->priv->caps_list, caps);
+	return g_slist_prepend (retval, caps);
+}
 
-		/* If we find a caps encompassing ours then duplicate it.
-		 * If we find a caps encompassed by ours then add it to retval.
-		 * The above rule also applies to perfect hit */
+static GSList *
+brasero_caps_disc_new_status (GSList *retval,
+			      BraseroMedia media,
+			      BraseroMedia type)
+{
+	if ((type & BRASERO_MEDIUM_BLANK)
+	&& !(media & BRASERO_MEDIUM_ROM)) {
+		/* if media is blank there is no other possible property */
+		if (!(media & BRASERO_MEDIUM_ROM))
+			retval = brasero_caps_disc_lookup_or_create (retval, media | BRASERO_MEDIUM_BLANK);
+	}
+
+	if (type & BRASERO_MEDIUM_CLOSED) {
+		if (media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL))
+			retval = brasero_caps_disc_lookup_or_create (retval,
+								     media|
+								     BRASERO_MEDIUM_CLOSED|
+								     (type & BRASERO_MEDIUM_HAS_DATA)|
+								     (type & BRASERO_MEDIUM_PROTECTED));
+		else if (media & BRASERO_MEDIUM_HAS_AUDIO)
+			retval = brasero_caps_disc_lookup_or_create (retval,
+								     media|
+								     BRASERO_MEDIUM_CLOSED|
+								     BRASERO_MEDIUM_HAS_AUDIO);
+		else if (media & BRASERO_MEDIUM_HAS_DATA)
+			retval = brasero_caps_disc_lookup_or_create (retval,
+								     media|
+								     BRASERO_MEDIUM_CLOSED|
+								     BRASERO_MEDIUM_HAS_DATA);
+		else if (BRASERO_MEDIUM_IS (media, BRASERO_MEDIUM_HAS_AUDIO|BRASERO_MEDIUM_HAS_DATA))
+			retval = brasero_caps_disc_lookup_or_create (retval,
+								     media|
+								     BRASERO_MEDIUM_CLOSED|
+								     BRASERO_MEDIUM_HAS_DATA|
+								     BRASERO_MEDIUM_HAS_AUDIO);
+	}
+
+	if ((type & BRASERO_MEDIUM_APPENDABLE)
+	&& !(media & BRASERO_MEDIUM_ROM)
+	&& !(media & BRASERO_MEDIUM_RESTRICTED)
+	&& ! BRASERO_MEDIUM_IS (media, BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_PLUS|BRASERO_MEDIUM_REWRITABLE)
+	&& ! BRASERO_MEDIUM_IS (media, BRASERO_MEDIUM_DVD_DL|BRASERO_MEDIUM_PLUS|BRASERO_MEDIUM_REWRITABLE)) {
+		if (media & BRASERO_MEDIUM_DVD)
+			retval = brasero_caps_disc_lookup_or_create (retval,
+								     media|
+								     BRASERO_MEDIUM_APPENDABLE|
+								     BRASERO_MEDIUM_HAS_DATA);
+		else if (media & BRASERO_MEDIUM_HAS_AUDIO)
+			retval = brasero_caps_disc_lookup_or_create (retval,
+								     media|
+								     BRASERO_MEDIUM_APPENDABLE|
+								     BRASERO_MEDIUM_HAS_AUDIO);
+		else if (media & BRASERO_MEDIUM_HAS_DATA)
+			retval = brasero_caps_disc_lookup_or_create (retval,
+								     media|
+								     BRASERO_MEDIUM_APPENDABLE|
+								     BRASERO_MEDIUM_HAS_DATA);
+		else if (BRASERO_MEDIUM_IS (media, BRASERO_MEDIUM_HAS_AUDIO|BRASERO_MEDIUM_HAS_DATA))
+			retval = brasero_caps_disc_lookup_or_create (retval,
+								     media|
+								     BRASERO_MEDIUM_HAS_DATA|
+								     BRASERO_MEDIUM_APPENDABLE|
+								     BRASERO_MEDIUM_HAS_AUDIO);
+	}
 
-		/* for perfect hit and encompassed caps */
-		if (common_info == BRASERO_MEDIUM_INFO (caps->type.subtype.media)) {
-			retval = g_slist_prepend (retval, caps);
+	return retval;
+}
 
-			if (common_info == BRASERO_MEDIUM_INFO (media))
-				break;
+static GSList *
+brasero_caps_disc_new_attribute (GSList *retval,
+				 BraseroMedia media,
+				 BraseroMedia type)
+{
+	if (type & BRASERO_MEDIUM_REWRITABLE) {
+		/* Always true for + media there are both single and dual layer */
+		if (media & BRASERO_MEDIUM_PLUS)
+			retval = brasero_caps_disc_new_status (retval,
+							       media|BRASERO_MEDIUM_REWRITABLE,
+							       type);
+		/* There is no dual layer DVD-RW */
+		else if (!(media & BRASERO_MEDIUM_DVD_DL))
+			retval = brasero_caps_disc_new_status (retval,
+							       media|BRASERO_MEDIUM_REWRITABLE,
+							       type);
+	}
+
+	if ((type & BRASERO_MEDIUM_WRITABLE)
+	&& !(media & BRASERO_MEDIUM_RESTRICTED))
+		retval = brasero_caps_disc_new_status (retval,
+						       media|BRASERO_MEDIUM_WRITABLE,
+						       type);
+
+	if ((type & BRASERO_MEDIUM_ROM)
+	&& !(media & BRASERO_MEDIUM_RESTRICTED)
+	&& !(media & BRASERO_MEDIUM_SEQUENTIAL)
+	&& !(media & BRASERO_MEDIUM_PLUS)
+	&& !(media & BRASERO_MEDIUM_JUMP))
+		retval = brasero_caps_disc_new_status (retval,
+						       media|BRASERO_MEDIUM_ROM,
+						       type);
 
-			continue;
-		}
+	return retval;
+}
 
-		/* strictly encompassing caps: the problem is that there could
-		 * many other strictly encompassing caps in the list and we need
-		 * their links, caps point ... as wellif we need to create that
-		 * perfect hit. So we add them to a list and they are stricly
-		 * encompassing */
-		if (common_info == BRASERO_MEDIUM_INFO (media))
-			encompassing = g_slist_prepend (encompassing, caps);
+static GSList *
+brasero_caps_disc_new_subtype (GSList *retval,
+			       BraseroMedia media,
+			       BraseroMedia type)
+{
+	if (media & BRASERO_MEDIUM_BD) {
+		if (type & BRASERO_MEDIUM_RANDOM)
+			retval = brasero_caps_disc_new_attribute (retval,
+								  media|BRASERO_MEDIUM_RANDOM,
+								  type);
+		if (type & BRASERO_MEDIUM_SRM)
+			retval = brasero_caps_disc_new_attribute (retval,
+								  media|BRASERO_MEDIUM_SRM,
+								  type);
+		if (type & BRASERO_MEDIUM_POW)
+			retval = brasero_caps_disc_new_attribute (retval,
+								  media|BRASERO_MEDIUM_POW,
+								  type);
+	}
+
+	if (media & BRASERO_MEDIUM_DVD) {
+		if (type & BRASERO_MEDIUM_SEQUENTIAL)
+			retval = brasero_caps_disc_new_attribute (retval,
+								  media|BRASERO_MEDIUM_SEQUENTIAL,
+								  type);
+
+		if (type & BRASERO_MEDIUM_RESTRICTED)
+			retval = brasero_caps_disc_new_attribute (retval,
+								  media|BRASERO_MEDIUM_RESTRICTED,
+								  type);
+
+		if (type & BRASERO_MEDIUM_PLUS)
+			retval = brasero_caps_disc_new_attribute (retval,
+								  media|BRASERO_MEDIUM_PLUS,
+								  type);
+	}
+
+	if (media & BRASERO_MEDIUM_DVD_DL) {
+		if (type & BRASERO_MEDIUM_SEQUENTIAL)
+			retval = brasero_caps_disc_new_attribute (retval,
+								  media|BRASERO_MEDIUM_SEQUENTIAL,
+								  type);
+
+		if (type & BRASERO_MEDIUM_JUMP)
+			retval = brasero_caps_disc_new_attribute (retval,
+								  media|BRASERO_MEDIUM_JUMP,
+								  type);
+
+		if (type & BRASERO_MEDIUM_PLUS)
+			retval = brasero_caps_disc_new_attribute (retval,
+								  media|BRASERO_MEDIUM_PLUS,
+								  type);
 	}
 
-	if (BRASERO_MEDIUM_TYPE (media) == BRASERO_MEDIUM_NONE
-	|| ((BRASERO_MEDIUM_TYPE (media) & BRASERO_MEDIUM_DVD) && !(BRASERO_MEDIUM_ATTR (media) & BRASERO_MEDIUM_ROM) && BRASERO_MEDIUM_SUBTYPE (media) == BRASERO_MEDIUM_NONE)
-	||  BRASERO_MEDIUM_ATTR (media) == BRASERO_MEDIUM_NONE
-	||  BRASERO_MEDIUM_STATUS (media) == BRASERO_MEDIUM_NONE)
-		goto end;
-
-	/* no perfect hit was found */
-	caps = g_new0 (BraseroCaps, 1);
-	caps->flags = BRASERO_PLUGIN_IO_ACCEPT_FILE;
-	caps->type.type = BRASERO_TRACK_TYPE_DISC;
-	caps->type.subtype.media = media;
-
-	if (encompassing) {
-		for (iter = encompassing; iter; iter = iter->next) {
-			BraseroCaps *iter_caps;
-
-			iter_caps = iter->data;
-			brasero_caps_replicate_links (caps, iter_caps);
-			brasero_caps_replicate_tests (caps, iter_caps);
-			brasero_caps_replicate_modifiers (caps, iter_caps);
-		}
-	}
-	
-	self->priv->caps_list = g_slist_insert_sorted (self->priv->caps_list,
-						       caps,
-						       brasero_burn_caps_sort);
+	return retval;
+}
 
-	retval = g_slist_prepend (retval, caps);
+GSList *
+brasero_caps_disc_new (BraseroMedia type)
+{
+	GSList *retval = NULL;
 
-end:
+	if (type & BRASERO_MEDIUM_FILE)
+		retval = brasero_caps_disc_lookup_or_create (retval, BRASERO_MEDIUM_FILE);					       
 
-	g_slist_free (encompassing);
+	if (type & BRASERO_MEDIUM_CD)
+		retval = brasero_caps_disc_new_attribute (retval,
+							  BRASERO_MEDIUM_CD,
+							  type);
+
+	if (type & BRASERO_MEDIUM_DVD)
+		retval = brasero_caps_disc_new_subtype (retval,
+							BRASERO_MEDIUM_DVD,
+							type);
+
+	if (type & BRASERO_MEDIUM_DVD_DL)
+		retval = brasero_caps_disc_new_subtype (retval,
+							BRASERO_MEDIUM_DVD_DL,
+							type);
+
+	if (type & BRASERO_MEDIUM_RAM)
+		retval = brasero_caps_disc_new_attribute (retval,
+							  BRASERO_MEDIUM_RAM,
+							  type);
+
+	if (type & BRASERO_MEDIUM_BD)
+		retval = brasero_caps_disc_new_subtype (retval,
+							BRASERO_MEDIUM_BD,
+							type);
 
-	BRASERO_BURN_LOG ("Returning %i caps", g_slist_length (retval));
 	return retval;
 }
 

Modified: trunk/src/burn-debug.c
==============================================================================
--- trunk/src/burn-debug.c	(original)
+++ trunk/src/burn-debug.c	Sat May 10 16:03:08 2008
@@ -181,6 +181,9 @@
 	if (media & BRASERO_MEDIUM_BD)
 		strcat (buffer, "BD ");
 
+	if (media & BRASERO_MEDIUM_DVD_DL)
+		strcat (buffer, "DL ");
+
 	/* DVD subtypes */
 	if (media & BRASERO_MEDIUM_PLUS)
 		strcat (buffer, "+ ");
@@ -191,8 +194,8 @@
 	if (media & BRASERO_MEDIUM_RESTRICTED)
 		strcat (buffer, "- (restricted) ");
 
-	if (media & BRASERO_MEDIUM_DL)
-		strcat (buffer, "DL ");
+	if (media & BRASERO_MEDIUM_JUMP)
+		strcat (buffer, "- (jump) ");
 
 	/* discs attributes */
 	if (media & BRASERO_MEDIUM_REWRITABLE)

Modified: trunk/src/burn-job.c
==============================================================================
--- trunk/src/burn-job.c	(original)
+++ trunk/src/burn-job.c	Sat May 10 16:03:08 2008
@@ -1418,7 +1418,7 @@
 	rate = brasero_burn_session_get_rate (session);
 
 	media = brasero_burn_session_get_dest_media (session);
-	if (media & BRASERO_MEDIUM_DVD)
+	if (media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL))
 		*speed = BRASERO_RATE_TO_SPEED_DVD (rate);
 	else 
 		*speed = BRASERO_RATE_TO_SPEED_CD (rate);
@@ -1469,7 +1469,7 @@
 	drive = brasero_burn_session_get_burner (session);
 	rate = brasero_medium_get_max_write_speed (medium);
 	media = brasero_medium_get_status (medium);
-	if (media & BRASERO_MEDIUM_DVD)
+	if (media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL))
 		*speed = BRASERO_RATE_TO_SPEED_DVD (rate);
 	else 
 		*speed = BRASERO_RATE_TO_SPEED_CD (rate);

Modified: trunk/src/burn-medium.c
==============================================================================
--- trunk/src/burn-medium.c	(original)
+++ trunk/src/burn-medium.c	Sat May 10 16:03:08 2008
@@ -1012,7 +1012,7 @@
 		break;
 
 	case BRASERO_SCSI_PROF_BR_R_SEQUENTIAL:
-		priv->info = BRASERO_MEDIUM_BDR;
+		priv->info = BRASERO_MEDIUM_BDR_SRM;
 		priv->type = types [14];
 		priv->icon = icons [5];
 		break;
@@ -1245,7 +1245,7 @@
 	/* at this point we know the type of the disc that's why we set the 
 	 * size according to this type. That may help to avoid outrange address
 	 * errors. */
-	if (BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DL|BRASERO_MEDIUM_WRITABLE))
+	if (BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DVD_DL|BRASERO_MEDIUM_WRITABLE))
 		size = 48;
 	else if (BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_PLUS|BRASERO_MEDIUM_WRITABLE))
 		size = 40;

Modified: trunk/src/burn-medium.h
==============================================================================
--- trunk/src/burn-medium.h	(original)
+++ trunk/src/burn-medium.h	Sat May 10 16:03:08 2008
@@ -78,20 +78,24 @@
 
 	BRASERO_MEDIUM_DVD			= 1 << 2,
 
-	BRASERO_MEDIUM_RAM			= 1 << 3,
+	BRASERO_MEDIUM_DVD_DL			= 1 << 3,
 
-	BRASERO_MEDIUM_BD			= 1 << 4,
+	BRASERO_MEDIUM_RAM			= 1 << 4,
 
-	/* DVD subtypes */
-	BRASERO_MEDIUM_PLUS			= 1 << 5,
-	BRASERO_MEDIUM_SEQUENTIAL		= 1 << 6,
-	BRASERO_MEDIUM_RESTRICTED		= 1 << 7,
+	BRASERO_MEDIUM_BD			= 1 << 5,
 
-	BRASERO_MEDIUM_DL			= 1 << 8,
+	/* DVD and DVD DL subtypes */
+	BRASERO_MEDIUM_PLUS			= 1 << 6,
+	BRASERO_MEDIUM_SEQUENTIAL		= 1 << 7,
+	BRASERO_MEDIUM_RESTRICTED		= 1 << 8,	/* DVD only */
 
-	/* BD subtypes */
+	/* DVD dual layer only subtype */
 	BRASERO_MEDIUM_JUMP			= 1 << 9,
+
+	/* BD subtypes */
 	BRASERO_MEDIUM_RANDOM			= 1 << 10,
+	BRASERO_MEDIUM_SRM			= 1 << 11,
+	BRASERO_MEDIUM_POW			= 1 << 12,
 
 	/* discs attributes */
 	BRASERO_MEDIUM_REWRITABLE		= 1 << 14,
@@ -108,15 +112,6 @@
 	BRASERO_MEDIUM_HAS_AUDIO		= 1 << 22,
 } BraseroMedia;
 
-#define BRASERO_MEDIUM_ALL_TYPE		(BRASERO_MEDIUM_CD|		\
-					 BRASERO_MEDIUM_DVD|		\
-					 BRASERO_MEDIUM_DL|		\
-					 BRASERO_MEDIUM_PLUS|		\
-					 BRASERO_MEDIUM_RESTRICTED|	\
-					 BRASERO_MEDIUM_SEQUENTIAL|	\
-					 BRASERO_MEDIUM_ROM|	\
-					 BRASERO_MEDIUM_WRITABLE|	\
-					 BRASERO_MEDIUM_REWRITABLE)
 #define BRASERO_MEDIUM_CDROM		(BRASERO_MEDIUM_CD|		\
 					 BRASERO_MEDIUM_ROM)
 #define BRASERO_MEDIUM_CDR		(BRASERO_MEDIUM_CD|		\
@@ -136,51 +131,49 @@
 #define BRASERO_MEDIUM_DVDRW_RESTRICTED	(BRASERO_MEDIUM_DVD|		\
 					 BRASERO_MEDIUM_REWRITABLE|	\
 					 BRASERO_MEDIUM_RESTRICTED)
-#define BRASERO_MEDIUM_DVDR_DL		(BRASERO_MEDIUM_DVD|		\
+#define BRASERO_MEDIUM_DVDR_DL		(BRASERO_MEDIUM_DVD_DL|		\
 					 BRASERO_MEDIUM_WRITABLE|	\
-					 BRASERO_MEDIUM_SEQUENTIAL|	\
-					 BRASERO_MEDIUM_DL)
-#define BRASERO_MEDIUM_DVDR_JUMP_DL	(BRASERO_MEDIUM_DVD|		\
+					 BRASERO_MEDIUM_SEQUENTIAL)
+#define BRASERO_MEDIUM_DVDR_JUMP_DL	(BRASERO_MEDIUM_DVD_DL|		\
 					 BRASERO_MEDIUM_WRITABLE|	\
-					 BRASERO_MEDIUM_JUMP|		\
-					 BRASERO_MEDIUM_DL)
+					 BRASERO_MEDIUM_JUMP)
 #define BRASERO_MEDIUM_DVDR_PLUS	(BRASERO_MEDIUM_DVD|		\
 					 BRASERO_MEDIUM_WRITABLE|	\
 					 BRASERO_MEDIUM_PLUS)
 #define BRASERO_MEDIUM_DVDRW_PLUS	(BRASERO_MEDIUM_DVD|		\
 					 BRASERO_MEDIUM_REWRITABLE|	\
 					 BRASERO_MEDIUM_PLUS)
-#define BRASERO_MEDIUM_DVDR_PLUS_DL	(BRASERO_MEDIUM_DVD|		\
+#define BRASERO_MEDIUM_DVDR_PLUS_DL	(BRASERO_MEDIUM_DVD_DL|		\
 					 BRASERO_MEDIUM_WRITABLE|	\
-					 BRASERO_MEDIUM_PLUS|		\
-					 BRASERO_MEDIUM_DL)
-#define BRASERO_MEDIUM_DVDRW_PLUS_DL	(BRASERO_MEDIUM_DVD|		\
+					 BRASERO_MEDIUM_PLUS)
+#define BRASERO_MEDIUM_DVDRW_PLUS_DL	(BRASERO_MEDIUM_DVD_DL|		\
 					 BRASERO_MEDIUM_REWRITABLE|	\
-					 BRASERO_MEDIUM_PLUS|		\
-					 BRASERO_MEDIUM_DL)
+					 BRASERO_MEDIUM_PLUS)
+
+/* Not recognized yet */
 #define BRASERO_MEDIUM_BD_ROM		(BRASERO_MEDIUM_BD|		\
 					 BRASERO_MEDIUM_ROM)
-#define BRASERO_MEDIUM_BDR		(BRASERO_MEDIUM_DVD|		\
-					 BRASERO_MEDIUM_WRITABLE|	\
-					 BRASERO_MEDIUM_BD)
-#define BRASERO_MEDIUM_BDR_RANDOM	(BRASERO_MEDIUM_DVD|		\
+#define BRASERO_MEDIUM_BDR_SRM		(BRASERO_MEDIUM_BD|		\
+					 BRASERO_MEDIUM_POW|		\
+					 BRASERO_MEDIUM_SRM|		\
+					 BRASERO_MEDIUM_WRITABLE)
+#define BRASERO_MEDIUM_BDR_RANDOM	(BRASERO_MEDIUM_BD|		\
 					 BRASERO_MEDIUM_WRITABLE|	\
-					 BRASERO_MEDIUM_RANDOM|		\
-					 BRASERO_MEDIUM_BD)
-#define BRASERO_MEDIUM_BDRW		(BRASERO_MEDIUM_DVD|		\
-					 BRASERO_MEDIUM_REWRITABLE|	\
-					 BRASERO_MEDIUM_PLUS|		\
-					 BRASERO_MEDIUM_BD)
+					 BRASERO_MEDIUM_RANDOM)
+#define BRASERO_MEDIUM_BDRW		(BRASERO_MEDIUM_BD|		\
+					 BRASERO_MEDIUM_REWRITABLE)
+
+
 
 #define BRASERO_MEDIUM_VALID(media)	((media) != BRASERO_MEDIUM_NONE		\
 					&& (media) != BRASERO_MEDIUM_BUSY	\
 					&& (media) != BRASERO_MEDIUM_UNSUPPORTED)
 
 
-#define BRASERO_MEDIUM_TYPE(media)	((media) & 0x001F)
+#define BRASERO_MEDIUM_TYPE(media)	((media) & 0x003F)
 #define BRASERO_MEDIUM_ATTR(media)	((media) & 0x1C000)
 #define BRASERO_MEDIUM_STATUS(media)	((media) & 0xE0000)
-#define BRASERO_MEDIUM_SUBTYPE(media)	((media) & 0x07E0)
+#define BRASERO_MEDIUM_SUBTYPE(media)	((media) & 0x1FC0)
 #define BRASERO_MEDIUM_INFO(media)	((media) & 0x700000)
 
 #define BRASERO_MEDIUM_IS(media, type)	(((media)&(type))==(type))

Modified: trunk/src/burn.c
==============================================================================
--- trunk/src/burn.c	(original)
+++ trunk/src/burn.c	Sat May 10 16:03:08 2008
@@ -741,7 +741,7 @@
 
 		return BRASERO_BURN_ERROR_MEDIA_NOT_WRITABLE;
 	}
-	else if (unsupported & BRASERO_MEDIUM_DVD)
+	else if (unsupported & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL))
 		return BRASERO_BURN_ERROR_DVD_NOT_SUPPORTED;
 
 	return BRASERO_BURN_ERROR_MEDIA_UNSUPPORTED;
@@ -951,9 +951,8 @@
 again:
 
 	/* eject and ask the user to reload a disc */
-	required_media = brasero_burn_caps_get_required_media_type (priv->caps,
-								    priv->session);
-	required_media &= (BRASERO_MEDIUM_WRITABLE|BRASERO_MEDIUM_CD|BRASERO_MEDIUM_DVD);
+	required_media = brasero_burn_caps_get_required_media_type (priv->caps, priv->session);
+	required_media &= (BRASERO_MEDIUM_WRITABLE|BRASERO_MEDIUM_CD|BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL);
 
 	result = brasero_burn_ask_for_dest_media (burn,
 						  error_code,

Modified: trunk/src/plugins/cdrkit/burn-genisoimage.c
==============================================================================
--- trunk/src/plugins/cdrkit/burn-genisoimage.c	(original)
+++ trunk/src/plugins/cdrkit/burn-genisoimage.c	Sat May 10 16:03:08 2008
@@ -493,6 +493,7 @@
 				  BRASERO_MEDIUM_CDRW|
 				  BRASERO_MEDIUM_DVDR|
 				  BRASERO_MEDIUM_DVDRW|
+				  BRASERO_MEDIUM_DVD_DL|
 				  BRASERO_MEDIUM_DVDR_PLUS|
 				  BRASERO_MEDIUM_APPENDABLE|
 				  BRASERO_MEDIUM_HAS_AUDIO|

Modified: trunk/src/plugins/cdrkit/burn-readom.c
==============================================================================
--- trunk/src/plugins/cdrkit/burn-readom.c	(original)
+++ trunk/src/plugins/cdrkit/burn-readom.c	Sat May 10 16:03:08 2008
@@ -389,6 +389,7 @@
 
 	input = brasero_caps_disc_new (BRASERO_MEDIUM_CD|
 				       BRASERO_MEDIUM_DVD|
+				       BRASERO_MEDIUM_DVD_DL|
 				       BRASERO_MEDIUM_PLUS|
 				       BRASERO_MEDIUM_SEQUENTIAL|
 				       BRASERO_MEDIUM_RESTRICTED|

Modified: trunk/src/plugins/cdrtools/burn-mkisofs.c
==============================================================================
--- trunk/src/plugins/cdrtools/burn-mkisofs.c	(original)
+++ trunk/src/plugins/cdrtools/burn-mkisofs.c	Sat May 10 16:03:08 2008
@@ -491,6 +491,7 @@
 				  BRASERO_MEDIUM_DVDR|
 				  BRASERO_MEDIUM_DVDRW|
 				  BRASERO_MEDIUM_DVDR_PLUS|
+				  BRASERO_MEDIUM_DVD_DL|
 				  BRASERO_MEDIUM_APPENDABLE|
 				  BRASERO_MEDIUM_HAS_AUDIO|
 				  BRASERO_MEDIUM_HAS_DATA,

Modified: trunk/src/plugins/cdrtools/burn-readcd.c
==============================================================================
--- trunk/src/plugins/cdrtools/burn-readcd.c	(original)
+++ trunk/src/plugins/cdrtools/burn-readcd.c	Sat May 10 16:03:08 2008
@@ -399,6 +399,7 @@
 
 	input = brasero_caps_disc_new (BRASERO_MEDIUM_CD|
 				       BRASERO_MEDIUM_DVD|
+				       BRASERO_MEDIUM_DVD_DL|
 				       BRASERO_MEDIUM_PLUS|
 				       BRASERO_MEDIUM_SEQUENTIAL|
 				       BRASERO_MEDIUM_RESTRICTED|

Modified: trunk/src/plugins/checksum/burn-checksum-files.c
==============================================================================
--- trunk/src/plugins/checksum/burn-checksum-files.c	(original)
+++ trunk/src/plugins/checksum/burn-checksum-files.c	Sat May 10 16:03:08 2008
@@ -1209,6 +1209,7 @@
 	 * equivalent instead */
 	input = brasero_caps_disc_new (BRASERO_MEDIUM_CD|
 				       BRASERO_MEDIUM_DVD|
+				       BRASERO_MEDIUM_DVD_DL|
 				       BRASERO_MEDIUM_PLUS|
 				       BRASERO_MEDIUM_RESTRICTED|
 				       BRASERO_MEDIUM_SEQUENTIAL|

Modified: trunk/src/plugins/dvdcss/burn-dvdcss.c
==============================================================================
--- trunk/src/plugins/dvdcss/burn-dvdcss.c	(original)
+++ trunk/src/plugins/dvdcss/burn-dvdcss.c	Sat May 10 16:03:08 2008
@@ -635,6 +635,7 @@
 					 BRASERO_PLUGIN_IO_ACCEPT_PIPE,
 					 BRASERO_IMAGE_FORMAT_BIN);
 	input = brasero_caps_disc_new (BRASERO_MEDIUM_DVD|
+				       BRASERO_MEDIUM_DVD_DL|
 				       BRASERO_MEDIUM_ROM|
 				       BRASERO_MEDIUM_CLOSED|
 				       BRASERO_MEDIUM_HAS_DATA|

Modified: trunk/src/plugins/growisofs/burn-dvd-rw-format.c
==============================================================================
--- trunk/src/plugins/growisofs/burn-dvd-rw-format.c	(original)
+++ trunk/src/plugins/growisofs/burn-dvd-rw-format.c	Sat May 10 16:03:08 2008
@@ -154,6 +154,7 @@
 {
 	/* NOTE: sequential and restricted are added later on demand */
 	const BraseroMedia media = BRASERO_MEDIUM_DVD|
+				   BRASERO_MEDIUM_DVD_DL|
 				   BRASERO_MEDIUM_REWRITABLE|
 				   BRASERO_MEDIUM_APPENDABLE|
 				   BRASERO_MEDIUM_CLOSED|

Modified: trunk/src/plugins/growisofs/burn-growisofs.c
==============================================================================
--- trunk/src/plugins/growisofs/burn-growisofs.c	(original)
+++ trunk/src/plugins/growisofs/burn-growisofs.c	Sat May 10 16:03:08 2008
@@ -660,7 +660,9 @@
 					BRASERO_IMAGE_FORMAT_BIN);
 
 	output = brasero_caps_disc_new (BRASERO_MEDIUM_DVD|
+					BRASERO_MEDIUM_DVD_DL|
 					BRASERO_MEDIUM_PLUS|
+					BRASERO_MEDIUM_JUMP|
 					BRASERO_MEDIUM_SEQUENTIAL|
 					BRASERO_MEDIUM_WRITABLE|
 					BRASERO_MEDIUM_BLANK);
@@ -678,6 +680,7 @@
 
 	/* and images to DVD RW +/-(restricted) whatever the status */
 	output = brasero_caps_disc_new (BRASERO_MEDIUM_DVD|
+					BRASERO_MEDIUM_DVD_DL|
 					BRASERO_MEDIUM_PLUS|
 					BRASERO_MEDIUM_RESTRICTED|
 					BRASERO_MEDIUM_REWRITABLE|
@@ -691,9 +694,11 @@
 
 	/* for DATA type recording discs can be also appendable */
 	output = brasero_caps_disc_new (BRASERO_MEDIUM_DVD|
+					BRASERO_MEDIUM_DVD_DL|
 					BRASERO_MEDIUM_PLUS|
 					BRASERO_MEDIUM_RESTRICTED|
 					BRASERO_MEDIUM_SEQUENTIAL|
+					BRASERO_MEDIUM_JUMP|
 					BRASERO_MEDIUM_WRITABLE|
 					BRASERO_MEDIUM_REWRITABLE|
 					BRASERO_MEDIUM_BLANK|
@@ -712,6 +717,7 @@
 	/* growisofs has the possibility to record to closed DVD+RW/-restricted
 	 * and to append some more data to them which makes it unique */
 	output = brasero_caps_disc_new (BRASERO_MEDIUM_DVD|
+					BRASERO_MEDIUM_DVD_DL|
 					BRASERO_MEDIUM_PLUS|
 					BRASERO_MEDIUM_RESTRICTED|
 					BRASERO_MEDIUM_REWRITABLE|
@@ -725,7 +731,9 @@
 	 * NOTE: DAO et MULTI are exclusive. */
 	brasero_plugin_set_flags (plugin,
 				  BRASERO_MEDIUM_DVD|
+				  BRASERO_MEDIUM_DVD_DL|
 				  BRASERO_MEDIUM_SEQUENTIAL|
+				  BRASERO_MEDIUM_JUMP|
 				  BRASERO_MEDIUM_WRITABLE|
 				  BRASERO_MEDIUM_REWRITABLE|
 				  BRASERO_MEDIUM_BLANK,
@@ -738,7 +746,9 @@
 
 	brasero_plugin_set_flags (plugin,
 				  BRASERO_MEDIUM_DVD|
+				  BRASERO_MEDIUM_DVD_DL|
 				  BRASERO_MEDIUM_SEQUENTIAL|
+				  BRASERO_MEDIUM_JUMP|
 				  BRASERO_MEDIUM_WRITABLE|
 				  BRASERO_MEDIUM_REWRITABLE|
 				  BRASERO_MEDIUM_BLANK,
@@ -751,7 +761,9 @@
 
 	brasero_plugin_set_flags (plugin,
 				  BRASERO_MEDIUM_DVD|
+				  BRASERO_MEDIUM_DVD_DL|
 				  BRASERO_MEDIUM_SEQUENTIAL|
+				  BRASERO_MEDIUM_JUMP|
 				  BRASERO_MEDIUM_WRITABLE|
 				  BRASERO_MEDIUM_REWRITABLE|
 				  BRASERO_MEDIUM_APPENDABLE|
@@ -813,6 +825,7 @@
 	/* DVD+ R/RW don't support dummy mode */
 	brasero_plugin_set_flags (plugin,
 				  BRASERO_MEDIUM_DVDR_PLUS|
+				  BRASERO_MEDIUM_DVD_DL|
 				  BRASERO_MEDIUM_BLANK,
 				  BRASERO_BURN_FLAG_DAO|
 				  BRASERO_BURN_FLAG_BURNPROOF|
@@ -822,6 +835,7 @@
 
 	brasero_plugin_set_flags (plugin,
 				  BRASERO_MEDIUM_DVDR_PLUS|
+				  BRASERO_MEDIUM_DVD_DL|
 				  BRASERO_MEDIUM_BLANK,
 				  BRASERO_BURN_FLAG_BURNPROOF|
 				  BRASERO_BURN_FLAG_OVERBURN|
@@ -831,6 +845,7 @@
 
 	brasero_plugin_set_flags (plugin,
 				  BRASERO_MEDIUM_DVDR_PLUS|
+				  BRASERO_MEDIUM_DVD_DL|
 				  BRASERO_MEDIUM_APPENDABLE|
 				  BRASERO_MEDIUM_HAS_DATA,
 				  BRASERO_BURN_FLAG_BURNPROOF|
@@ -849,6 +864,7 @@
 	/* for DVD+RW */
 	brasero_plugin_set_flags (plugin,
 				  BRASERO_MEDIUM_DVDRW_PLUS|
+				  BRASERO_MEDIUM_DVD_DL|
 				  BRASERO_MEDIUM_BLANK,
 				  BRASERO_BURN_FLAG_MULTI|
 				  BRASERO_BURN_FLAG_DAO|
@@ -859,6 +875,7 @@
 
 	brasero_plugin_set_flags (plugin,
 				  BRASERO_MEDIUM_DVDRW_PLUS|
+				  BRASERO_MEDIUM_DVD_DL|
 				  BRASERO_MEDIUM_APPENDABLE|
 				  BRASERO_MEDIUM_CLOSED|
 				  BRASERO_MEDIUM_HAS_DATA,
@@ -871,6 +888,7 @@
 
 	brasero_plugin_set_flags (plugin,
 				  BRASERO_MEDIUM_DVDRW_PLUS|
+				  BRASERO_MEDIUM_DVD_DL|
 				  BRASERO_MEDIUM_APPENDABLE|
 				  BRASERO_MEDIUM_CLOSED|
 				  BRASERO_MEDIUM_HAS_DATA,
@@ -883,6 +901,7 @@
 
 	/* blank caps for +/restricted RW*/
 	output = brasero_caps_disc_new (BRASERO_MEDIUM_DVD|
+					BRASERO_MEDIUM_DVD_DL|
 					BRASERO_MEDIUM_PLUS|
 					BRASERO_MEDIUM_RESTRICTED|
 					BRASERO_MEDIUM_REWRITABLE|
@@ -908,6 +927,7 @@
 	/* again DVD+RW don't support dummy */
 	brasero_plugin_set_blank_flags (plugin,
 					BRASERO_MEDIUM_DVDRW_PLUS|
+					BRASERO_MEDIUM_DVD_DL|
 					BRASERO_MEDIUM_APPENDABLE|
 					BRASERO_MEDIUM_HAS_DATA|
 					BRASERO_MEDIUM_BLANK|



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