brasero r1016 - in trunk: . src
- From: philippr svn gnome org
- To: svn-commits-list gnome org
- Subject: brasero r1016 - in trunk: . src
- Date: Fri, 18 Jul 2008 12:45:32 +0000 (UTC)
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]