brasero r1016 - in trunk: . src



Author: philippr
Date: Fri Jul 18 12:45:32 2008
New Revision: 1016
URL: http://svn.gnome.org/viewvc/brasero?rev=1016&view=rev

Log:
	Try to workaround an error (invalid track mode) when reading
	with READ CD by autodetecting data mode

	* src/burn-volume-source.c
	(brasero_volume_source_read_device_handle):
	* src/burn-volume-source.h:
	* src/scsi-read-cd.c (brasero_mmc1_read_block):


Modified:
   trunk/ChangeLog
   trunk/src/burn-volume-source.c
   trunk/src/burn-volume-source.h
   trunk/src/scsi-read-cd.c

Modified: trunk/src/burn-volume-source.c
==============================================================================
--- trunk/src/burn-volume-source.c	(original)
+++ trunk/src/burn-volume-source.c	Fri Jul 18 12:45:32 2008
@@ -104,7 +104,7 @@
 
 	result = brasero_mmc1_read_block (src->data,
 					  TRUE,
-					  BRASERO_SCSI_BLOCK_TYPE_ANY,
+					  src->data_mode,
 					  BRASERO_SCSI_BLOCK_HEADER_NONE,
 					  BRASERO_SCSI_BLOCK_NO_SUBCHANNEL,
 					  src->position ++,
@@ -112,14 +112,42 @@
 					  (unsigned char *) buffer,
 					  blocks * ISO9660_BLOCK_SIZE,
 					  &code);
-
 	if (result == BRASERO_SCSI_OK)
 		return TRUE;
 
+	/* Give it a last chance if the code is BRASERO_SCSI_INVALID_TRACK_MODE */
+	if (code == BRASERO_SCSI_INVALID_TRACK_MODE) {
+		BRASERO_BURN_LOG ("Wrong track mode autodetecting mode for block %i", src->position);
+
+		for (src->data_mode = BRASERO_SCSI_BLOCK_TYPE_CDDA;
+		     src->data_mode <= BRASERO_SCSI_BLOCK_TYPE_MODE2_FORM2;
+		     src->data_mode ++) {
+			result = brasero_mmc1_read_block (src->data,
+							  TRUE,
+							  src->data_mode,
+							  BRASERO_SCSI_BLOCK_HEADER_NONE,
+							  BRASERO_SCSI_BLOCK_NO_SUBCHANNEL,
+							  src->position ++,
+							  blocks,
+							  (unsigned char *) buffer,
+							  blocks * ISO9660_BLOCK_SIZE,
+							  &code);
+
+			if (result == BRASERO_SCSI_OK)
+				return TRUE;
+
+			if (result != BRASERO_SCSI_INVALID_TRACK_MODE) {
+				src->data_mode = BRASERO_SCSI_BLOCK_TYPE_ANY;
+				break;
+			}
+		}
+	}
+
 	g_set_error (error,
 		     BRASERO_BURN_ERROR,
 		     BRASERO_BURN_ERROR_GENERAL,
 		     brasero_scsi_strerror (code));
+
 	return FALSE;
 }
 

Modified: trunk/src/burn-volume-source.h
==============================================================================
--- trunk/src/burn-volume-source.h	(original)
+++ trunk/src/burn-volume-source.h	Fri Jul 18 12:45:32 2008
@@ -46,6 +46,7 @@
 	BraseroVolSrcSeekFunc seek;
 	guint64 position;
 	gpointer data;
+	guint data_mode;
 	guint ref;
 };
 

Modified: trunk/src/scsi-read-cd.c
==============================================================================
--- trunk/src/scsi-read-cd.c	(original)
+++ trunk/src/scsi-read-cd.c	Fri Jul 18 12:45:32 2008
@@ -119,7 +119,7 @@
 	/* no sync field included */
 	cdb->sync = 0;
 
-	/* no filtering */
+	/* sector type */
 	cdb->sec_type = type;
 
 	/* header ?*/



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