Enabled explicit full formatting of DVD+RW ("de-icing")
This commit is contained in:
parent
2ddea3e96f
commit
7a7bd12ad2
@ -183,7 +183,7 @@ those parameters and eventually raw audio data get extracted and burned as
|
|||||||
audio track. Same is done for suffix .au and SUN Audio.
|
audio track. Same is done for suffix .au and SUN Audio.
|
||||||
.TP
|
.TP
|
||||||
.BI blank= type
|
.BI blank= type
|
||||||
Blank a CD-RW or format a DVD-RW.
|
Blank a CD-RW or format a DVD+/-RW.
|
||||||
This is combinable with burning in the same run of cdrskin.
|
This is combinable with burning in the same run of cdrskin.
|
||||||
The type given with blank= selects the particular behavior:
|
The type given with blank= selects the particular behavior:
|
||||||
.RS
|
.RS
|
||||||
@ -202,15 +202,19 @@ Format a DVD-RW to "Restricted Overwrite". The user should bring some patience.
|
|||||||
(Note: format_overwrite* are not original cdrecord options.)
|
(Note: format_overwrite* are not original cdrecord options.)
|
||||||
.TP
|
.TP
|
||||||
format_overwrite_quickest
|
format_overwrite_quickest
|
||||||
Like format_overwrite without creating a 128 MB trailblazer track.
|
Like format_overwrite without creating a 128 MB trailblazer session.
|
||||||
Leads to "intermediate" state which only allows sequential write
|
Leads to "intermediate" state which only allows sequential write
|
||||||
beginning from address 0.
|
beginning from address 0.
|
||||||
The "intermediate" state ends after the first session of writing data.
|
The "intermediate" state ends after the first session of writing data.
|
||||||
.TP
|
.TP
|
||||||
format_overwrite_full
|
format_overwrite_full
|
||||||
Like format_overwrite but claiming full media size rather than just 128 MB.
|
For DVD-RW this is like format_overwrite but claims full media size
|
||||||
|
rather than just 128 MB.
|
||||||
Most traditional formatting is attempted. No data get written.
|
Most traditional formatting is attempted. No data get written.
|
||||||
Much patience is required.
|
Much patience is required.
|
||||||
|
.br
|
||||||
|
For DVD+RW this is the only supported explicit formatting type. It provides
|
||||||
|
complete "de-icing" so no reader slips on unwritten data areas.
|
||||||
.RE
|
.RE
|
||||||
.TP
|
.TP
|
||||||
.BI \-checkdrive
|
.BI \-checkdrive
|
||||||
|
@ -1823,16 +1823,14 @@ return:
|
|||||||
fprintf(stderr,"\tall\t\tblank the entire disk\n");
|
fprintf(stderr,"\tall\t\tblank the entire disk\n");
|
||||||
fprintf(stderr,"\tdisc\t\tblank the entire disk\n");
|
fprintf(stderr,"\tdisc\t\tblank the entire disk\n");
|
||||||
fprintf(stderr,"\tdisk\t\tblank the entire disk\n");
|
fprintf(stderr,"\tdisk\t\tblank the entire disk\n");
|
||||||
fprintf(stderr,
|
fprintf(stderr,"\tfast\t\tminimally blank the entire disk\n");
|
||||||
"\tfast\t\tminimally blank the entire disk\n");
|
fprintf(stderr,"\tminimal\t\tminimally blank the entire disk\n");
|
||||||
fprintf(stderr,
|
|
||||||
"\tminimal\t\tminimally blank the entire disk\n");
|
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"\tformat_overwrite\tformat a DVD-RW to \"Restricted Overwrite\"\n");
|
"\tformat_overwrite\tformat a DVD-RW to \"Restricted Overwrite\"\n");
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"\tformat_overwrite_full\t\tto \"Restricted Overwrite\" in full size\n");
|
"\tformat_overwrite_quickest\tto \"Restricted Overwrite intermediate\"\n");
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"\tformat_overwrite_quickest\tto \"Restricted Overwrite\" intermediate\n");
|
"\tformat_overwrite_full\tfull-size format a DVD-RW or DVD+RW\n");
|
||||||
|
|
||||||
#else /* ! Cdrskin_extra_leaN */
|
#else /* ! Cdrskin_extra_leaN */
|
||||||
|
|
||||||
@ -3972,26 +3970,38 @@ int Cdrskin_blank(struct CdrskiN *skin, int flag)
|
|||||||
return(0);
|
return(0);
|
||||||
} else if(profile_number == 0x14) { /* DVD-RW sequential */
|
} else if(profile_number == 0x14) { /* DVD-RW sequential */
|
||||||
if(do_format!=1)
|
if(do_format!=1)
|
||||||
goto unsupported_with_dvd_minus_rw;
|
goto unsupported_format_type;
|
||||||
} else if(profile_number == 0x13) { /* DVD-RW restricted overwrite */
|
} else if(profile_number == 0x13) { /* DVD-RW restricted overwrite */
|
||||||
if(do_format==1 && skin->force_is_set) {
|
if(do_format==1 && skin->force_is_set) {
|
||||||
/* ok */;
|
/* ok */;
|
||||||
} else if(do_format!=1) {
|
} else if(do_format!=1) {
|
||||||
unsupported_with_dvd_minus_rw:;
|
unsupported_format_type:;
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"cdrskin: SORRY : blank=%s : unsupported format type with DVD-RW\n",
|
"cdrskin: SORRY : blank=%s : unsupported format and/or media type\n",
|
||||||
fmt_text);
|
fmt_text);
|
||||||
return(0);
|
return(0);
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"cdrskin: SORRY : blank=format_overwrite : media is already formatted\n");
|
"cdrskin: NOTE : blank=format_... : media is already formatted\n");
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"cdrskin: HINT : If you really want to re-format, try option -force\n");
|
"cdrskin: HINT : If you really want to re-format, add option -force\n");
|
||||||
|
return(2);
|
||||||
|
}
|
||||||
|
} else if(profile_number == 0x1a) { /* DVD+RW */
|
||||||
|
if(do_format!=1)
|
||||||
|
goto unsupported_format_type;
|
||||||
|
if(!((skin->blank_format_type>>8)&4)) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"cdrskin: NOTE : blank=format_... : DVD+RW do not need this\n");
|
||||||
|
fprintf(stderr,
|
||||||
|
"cdrskin: HINT : For de-icing use option blank=format_overwrite_full");
|
||||||
|
fprintf(stderr,
|
||||||
|
"cdrskin: HINT : If you really want to re-format, add option -force\n");
|
||||||
return(2);
|
return(2);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"cdrskin: SORRY : blank=%s for now does DVD-RW only\n",fmt_text);
|
"cdrskin: SORRY : blank=%s for now does DVD+/-RW only\n",fmt_text);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
if(s==BURN_DISC_UNSUITABLE)
|
if(s==BURN_DISC_UNSUITABLE)
|
||||||
@ -4065,12 +4075,12 @@ unsupported_with_dvd_minus_rw:;
|
|||||||
while(burn_drive_get_status(drive, &p) != BURN_DRIVE_IDLE) {
|
while(burn_drive_get_status(drive, &p) != BURN_DRIVE_IDLE) {
|
||||||
if(loop_counter>0)
|
if(loop_counter>0)
|
||||||
if(skin->verbosity>=Cdrskin_verbose_progresS) {
|
if(skin->verbosity>=Cdrskin_verbose_progresS) {
|
||||||
int percent= 50;
|
double percent= 50.0;
|
||||||
|
|
||||||
if(p.sectors>0) /* i want a display of 1 to 99 percent */
|
if(p.sectors>0) /* i want a display of 1 to 99 percent */
|
||||||
percent= 1.0+((double) p.sector+1.0)/((double) p.sectors)*98.0;
|
percent= 1.0+((double) p.sector+1.0)/((double) p.sectors)*98.0;
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"\rcdrskin: %s ( done %2d%% , %lu seconds elapsed ) ",
|
"\rcdrskin: %s ( done %.1f%% , %lu seconds elapsed ) ",
|
||||||
presperf,percent,(unsigned long) (Sfile_microtime(0)-start_time));
|
presperf,percent,(unsigned long) (Sfile_microtime(0)-start_time));
|
||||||
}
|
}
|
||||||
sleep(1);
|
sleep(1);
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Cdrskin_timestamP "2007.01.10.152812"
|
#define Cdrskin_timestamP "2007.01.10.204839"
|
||||||
|
@ -280,10 +280,14 @@ void burn_disc_format(struct burn_drive *drive, off_t size, int flag)
|
|||||||
|
|
||||||
if (drive->current_profile == 0x14)
|
if (drive->current_profile == 0x14)
|
||||||
ok = 1; /* DVD-RW sequential */
|
ok = 1; /* DVD-RW sequential */
|
||||||
if (drive->current_profile == 0x13 && (flag & 16))
|
else if (drive->current_profile == 0x13 && (flag & 16))
|
||||||
ok = 1; /* DVD-RW Restricted Overwrite with force bit */
|
ok = 1; /* DVD-RW Restricted Overwrite with force bit */
|
||||||
|
else if (drive->current_profile == 0x1a) {
|
||||||
/* >>> DVD+RW with and without force bit ? */
|
ok = 1; /* DVD+RW */
|
||||||
|
size = 0;
|
||||||
|
flag &= ~(2|8); /* no insisting in size 0, no expansion */
|
||||||
|
flag |= 4; /* format up to maximum size */
|
||||||
|
}
|
||||||
|
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
sprintf(msg,"Will not format media type %4.4Xh",
|
sprintf(msg,"Will not format media type %4.4Xh",
|
||||||
|
@ -1304,17 +1304,24 @@ int mmc_format_unit(struct burn_drive *d, off_t size, int flag)
|
|||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
c.page->data[4 + i] = (num_of_blocks >> (24 - 8 * i)) & 0xff;
|
c.page->data[4 + i] = (num_of_blocks >> (24 - 8 * i)) & 0xff;
|
||||||
if (d->current_profile == 0x1a) { /* DVD+RW */
|
if (d->current_profile == 0x1a) { /* DVD+RW */
|
||||||
/* >>> use case: background formatting during write */
|
/* >>> use case: background formatting during write !(flag&4)
|
||||||
|
de-icing as explicit formatting action (flag&4)
|
||||||
|
*/
|
||||||
|
|
||||||
/* mmc5r03c.pdf , 6.5.4.2.14, DVD+RW Basic Format */
|
/* mmc5r03c.pdf , 6.5.4.2.14, DVD+RW Basic Format */
|
||||||
format_type = 0x26;
|
format_type = 0x26;
|
||||||
|
|
||||||
if ((size <= 0 && !(flag & 2)) || (flag & (4 | 8)))
|
if ((size <= 0 && !(flag & 2)) || (flag & (4 | 8))) {
|
||||||
/* maximum capacity */
|
/* maximum capacity */
|
||||||
memset(c.page->data + 4, 0xff, 4);
|
memset(c.page->data + 4, 0xff, 4);
|
||||||
|
num_of_blocks = 0xffffffff;
|
||||||
|
}
|
||||||
|
|
||||||
if(d->bg_format_status == 2) { /* format in progress */
|
if(d->bg_format_status == 2 ||
|
||||||
strcpy(msg,"FORMAT UNIT ignored. Already in progress");
|
(d->bg_format_status == 3 && !(flag & 16))) {
|
||||||
|
sprintf(msg,"FORMAT UNIT ignored. Already %s.",
|
||||||
|
(d->bg_format_status == 2 ? "in progress" :
|
||||||
|
"completed"));
|
||||||
libdax_msgs_submit(libdax_messenger, d->global_index,
|
libdax_msgs_submit(libdax_messenger, d->global_index,
|
||||||
0x00020120,
|
0x00020120,
|
||||||
LIBDAX_MSGS_SEV_NOTE, LIBDAX_MSGS_PRIO_HIGH,
|
LIBDAX_MSGS_SEV_NOTE, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
@ -1324,7 +1331,10 @@ int mmc_format_unit(struct burn_drive *d, off_t size, int flag)
|
|||||||
if (!(flag & 16)) /* if not re-format is desired */
|
if (!(flag & 16)) /* if not re-format is desired */
|
||||||
if (d->bg_format_status == 1) /* is partly formatted */
|
if (d->bg_format_status == 1) /* is partly formatted */
|
||||||
c.page->data[11] = 1; /* Restart bit */
|
c.page->data[11] = 1; /* Restart bit */
|
||||||
sprintf(descr, "DVD+RW, BGFS %d", d->bg_format_status);
|
sprintf(descr, "DVD+RW (fs=%d,rs=%d)",
|
||||||
|
d->bg_format_status, (c.page->data[11] == 1));
|
||||||
|
if (flag & 4)
|
||||||
|
return_immediately = 1;/* caller must do the waiting */
|
||||||
|
|
||||||
} else if (d->current_profile == 0x13 && !(flag & 16)) {
|
} else if (d->current_profile == 0x13 && !(flag & 16)) {
|
||||||
/*DVD-RW restricted overwrite*/
|
/*DVD-RW restricted overwrite*/
|
||||||
@ -1363,7 +1373,7 @@ int mmc_format_unit(struct burn_drive *d, off_t size, int flag)
|
|||||||
/* 6.5.4.2.8 , DVD-RW Quick Grow Last Border */
|
/* 6.5.4.2.8 , DVD-RW Quick Grow Last Border */
|
||||||
format_type = 0x13;
|
format_type = 0x13;
|
||||||
c.page->data[11] = 16; /* block size * 2k */
|
c.page->data[11] = 16; /* block size * 2k */
|
||||||
sprintf(descr, "DVD-RW, quick grow");
|
sprintf(descr, "DVD-RW quick grow");
|
||||||
|
|
||||||
} else if (d->current_profile == 0x14 ||
|
} else if (d->current_profile == 0x14 ||
|
||||||
(d->current_profile == 0x13 && (flag & 16))) {
|
(d->current_profile == 0x13 && (flag & 16))) {
|
||||||
@ -1398,7 +1408,8 @@ int mmc_format_unit(struct burn_drive *d, off_t size, int flag)
|
|||||||
}
|
}
|
||||||
format_type = d->best_format_type;
|
format_type = d->best_format_type;
|
||||||
c.page->data[11] = 16; /* block size * 2k */
|
c.page->data[11] = 16; /* block size * 2k */
|
||||||
sprintf(descr, "DVD-RW, quick");
|
sprintf(descr, "DVD-RW %s",
|
||||||
|
format_type == 0x15 ? "quick" : "full");
|
||||||
return_immediately = 1; /* caller must do the waiting */
|
return_immediately = 1; /* caller must do the waiting */
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -1415,8 +1426,8 @@ int mmc_format_unit(struct burn_drive *d, off_t size, int flag)
|
|||||||
}
|
}
|
||||||
c.page->data[8] = format_type << 2;
|
c.page->data[8] = format_type << 2;
|
||||||
|
|
||||||
sprintf(msg, "Format type %2.2Xh , blocks = %d\n",
|
sprintf(msg, "Format type %2.2Xh \"%s\", blocks = %.f\n",
|
||||||
format_type, (int) num_of_blocks);
|
format_type, descr, (double) num_of_blocks);
|
||||||
libdax_msgs_submit(libdax_messenger, d->global_index, 0x00000002,
|
libdax_msgs_submit(libdax_messenger, d->global_index, 0x00000002,
|
||||||
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_ZERO,
|
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_ZERO,
|
||||||
msg, 0, 0);
|
msg, 0, 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user