From 65cf751a30279dcbeb940e312bd0f7a9291f6908 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Fri, 18 Apr 2008 09:28:16 +0000 Subject: [PATCH] Began to implement formatting of DVD-RAM and experimentally of BD-RE --- cdrskin/cdrskin.1 | 10 ++--- cdrskin/cdrskin.c | 74 +++++++++++++++++++++++++++++-------- cdrskin/cdrskin_timestamp.h | 2 +- 3 files changed, 64 insertions(+), 22 deletions(-) diff --git a/cdrskin/cdrskin.1 b/cdrskin/cdrskin.1 index c0d876c..9d3267a 100644 --- a/cdrskin/cdrskin.1 +++ b/cdrskin/cdrskin.1 @@ -2,7 +2,7 @@ .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) -.TH CDRSKIN 1 "April 12, 2008" +.TH CDRSKIN 1 "April 17, 2008" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -1087,10 +1087,10 @@ original cdrecord. .TP .BI stream_recording="on"|"off" By setting "on" request that compliance to the desired speed setting is -preferred over management of write errors. With DVD-RAM this can bring -effective write speed near to the nominal write speed of the media. But it -will also disable the automatic use of replacement blocks if write errors -occur. It might as well be disliked or ignored by the drive. +preferred over management of write errors. With DVD-RAM and BD-RE this can +bring effective write speed near to the nominal write speed of the media. +But it will also disable the automatic use of replacement blocks +if write errors occur. It might as well be disliked or ignored by the drive. .br .SH EXAMPLES .SS diff --git a/cdrskin/cdrskin.c b/cdrskin/cdrskin.c index dbcc36d..d5e7f34 100644 --- a/cdrskin/cdrskin.c +++ b/cdrskin/cdrskin.c @@ -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; diff --git a/cdrskin/cdrskin_timestamp.h b/cdrskin/cdrskin_timestamp.h index 9cb1180..8a657cf 100644 --- a/cdrskin/cdrskin_timestamp.h +++ b/cdrskin/cdrskin_timestamp.h @@ -1 +1 @@ -#define Cdrskin_timestamP "2008.04.18.092715" +#define Cdrskin_timestamP "2008.04.18.092816"