From 9bb2bcd34ed53830e24cb693f8593791f25b43b3 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Tue, 9 Jan 2007 21:14:47 +0000 Subject: [PATCH] Now available: "quickest" and "full" formatting for DVD-RW --- libburn/trunk/cdrskin/README | 15 ++++++++++ libburn/trunk/cdrskin/cdrskin.1 | 13 ++++++++- libburn/trunk/cdrskin/cdrskin.c | 34 +++++++++++++++++++---- libburn/trunk/cdrskin/cdrskin_timestamp.h | 2 +- 4 files changed, 57 insertions(+), 7 deletions(-) diff --git a/libburn/trunk/cdrskin/README b/libburn/trunk/cdrskin/README index c097eae3..25d5f647 100644 --- a/libburn/trunk/cdrskin/README +++ b/libburn/trunk/cdrskin/README @@ -414,6 +414,21 @@ from the drive and last several minutes. Depending on mutual compatibility of drive and media, formatting can yield unusable media. It seems that those die too on blanking by cdrecord or dvd+rw-format. Perils of DVD-RW, i fear. +There are three formatting variants with cdrskin currently: + +blank=format_overwrite uses "DVD-RW Quick" formatting (MMC-type 15h) +and writes a first session of 128 MB. This leads to media which are expandable +and random addressable by cdrskin. + +blank=format_overwrite_quickest uses "DVD-RW Quick" formatting (type 15h) too +but leaves the media in "intermediate" state. One may only write sequentially +to such a DVD. This restriction is lifted after the first write session. + +blank=format_overwrite_full uses preferrably "DVD-RW Full Format" (type 10h) +and writes a single 32 kB block to address 0 (in case only type 15h is +available). This formatting lasts as long as writing a full DVD but seems +to yield best quality. + Special compilation variations diff --git a/libburn/trunk/cdrskin/cdrskin.1 b/libburn/trunk/cdrskin/cdrskin.1 index c0fd9071..9870c75f 100644 --- a/libburn/trunk/cdrskin/cdrskin.1 +++ b/libburn/trunk/cdrskin/cdrskin.1 @@ -199,7 +199,18 @@ Minimally blank an entire CD. .TP format_overwrite Format a DVD-RW to "Restricted Overwrite". The user should bring some patience. -(Note: this is not an original cdrecord option.) +(Note: format_overwrite* are not original cdrecord options.) +.TP +format_overwrite_quickest +Like format_overwrite without creating a 128 MB trailblazer track. +Leads to "intermediate" state which only allows sequential write +beginning from address 0. +The "intermediate" state ends after the first session of writing data. +.TP +format_overwrite_full +Like format_overwrite but claiming full media size rather than just 128 MB. +Only a minimal data packet gets written. Much patience is required. +May lead to media which have very few time overhead before and after write. .RE .TP .BI \-checkdrive diff --git a/libburn/trunk/cdrskin/cdrskin.c b/libburn/trunk/cdrskin/cdrskin.c index 3d1d7254..e1246e7b 100644 --- a/libburn/trunk/cdrskin/cdrskin.c +++ b/libburn/trunk/cdrskin/cdrskin.c @@ -1829,6 +1829,10 @@ return: "\tminimal\t\tminimally blank the entire disk\n"); fprintf(stderr, "\tformat_overwrite\tformat a DVD-RW to \"Restricted Overwrite\"\n"); + fprintf(stderr, + "\tformat_overwrite_full\t\tto \"Restricted Overwrite\" in full size\n"); + fprintf(stderr, + "\tformat_overwrite_quickest\tto \"Restricted Overwrite\" intermediate\n"); #else /* ! Cdrskin_extra_leaN */ @@ -2377,8 +2381,16 @@ struct CdrskiN { int do_blank; int blank_fast; int no_blank_appendable; - int blank_format_type; /* 0=blank, 1 to 255 like with burn_disc_format(flag): - 1=format_overwrite, 2=format_sequential */ + int blank_format_type; /* 0=blank + bit0-7: + 1=format_overwrite + 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 + 2=format_sequential (unimplemented yet) + */ + double blank_format_size; /* to be used with burn_disc_format() */ int do_burn; int burnfree; @@ -2503,6 +2515,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_size= 0.0; o->do_burn= 0; o->write_type= BURN_WRITE_SAO; o->block_type= BURN_BLOCK_SAO; @@ -2911,7 +2924,8 @@ int Cdrskin_abort_handler(struct CdrskiN *skin, int signum, int flag) Cleanup_set_handlers(NULL,NULL,1); /* allow abort */ return(0); /* let exit */ } -#endif /* Not_yeT */ +#endif + usleep(1000000); return(-2); /* do only process the control thread */ } @@ -3928,7 +3942,7 @@ int Cdrskin_blank(struct CdrskiN *skin, int flag) if(skin->verbosity>=Cdrskin_verbose_progresS) Cdrskin_report_disc_status(skin,s,0); - do_format= skin->blank_format_type; + do_format= skin->blank_format_type & 0xff; if(do_format) { verb= "format"; presperf= "formatting"; @@ -4031,7 +4045,8 @@ unsupported_with_dvd_minus_rw:; #ifdef Cdrskin_libburn_has_burn_disc_formaT } else if(do_format==1) { - burn_disc_format(drive,(off_t) 128*1024*1024,1); + burn_disc_format(drive,(off_t) skin->blank_format_size, + (skin->blank_format_type>>8)&0xff); #endif } else { @@ -5131,8 +5146,17 @@ set_blank:; skin->blank_fast= 1; blank_mode= "fast"; } else if(strcmp(cpt,"format_overwrite")==0) { + skin->do_blank= 1; + skin->blank_format_type= 1|(1<<8); + skin->blank_format_size= 128*1024*1024; + } else if(strcmp(cpt,"format_overwrite_full")==0) { + skin->do_blank= 1; + skin->blank_format_type= 1|(1<<8)|(1<<10); + skin->blank_format_size= 32*1024; /* write just a minimal packet */ + } else if(strcmp(cpt,"format_overwrite_quickest")==0) { skin->do_blank= 1; skin->blank_format_type= 1; + skin->blank_format_size= 0; } else if(strcmp(cpt,"format_sequential")==0) { skin->do_blank= 1; skin->blank_format_type= 2; diff --git a/libburn/trunk/cdrskin/cdrskin_timestamp.h b/libburn/trunk/cdrskin/cdrskin_timestamp.h index 01814970..0c81b9e7 100644 --- a/libburn/trunk/cdrskin/cdrskin_timestamp.h +++ b/libburn/trunk/cdrskin/cdrskin_timestamp.h @@ -1 +1 @@ -#define Cdrskin_timestamP "2007.01.09.140302" +#define Cdrskin_timestamP "2007.01.09.211152"