New blank type blank=format_by_index_<number>

This commit is contained in:
2008-04-23 11:02:11 +00:00
parent 67a8050384
commit 13fa08e3b7
4 changed files with 85 additions and 34 deletions

View File

@ -2396,9 +2396,15 @@ return:
fprintf(stderr,
"\tformat_overwrite_quickest\tto \"Restricted Overwrite intermediate\"\n");
fprintf(stderr,
"\tformat_overwrite_full\tfull-size format a DVD-RW or DVD+RW\n");
"\tformat_overwrite_full\t\tfull-size format a DVD-RW or DVD+RW\n");
fprintf(stderr,
"\tdeformat_sequential\tfully blank, even formatted DVD-RW\n");
"\tformat_defectmgt[_max|_min|_none]\tformat DVD-RAM or BD-RE\n");
fprintf(stderr,
"\tformat_defectmgt_payload_<size>\tformat DVD-RAM or BD-RE\n");
fprintf(stderr,
"\tformat_by_index_<number>\tformat by index from --list_formats\n");
fprintf(stderr,
"\tdeformat_sequential\t\tfully blank, even formatted DVD-RW\n");
fprintf(stderr,
"\tdeformat_sequential_quickest\tminimally blank, even DVD-RW\n");
@ -3121,8 +3127,8 @@ struct CdrskiN {
int do_blank;
int blank_fast;
int no_blank_appendable;
int blank_format_type; /* 0=blank
bit0-7:
int blank_format_type; /* bit0-7: job type
0=blank
1=format_overwrite for DVD+RW, DVD-RW
bit8-15: bit0-7 of burn_disc_format(flag)
bit8 = write zeros after formatting
@ -3131,16 +3137,33 @@ struct CdrskiN {
bit11= - reserved -
bit12= - reserved -
bit13= - reserved -
bit15= format by index
2=deformat_sequential (blank_fast might matter)
3=format (= format_overwrite restricted to DVD+RW)
4=format_defectmgt for DVD-RAM, BD-RE
bit8-15: bit0-7 of burn_disc_format(flag)
bit8 = write zeros after formatting
bit9 = - reserved -
bit10= format to maximum available size
bit9+10: size mode
0 = use parameter size as far as it makes sense
1 = (identical to size mode 0)
2 = without bit7: format to maximum size
with bit7 : take size from indexed format
descriptor
3 = without bit7: format to default size
with bit7 : take size from indexed format
descriptor
bit11= - reserved -
bit12= - reserved -
bit13= try to disable defect management
bit15= format by index
5=format_by_index
gets mapped to 4 with DVD-RAM and BD-RE else to 1,
bit15 should be set and bit16-23 should contain
a usable index number
bit8-15: bit0-7 of burn_disc_format(flag)
depending on job type
*/
int blank_format_index; /* bit8-15 of burn_disc_format(flag) */
double blank_format_size; /* to be used with burn_disc_format() */
int do_direct_write;
@ -3302,6 +3325,7 @@ int Cdrskin_new(struct CdrskiN **skin, struct CdrpreskiN *preskin, int flag)
o->blank_fast= 0;
o->no_blank_appendable= 0;
o->blank_format_type= 0;
o->blank_format_index= -1;
o->blank_format_size= 0.0;
o->do_direct_write= 0;
o->do_burn= 0;
@ -5022,14 +5046,14 @@ int Cdrskin_blank(struct CdrskiN *skin, int flag)
struct burn_progress p;
struct burn_drive *drive;
int ret,loop_counter= 0,hint_force= 0,do_format= 0, profile_number= -1;
int wrote_well= 1;
int wrote_well= 1, format_flag= 0;
double start_time;
char *verb= "blank", *presperf="blanking", *fmt_text= "...";
char profile_name[80];
static char fmtp[][40]= {
"format_default", "format_overwrite", "deformat_sequential",
"format_defectmgt"};
static int fmtp_max= 3;
"format_defectmgt", "format_by_index", ""};
static int fmtp_max= 5;
start_time= Sfile_microtime(0); /* will be refreshed later */
ret= Cdrskin_grab_drive(skin,0);
@ -5046,7 +5070,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 || do_format == 4) {
if(do_format == 1 || do_format == 3 || do_format == 4 || do_format == 5) {
verb= "format";
presperf= "formatting";
}
@ -5065,6 +5089,12 @@ int Cdrskin_blank(struct CdrskiN *skin, int flag)
if(do_format)
if(do_format>=0 && do_format<=fmtp_max)
fmt_text= fmtp[do_format];
if(do_format==5) {
if(profile_number == 0x12 || profile_number == 0x43)
do_format= 4;
else
do_format= 1;
}
if(do_format==2) {
/* Forceful blanking to Sequential Recording for DVD-R[W] and CD-RW */
@ -5119,15 +5149,9 @@ int Cdrskin_blank(struct CdrskiN *skin, int flag)
} else if(do_format==4) {
/* Formatting and influencing defect management of DVD-RAM , BD-RE */
if((profile_number == 0x12 && skin->preskin->allow_untested_media) ||
if(profile_number == 0x12 ||
(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;}
*/
/* >>> check whether the current media is already formatted */;
} else {
@ -5213,9 +5237,12 @@ unsupported_format_type:;
#ifdef Cdrskin_libburn_has_burn_disc_formaT
} 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)&(1|2|4|32)) |
((!!skin->force_is_set)<<4));
format_flag= (skin->blank_format_type>>8)&(1|2|4|32|128);
if(skin->force_is_set)
format_flag|= 16;
if(format_flag&128)
format_flag|= (skin->blank_format_index&255)<<8;
burn_disc_format(drive,(off_t) skin->blank_format_size,format_flag);
#endif
} else {
@ -6879,7 +6906,7 @@ sorry_failed_to_eject:;
*/
int Cdrskin_setup(struct CdrskiN *skin, int argc, char **argv, int flag)
{
int i,k,l,ret,source_has_size=0;
int i,k,l,ret,source_has_size=0, idx= -1;
double value,grab_and_wait_value= -1.0;
char *cpt,*value_pt,adr[Cdrskin_adrleN],*blank_mode= "";
struct stat stbuf;
@ -7081,6 +7108,20 @@ set_blank:;
skin->blank_format_type= 4;
}
}
skin->preskin->demands_cdrskin_caps= 1;
} else if(strncmp(cpt,"format_by_index_",16)==0) {
sscanf(cpt+16, "%d", &idx);
if(idx<0 || idx>255) {
fprintf(stderr,"cdrskin: SORRY : blank=%s provides unusable index\n",
cpt);
return(0);
}
skin->do_blank= 1;
skin->blank_format_type= 5|(2<<9)|(1<<15);
skin->blank_format_index= idx;
skin->blank_format_size= 0;
skin->preskin->demands_cdrskin_caps= 1;
} else if(strcmp(cpt,"deformat_sequential")==0) {
skin->do_blank= 1;
skin->blank_format_type= 2;
@ -7360,9 +7401,11 @@ gracetime_equals:;
} else if(strcmp(argv[i],"--list_formats")==0) {
skin->do_list_formats= 1;
skin->preskin->demands_cdrskin_caps= 1;
} else if(strcmp(argv[i],"--list_ignored_options")==0) {
char line[80];
/* is also handled in Cdrpreskin_setup() */;
line[0]= 0;
printf("cdrskin: List of all ignored options:\n");