New cdrskin option use_immed_bit=

This commit is contained in:
Thomas Schmitt 2016-07-30 14:08:29 +00:00
parent 740e726ffe
commit 0731eaa3e0
3 changed files with 43 additions and 7 deletions

View File

@ -2,7 +2,7 @@
.\" First parameter, NAME, should be all caps .\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1) .\" other parameters are allowed: see man(7), man(1)
.TH CDRSKIN 1 "Version 1.4.5, Jul 03, 2016" .TH CDRSKIN 1 "Version 1.4.5, Jul 30, 2016"
.\" Please adjust this date whenever revising the manpage. .\" Please adjust this date whenever revising the manpage.
.\" .\"
.\" Some roff macros, for reference: .\" Some roff macros, for reference:
@ -618,7 +618,8 @@ modesty_on_drive=1:min_percent=75:max_percent=95
The name of this cdrecord option stems from the "Immed" bit which can make some The name of this cdrecord option stems from the "Immed" bit which can make some
long running drive commands asynchronous and thus eases the load on some long running drive commands asynchronous and thus eases the load on some
wiring hardware types. Regardless of option -immed, cdrskin uses asynchronous wiring hardware types. Regardless of option -immed, cdrskin uses asynchronous
commands where possible and appropriate. commands where possible and appropriate. To really disable asynchronous command
execution, use option use_immed_bit=off .
.TP .TP
.BI index= list .BI index= list
Set a comma separated list of index start address numbers for the next track. Set a comma separated list of index start address numbers for the next track.
@ -1632,6 +1633,16 @@ This setting affects only CD SAO write runs.
.br .br
The first track automatically gets a pre-gap of at least 150 sectors. Its The first track automatically gets a pre-gap of at least 150 sectors. Its
size can only be enlarged by this call. size can only be enlarged by this call.
.TP
.BI use_immed_bit= on|off|default
Control whether several long lasting SCSI commands shall be executed with the
Immed bit, which makes the commands end early while the drive operation is
still going on. cdrskin then inquires progress indication until the drive
reports to be ready again. If this feature is turned off, then blanking and
formatting will show no progress indication.
.br
It may depend on the operating system whether use_immed_bit= is set to "off"
by default.
.TP .TP
.BI --xa1-ignore .BI --xa1-ignore
Silently interpret option -xa1 as -data. This may be necessary if a frontend Silently interpret option -xa1 as -data. This may be necessary if a frontend

View File

@ -2949,6 +2949,8 @@ set_dev:;
printf( printf(
" print CD-TEXT file in Sony format and exit.\n"); " print CD-TEXT file in Sony format and exit.\n");
printf(" --two_channel indicate that audio tracks have 2 channels\n"); printf(" --two_channel indicate that audio tracks have 2 channels\n");
printf(
" use_immed_bit=on|off|default real control over SCSI Immed bit\n");
printf( printf(
" write_start_address=<num> write to given byte address (DVD+RW)\n"); " write_start_address=<num> write to given byte address (DVD+RW)\n");
printf( printf(
@ -3387,6 +3389,7 @@ struct CdrskiN {
int stdio_sync; /* stdio fsync interval: -1, 0, >=32 */ int stdio_sync; /* stdio fsync interval: -1, 0, >=32 */
int single_track; int single_track;
int prodvd_cli_compatible; int prodvd_cli_compatible;
int use_immed; /* 1= yes, 0= libburn default, -1= no */
int do_devices; /* 1= --devices , 2= --device_links */ int do_devices; /* 1= --devices , 2= --device_links */
@ -3659,6 +3662,7 @@ int Cdrskin_new(struct CdrskiN **skin, struct CdrpreskiN *preskin, int flag)
o->stdio_sync= 0; o->stdio_sync= 0;
o->single_track= 0; o->single_track= 0;
o->prodvd_cli_compatible= 0; o->prodvd_cli_compatible= 0;
o->use_immed= 0;
o->do_devices= 0; o->do_devices= 0;
o->do_scanbus= 0; o->do_scanbus= 0;
o->do_load= 0; o->do_load= 0;
@ -4169,6 +4173,8 @@ aborted:;
goto ex; goto ex;
} }
} }
if(skin->use_immed != 0)
burn_drive_set_immed(drive, skin->use_immed > 0);
skin->drive_is_grabbed= 1; skin->drive_is_grabbed= 1;
s= burn_disc_get_status(drive); s= burn_disc_get_status(drive);
@ -6163,12 +6169,12 @@ int Cdrskin_blank(struct CdrskiN *skin, int flag)
struct burn_progress p; struct burn_progress p;
struct burn_drive *drive; struct burn_drive *drive;
int ret,loop_counter= 0,hint_force= 0,do_format= 0, profile_number= -1; int ret,loop_counter= 0,hint_force= 0,do_format= 0, profile_number= -1;
int wrote_well= 1, format_flag= 0, status, num_formats; int wrote_well= 1, format_flag= 0, status, num_formats, using_immed= 1;
off_t size; off_t size;
unsigned dummy; unsigned dummy;
double start_time; double start_time;
char *verb= "blank", *presperf="blanking", *fmt_text= "..."; char *verb= "blank", *presperf="blanking", *fmt_text= "...";
char profile_name[80]; char profile_name[80], progress_text[40];
static char fmtp[][40]= { static char fmtp[][40]= {
"...", "format_overwrite", "deformat_sequential", "...", "format_overwrite", "deformat_sequential",
"(-format)", "format_defectmgt", "format_by_index", "(-format)", "format_defectmgt", "format_by_index",
@ -6379,6 +6385,7 @@ unsupported_format_type:;
if(Cdrskin__is_aborting(0)) if(Cdrskin__is_aborting(0))
{ret= 0; goto ex;} {ret= 0; goto ex;}
using_immed= burn_drive_get_immed(drive);
skin->drive_is_busy= 1; skin->drive_is_busy= 1;
if(do_format==0 || do_format==2) { if(do_format==0 || do_format==2) {
burn_disc_erase(drive,skin->blank_fast); burn_disc_erase(drive,skin->blank_fast);
@ -6401,6 +6408,8 @@ unsupported_format_type:;
loop_counter= 0; loop_counter= 0;
start_time= Sfile_microtime(0); start_time= Sfile_microtime(0);
if(!using_immed)
sprintf(progress_text, "synchronous");
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) {
@ -6408,10 +6417,14 @@ unsupported_format_type:;
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;
if(using_immed)
sprintf(progress_text, "done %.1f%%", percent);
fprintf(stderr, fprintf(stderr,
"%scdrskin: %s ( done %.1f%% , %lu seconds elapsed ) %s", "%scdrskin: %s ( %s , %lu seconds elapsed ) %s",
skin->pacifier_with_newline ? "" : "\r", skin->pacifier_with_newline ? "" : "\r",
presperf,percent,(unsigned long) (Sfile_microtime(0)-start_time), presperf,
progress_text,
(unsigned long) (Sfile_microtime(0)-start_time),
skin->pacifier_with_newline ? "\n" : ""); skin->pacifier_with_newline ? "\n" : "");
} }
sleep(1); sleep(1);
@ -9212,6 +9225,18 @@ track_too_large:;
} else if(strcmp(argv[i],"--two_channel")==0) { } else if(strcmp(argv[i],"--two_channel")==0) {
skin->track_modemods&= ~BURN_4CH; skin->track_modemods&= ~BURN_4CH;
} else if(strncmp(argv[i], "use_immed_bit=", 14) == 0) {
if(strcmp(argv[i] + 14, "on") == 0) {
skin->use_immed= 1;
} else if(strcmp(argv[i] + 14, "off") == 0) {
skin->use_immed= -1;
} else if(strcmp(argv[i] + 14, "default") == 0) {
skin->use_immed= 0;
} else {
fprintf(stderr, "cdrskin: FATAL : use_immed_bits= must be \"on\", \"off\", or \"default\"\n");
return(0);
}
} else if(strcmp(argv[i],"-V")==0 || strcmp(argpt, "-Verbose")==0) { } else if(strcmp(argv[i],"-V")==0 || strcmp(argpt, "-Verbose")==0) {
/* is handled in Cdrpreskin_setup() */; /* is handled in Cdrpreskin_setup() */;
} else if(strcmp(argv[i],"-v")==0 || strcmp(argpt,"-verbose")==0) { } else if(strcmp(argv[i],"-v")==0 || strcmp(argpt,"-verbose")==0) {

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2016.07.30.140328" #define Cdrskin_timestamP "2016.07.30.140859"