Began to implement formatting of DVD-RAM and experimentally of BD-RE

This commit is contained in:
2008-04-18 09:28:16 +00:00
parent dbec2d53a3
commit 54f56d1dd2
3 changed files with 64 additions and 22 deletions

View File

@ -3121,13 +3121,23 @@ struct CdrskiN {
int no_blank_appendable;
int blank_format_type; /* 0=blank
bit0-7:
1=format_overwrite
1=format_overwrite for DVD+RW, DVD-RW
bit8-15: bit0-7 of burn_disc_format(flag)
bit8 = write zeros after formatting
bit9 = insist in size 0
bit10= format to maximum available size
bit11= - reserved -
bit12= - reserved -
bit13= - reserved -
2=deformat_sequential (blank_fast might matter)
3=format (= format_overwrite restricted to DVD+RW)
4=format_defectmgt for DVD-RAM, BD-RE
bit8 = write zeros after formatting
bit9 = - reserved -
bit10= format to maximum available size
bit11= - reserved -
bit12= - reserved -
bit13= try to disable defect management
*/
double blank_format_size; /* to be used with burn_disc_format() */
@ -4947,8 +4957,9 @@ int Cdrskin_blank(struct CdrskiN *skin, int flag)
char *verb= "blank", *presperf="blanking", *fmt_text= "...";
char profile_name[80];
static char fmtp[][40]= {
"format_default", "format_overwrite", "deformat_sequential"};
static int fmtp_max= 2;
"format_default", "format_overwrite", "deformat_sequential",
"format_defectmgt"};
static int fmtp_max= 3;
start_time= Sfile_microtime(0); /* will be refreshed later */
ret= Cdrskin_grab_drive(skin,0);
@ -4965,7 +4976,7 @@ int Cdrskin_blank(struct CdrskiN *skin, int flag)
if(skin->verbosity>=Cdrskin_verbose_progresS)
Cdrskin_report_disc_status(skin,s,1);
do_format= skin->blank_format_type & 0xff;
if(do_format == 1 || do_format == 3) {
if(do_format == 1 || do_format == 3 || do_format == 4) {
verb= "format";
presperf= "formatting";
}
@ -5025,22 +5036,34 @@ int Cdrskin_blank(struct CdrskiN *skin, int flag)
"cdrskin: HINT : For de-icing use option blank=format_overwrite_full\n");
{ret= 2; goto ex;}
}
} else if((profile_number == 0x12 && skin->preskin->allow_untested_media) ||
(profile_number == 0x43 && skin->preskin->allow_untested_media)) {
} else {
fprintf(stderr,
"cdrskin: SORRY : blank=%s for now does DVD-RW and DVD+RW only\n",
fmt_text);
{ret= 0; goto ex;}
}
if(s==BURN_DISC_UNSUITABLE)
fprintf(stderr,
"cdrskin: NOTE : blank=%s accepted not yet suitable media\n",
fmt_text);
} else if(do_format==4) {
/* Formatting and influencing defect management of DVD-RAM , BD-RE */
if((profile_number == 0x12 && skin->preskin->allow_untested_media) ||
(profile_number == 0x43 && skin->preskin->allow_untested_media)) {
/* <<<
fprintf(stderr,
"cdrskin: SORRY : Formatting of DVD-RAM and BD-RE is not implemented yet\n");
{ret= 0; goto ex;}
*/
/* <<< for now strictly experimental */
/* DVD-RAM , BD-RE */
/* >>> check whether the current format is already 0x00 of maximum size */
/* >>> demand bit10 of blank_format_type or size>0 */;
/* >>> check whether the current media is already formatted */;
} else {
fprintf(stderr,
"cdrskin: SORRY : blank=%s for now does DVD+/-RW only\n",fmt_text);
"cdrskin: SORRY : blank=%s for now does DVD-RAM and BD-RE only\n",
fmt_text);
{ret= 0; goto ex;}
}
if(s==BURN_DISC_UNSUITABLE)
@ -5110,7 +5133,8 @@ unsupported_format_type:;
Cdrskin_adjust_speed(skin,0);
#ifndef Cdrskin_extra_leaN
Cdrskin_wait_before_action(skin,1+(do_format==1 || do_format==3));
Cdrskin_wait_before_action(skin,
1+(do_format==1 || do_format==3 || do_format==4));
#endif /* ! Cdrskin_extra_leaN */
skin->drive_is_busy= 1;
@ -5118,9 +5142,10 @@ unsupported_format_type:;
burn_disc_erase(drive,skin->blank_fast);
#ifdef Cdrskin_libburn_has_burn_disc_formaT
} else if(do_format==1 || do_format==3) {
} else if(do_format==1 || do_format==3 || do_format==4) {
burn_disc_format(drive,(off_t) skin->blank_format_size,
((skin->blank_format_type>>8)&7) | ((!!skin->force_is_set)<<4));
((skin->blank_format_type>>8)&(1|2|4|32)) |
((!!skin->force_is_set)<<4));
#endif
} else {
@ -5154,7 +5179,8 @@ blanking_done:;
"\rcdrskin: %s done \n",
presperf);
printf("%s time: %.3fs\n",
(do_format==1 || do_format==3?"Formatting":"Blanking"),
(do_format==1 || do_format==3 || do_format==4 ?
"Formatting":"Blanking"),
Sfile_microtime(0)-start_time);
}
fflush(stdout);
@ -6967,6 +6993,22 @@ set_blank:;
skin->blank_format_type= 1;
skin->blank_format_size= 0;
skin->preskin->demands_cdrskin_caps= 1;
} else if(strncmp(cpt,"format_defectmgt",16)==0) {
skin->do_blank= 1;
skin->blank_format_type= 4;
skin->blank_format_size= 0;
skin->preskin->demands_cdrskin_caps= 1;
if(cpt[16]=='_') {
cpt+= 17;
if(strcmp(cpt,"none")==0)
skin->blank_format_type|= (1<<13);
else if(strcmp(cpt,"max")==0)
;
else if(strcmp(cpt,"min")==0)
skin->blank_format_type|= (1<<10);
else if(isdigit(*cpt))
skin->blank_format_size= Scanf_io_size(cpt,0);
}
} else if(strcmp(cpt,"deformat_sequential")==0) {
skin->do_blank= 1;
skin->blank_format_type= 2;