New -as cdrecord option --obs_pad. Automatic no_emul_toc with -as cdrecord.

This commit is contained in:
Thomas Schmitt 2021-08-30 12:35:26 +02:00
parent e489c877bd
commit 3f2b61932b
8 changed files with 92 additions and 50 deletions

View File

@ -3,7 +3,7 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2020 Thomas Schmitt, <scdbackup@gmx.net> Copyright 2007-2021 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later. Provided under GPL version 2 or later.
@ -264,6 +264,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
m->alignment= 0; m->alignment= 0;
m->do_stream_recording= 0; m->do_stream_recording= 0;
m->dvd_obs= 0; m->dvd_obs= 0;
m->do_obs_pad= 0;
m->modesty_on_drive= 0; m->modesty_on_drive= 0;
m->min_buffer_usec= 5000; m->min_buffer_usec= 5000;
m->max_buffer_usec= 25000; m->max_buffer_usec= 25000;

View File

@ -1,7 +1,7 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2020 Thomas Schmitt, <scdbackup@gmx.net> Copyright 2007-2021 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later. Provided under GPL version 2 or later.
@ -81,13 +81,14 @@ int Xorriso_cdrskin_help(struct XorrisO *xorriso, int flag)
"\t-pad\t\tpadsize=30k", "\t-pad\t\tpadsize=30k",
"\t-nopad\t\tDo not pad", "\t-nopad\t\tDo not pad",
"\tminbuf=\t\tKeep drive buffer hungry", "\tminbuf=\t\tKeep drive buffer hungry",
"\tmodesty_on_drive=\tLike minbuf=, but with more parameters",
"\t-immed\t\tEquivalent to minbuf=75", "\t-immed\t\tEquivalent to minbuf=75",
"\tmodesty_on_drive=\tLike minbuf=, but with more parameters",
"\t--grow_overwriteable_iso\temulate multi-session on DVD+RW, BD-RE", "\t--grow_overwriteable_iso\temulate multi-session on DVD+RW, BD-RE",
"\twrite_start_address=#\t\twrite to byte address on DVD+RW, BD-RE", "\twrite_start_address=#\t\twrite to byte address on DVD+RW, BD-RE",
"\tstream_recording=on|number\ttry to get full speed on DVD-RAM, BD", "\tstream_recording=on|number\ttry to get full speed on DVD-RAM, BD",
"\tuse_immed_bit=on|off|default\tcontrol use of Immed bit", "\tuse_immed_bit=on|off|default\tcontrol use of Immed bit",
"\tdvd_obs=default|32k|64k\t\tbytes per DVD/BD write operation", "\tdvd_obs=default|32k|64k\t\tbytes per DVD/BD write operation",
"\t--obs_pad\t\tpad DVD DAO and stdio to full 32k or 64k",
"\tstdio_sync=on|off|end|number\twhether to fsync output to \"stdio:\"", "\tstdio_sync=on|off|end|number\twhether to fsync output to \"stdio:\"",
"\t--no_rc\t\tDo not execute xorriso startup files", "\t--no_rc\t\tDo not execute xorriso startup files",
"\t-help\t\tprint this text to stderr and exit emulation", "\t-help\t\tprint this text to stderr and exit emulation",
@ -290,6 +291,8 @@ no_volunteer:;
strncmp(argpt, "dvd_obs=", 8)==0) { strncmp(argpt, "dvd_obs=", 8)==0) {
cpt= strchr(argpt, '=') + 1; cpt= strchr(argpt, '=') + 1;
Xorriso_option_dvd_obs(xorriso, cpt, 0); Xorriso_option_dvd_obs(xorriso, cpt, 0);
} else if(strcmp(argv[i], "--obs_pad") == 0) { /* intentional: argv[i] */
xorriso->do_obs_pad= 1;
} else if(strcmp(argpt, "-eject")==0) { } else if(strcmp(argpt, "-eject")==0) {
do_eject= 1; do_eject= 1;
} else if(strncmp(argpt, "-fs=", 4)==0 || strncmp(argpt, "fs=", 3)==0) { } else if(strncmp(argpt, "-fs=", 4)==0 || strncmp(argpt, "fs=", 3)==0) {

View File

@ -2,7 +2,7 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2020 Thomas Schmitt, <scdbackup@gmx.net> Copyright 2007-2021 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later. Provided under GPL version 2 or later.
@ -185,6 +185,7 @@ int Xorriso_make_write_options(
else else
#endif #endif
burn_write_opts_set_dvd_obs(*burn_options, xorriso->dvd_obs); burn_write_opts_set_dvd_obs(*burn_options, xorriso->dvd_obs);
burn_write_opts_set_obs_pad(*burn_options, !!xorriso->do_obs_pad);
burn_write_opts_set_stdio_fsync(*burn_options, xorriso->stdio_sync); burn_write_opts_set_stdio_fsync(*burn_options, xorriso->stdio_sync);
burn_write_opts_set_underrun_proof(*burn_options, 1); burn_write_opts_set_underrun_proof(*burn_options, 1);
@ -194,6 +195,7 @@ int Xorriso_make_write_options(
/* @param flag bit0= do not write but only prepare and return size in sectors /* @param flag bit0= do not write but only prepare and return size in sectors
bit1= do not use isoburn wrappers, do not assume libisofs bit1= do not use isoburn wrappers, do not assume libisofs
bit2= no_emul_toc : do not pad random access media to full 64 KB
*/ */
int Xorriso_sanitize_image_size(struct XorrisO *xorriso, int Xorriso_sanitize_image_size(struct XorrisO *xorriso,
struct burn_drive *drive, struct burn_disc *disc, struct burn_drive *drive, struct burn_disc *disc,
@ -236,7 +238,7 @@ no_track:;
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
} }
} }
if(xorriso->alignment == 0 && ! (xorriso->no_emul_toc & 1)) { if(xorriso->alignment == 0 && !((xorriso->no_emul_toc & 1) || flag & 4)) {
ret= isoburn_needs_emulation(drive); ret= isoburn_needs_emulation(drive);
if(ret > 0) { if(ret > 0) {
/* Take care that the session is padded up to the future NWA. /* Take care that the session is padded up to the future NWA.
@ -2398,7 +2400,7 @@ int Xorriso_burn_track(struct XorrisO *xorriso, off_t write_start_address,
} }
} }
ret= Xorriso_sanitize_image_size(xorriso, drive, disc, burn_options, 2); ret= Xorriso_sanitize_image_size(xorriso, drive, disc, burn_options, 2 | 4);
if(ret<=0) if(ret<=0)
goto ex; goto ex;

View File

@ -9,7 +9,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 XORRECORD 1 "Version 1.5.5, Jan 30, 2021" .TH XORRECORD 1 "Version 1.5.5, Aug 30, 2021"
.\" 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:
@ -605,12 +605,23 @@ If a number is given, then error management stays enabled for all byte
addresses below that number. Any number below 16s is the same as "off". addresses below that number. Any number below 16s is the same as "off".
.TP .TP
\fBdvd_obs="default"|"32k"|"64k"\fR \fBdvd_obs="default"|"32k"|"64k"\fR
Linux specific:
Set the number of bytes to be transmitted with each write operation to DVD Set the number of bytes to be transmitted with each write operation to DVD
or BD media. Tracks get padded up to the next multiple of this write or BD media. With most write types, tracks get padded up to the next
size. A number of 64 KB may improve throughput with bus systems which multiple of this write size (see option \-\-obs_pad). A number of 64 KB may
show latency problems. The default depends on media type, option improve throughput with bus systems which show latency problems.
stream_recording=, and on compile time options. The default depends on media type, option stream_recording=, and on compile
time options.
.TP
\fB\--obs_pad\fR
Pad the data of last write operation of a DVD\-R[W] DAO session or
stdio: pseudo\-drive up to the full size of an output chunk.
This padding has to be applied automatically to the other DVD and BD media
types, where it causes e.g. ISO images to have trailing unclaimed blocks.
.br
Use this option if there is the suspicion that DAO sessions abort with
your kernel and/or DVD drive, if their size is not a multiple of 16 blocks.
.br
This option may also get enabled at compile time of libburn.
.TP .TP
\fBmodesty_on_drive=parameter[:parameters]\fR \fBmodesty_on_drive=parameter[:parameters]\fR
Control whether the drive buffer shall be kept from getting completely filled. Control whether the drive buffer shall be kept from getting completely filled.

View File

@ -564,12 +564,21 @@ stream_recording="on"|"off"|number
byte addresses below that number. Any number below 16s is the same byte addresses below that number. Any number below 16s is the same
as "off". as "off".
dvd_obs="default"|"32k"|"64k" dvd_obs="default"|"32k"|"64k"
Linux specific: Set the number of bytes to be transmitted with each Set the number of bytes to be transmitted with each write operation
write operation to DVD or BD media. Tracks get padded up to the to DVD or BD media. With most write types, tracks get padded up to
next multiple of this write size. A number of 64 KB may improve the next multiple of this write size (see option -obs_pad). A
throughput with bus systems which show latency problems. The number of 64 KB may improve throughput with bus systems which show
default depends on media type, option stream_recording=, and on latency problems. The default depends on media type, option
compile time options. stream_recording=, and on compile time options.
-obs_pad
Pad the data of last write operation of a DVD-R[W] DAO session or
stdio: pseudo-drive up to the full size of an output chunk. This
padding has to be applied automatically to the other DVD and BD
media types, where it causes e.g. ISO images to have trailing
unclaimed blocks. .br Use this option if there is the suspicion
that DAO sessions abort with your kernel and/or DVD drive, if their
size is not a multiple of 16 blocks. .br This option may also get
enabled at compile time of libburn.
modesty_on_drive=parameter[:parameters] modesty_on_drive=parameter[:parameters]
Control whether the drive buffer shall be kept from getting Control whether the drive buffer shall be kept from getting
completely filled. Parameter "on" (or "1") keeps the program from completely filled. Parameter "on" (or "1") keeps the program from
@ -908,6 +917,7 @@ File: xorrecord.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: T
* --multi_if_possible apply -multi if medium is suitable: NonCdrecord. * --multi_if_possible apply -multi if medium is suitable: NonCdrecord.
(line 57) (line 57)
* --no_rc do not execute xorriso startup files: NonCdrecord. (line 8) * --no_rc do not execute xorriso startup files: NonCdrecord. (line 8)
* --obs_pad write transaction end padding: NonCdrecord. (line 81)
* -atip inquire medium state: Inquire. (line 14) * -atip inquire medium state: Inquire. (line 14)
* -checkdrive inquire drive CD capabilities: Inquire. (line 11) * -checkdrive inquire drive CD capabilities: Inquire. (line 11)
* -dao explicitly set write type SAO/DAO: SetBurn. (line 172) * -dao explicitly set write type SAO/DAO: SetBurn. (line 172)
@ -919,7 +929,7 @@ File: xorrecord.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: T
* -inq inquire drive identifiers: Inquire. (line 8) * -inq inquire drive identifiers: Inquire. (line 8)
* -isosize obtain track size from ISO 9660 superblock: SetBurn. * -isosize obtain track size from ISO 9660 superblock: SetBurn.
(line 137) (line 137)
* -modesty_on_drive keep drive buffer hungry: NonCdrecord. (line 81) * -modesty_on_drive keep drive buffer hungry: NonCdrecord. (line 90)
* -msinfo retrieve multi-session info: Inquire. (line 43) * -msinfo retrieve multi-session info: Inquire. (line 43)
* -multi keep media appendable after burn run: SetBurn. (line 89) * -multi keep media appendable after burn run: SetBurn. (line 89)
* -nopad disable adding of bytes to end of track: SetBurn. (line 151) * -nopad disable adding of bytes to end of track: SetBurn. (line 151)
@ -941,13 +951,13 @@ File: xorrecord.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: T
* minbuf= keep drive buffer hungry: SetBurn. (line 205) * minbuf= keep drive buffer hungry: SetBurn. (line 205)
* padsize= add bytes to end of track: SetBurn. (line 144) * padsize= add bytes to end of track: SetBurn. (line 144)
* speed= set write speed: SetBurn. (line 189) * speed= set write speed: SetBurn. (line 189)
* stdio_sync= control stdio buffer: NonCdrecord. (line 133) * stdio_sync= control stdio buffer: NonCdrecord. (line 142)
* stream_recording= try to get full speed on DVD-RAM, BD: NonCdrecord. * stream_recording= try to get full speed on DVD-RAM, BD: NonCdrecord.
(line 64) (line 64)
* tsize= set a fixed track size: SetBurn. (line 126) * tsize= set a fixed track size: SetBurn. (line 126)
* use_immed_bit= control use of Immed bit: NonCdrecord. (line 118) * use_immed_bit= control use of Immed bit: NonCdrecord. (line 127)
* write_start_address= set block address for write start: NonCdrecord. * write_start_address= set block address for write start: NonCdrecord.
(line 127) (line 136)
 
File: xorrecord.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top File: xorrecord.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
@ -959,7 +969,7 @@ File: xorrecord.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* Menu: * Menu:
* Accessing drive, wait for stdin, -waiti: SetBurn. (line 113) * Accessing drive, wait for stdin, -waiti: SetBurn. (line 113)
* Blank, format, Immed bit, use_immed_bit=: NonCdrecord. (line 118) * Blank, format, Immed bit, use_immed_bit=: NonCdrecord. (line 127)
* Bugs, reporting: Bugreport. (line 6) * Bugs, reporting: Bugreport. (line 6)
* Data track, announce, -data: SetBurn. (line 157) * Data track, announce, -data: SetBurn. (line 157)
* Defect management, control, stream_recording=: NonCdrecord. (line 64) * Defect management, control, stream_recording=: NonCdrecord. (line 64)
@ -1003,20 +1013,21 @@ File: xorrecord.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* Track size, set fixed, tsize=: SetBurn. (line 126) * Track size, set fixed, tsize=: SetBurn. (line 126)
* Track, _definiton: Standards. (line 13) * Track, _definiton: Standards. (line 13)
* Transaction size, set, dvd_obs=: NonCdrecord. (line 74) * Transaction size, set, dvd_obs=: NonCdrecord. (line 74)
* Transaction size, set, dvd_obs= <1>: NonCdrecord. (line 81)
* Tray, eject, -eject: SetBurn. (line 214) * Tray, eject, -eject: SetBurn. (line 214)
* Verbosity, increase, -v: Verbose. (line 16) * Verbosity, increase, -v: Verbose. (line 16)
* Verbosity, SCSI commands, -V: Verbose. (line 20) * Verbosity, SCSI commands, -V: Verbose. (line 20)
* Version, report, -version: Verbose. (line 8) * Version, report, -version: Verbose. (line 8)
* Write simulation , control, -dummy: SetBurn. (line 106) * Write simulation , control, -dummy: SetBurn. (line 106)
* Write start address, set, write_start_address=: NonCdrecord. * Write start address, set, write_start_address=: NonCdrecord.
(line 127) (line 136)
* Write type, SAO/DAO, -dao: SetBurn. (line 172) * Write type, SAO/DAO, -dao: SetBurn. (line 172)
* Write type, SAO/DAO, -sao: SetBurn. (line 168) * Write type, SAO/DAO, -sao: SetBurn. (line 168)
* Write type, TAO, -tao: SetBurn. (line 162) * Write type, TAO, -tao: SetBurn. (line 162)
* Write, buffer syncing, stdio_sync=: NonCdrecord. (line 133) * Write, buffer syncing, stdio_sync=: NonCdrecord. (line 142)
* Write, drive buffer, -immed: SetBurn. (line 208) * Write, drive buffer, -immed: SetBurn. (line 208)
* Write, drive buffer, minbuf=: SetBurn. (line 205) * Write, drive buffer, minbuf=: SetBurn. (line 205)
* Write, drive buffer, modesty_on_drive=: NonCdrecord. (line 81) * Write, drive buffer, modesty_on_drive=: NonCdrecord. (line 90)
* xorriso, mkisofs emulation: Xorriso. (line 6) * xorriso, mkisofs emulation: Xorriso. (line 6)
* xorriso, options: Options. (line 6) * xorriso, options: Options. (line 6)
@ -1034,21 +1045,21 @@ Node: Inquire7618
Node: SetBurn10487 Node: SetBurn10487
Node: Verbose21111 Node: Verbose21111
Node: NonCdrecord22661 Node: NonCdrecord22661
Node: Examples30471 Node: Examples31044
Node: ExDevices31132 Node: ExDevices31705
Node: ExMedium31350 Node: ExMedium31923
Node: ExBlank31613 Node: ExBlank32186
Node: ExFormat31834 Node: ExFormat32407
Node: ExDeformat32352 Node: ExDeformat32925
Node: ExIsoSingle32619 Node: ExIsoSingle33192
Node: ExIsoMulti32903 Node: ExIsoMulti33476
Node: ExIsoFly34647 Node: ExIsoFly35220
Node: ExAfio35839 Node: ExAfio36412
Node: Files36837 Node: Files37410
Node: Seealso37393 Node: Seealso37966
Node: Bugreport37756 Node: Bugreport38329
Node: Legal38347 Node: Legal38920
Node: CommandIdx39276 Node: CommandIdx39849
Node: ConceptIdx42839 Node: ConceptIdx43485
 
End Tag Table End Tag Table

View File

@ -50,7 +50,7 @@
@c man .\" First parameter, NAME, should be all caps @c man .\" First parameter, NAME, should be all caps
@c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection @c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
@c man .\" other parameters are allowed: see man(7), man(1) @c man .\" other parameters are allowed: see man(7), man(1)
@c man .TH XORRECORD 1 "Version 1.5.5, Jan 30, 2021" @c man .TH XORRECORD 1 "Version 1.5.5, Aug 30, 2021"
@c man .\" Please adjust this date whenever revising the manpage. @c man .\" Please adjust this date whenever revising the manpage.
@c man .\" @c man .\"
@c man .\" Some roff macros, for reference: @c man .\" Some roff macros, for reference:
@ -823,12 +823,25 @@ addresses below that number. Any number below 16s is the same as "off".
@item dvd_obs="default"|"32k"|"64k" @item dvd_obs="default"|"32k"|"64k"
@kindex dvd_obs= set write transaction payload size @kindex dvd_obs= set write transaction payload size
@cindex Transaction size, set, dvd_obs= @cindex Transaction size, set, dvd_obs=
Linux specific:
Set the number of bytes to be transmitted with each write operation to DVD Set the number of bytes to be transmitted with each write operation to DVD
or BD media. Tracks get padded up to the next multiple of this write or BD media. With most write types, tracks get padded up to the next
size. A number of 64 KB may improve throughput with bus systems which multiple of this write size (see option --obs_pad). A number of 64 KB may
show latency problems. The default depends on media type, option improve throughput with bus systems which show latency problems.
stream_recording=, and on compile time options. The default depends on media type, option stream_recording=, and on compile
time options.
@c man .TP
@item --obs_pad
@kindex --obs_pad write transaction end padding
@cindex Transaction size, set, dvd_obs=
Pad the data of last write operation of a DVD-R[W] DAO session or
stdio: pseudo-drive up to the full size of an output chunk.
This padding has to be applied automatically to the other DVD and BD media
types, where it causes e.g. ISO images to have trailing unclaimed blocks.
.br
Use this option if there is the suspicion that DAO sessions abort with
your kernel and/or DVD drive, if their size is not a multiple of 16 blocks.
.br
This option may also get enabled at compile time of libburn.
@c man .TP @c man .TP
@item modesty_on_drive=parameter[:parameters] @item modesty_on_drive=parameter[:parameters]
@kindex -modesty_on_drive keep drive buffer hungry @kindex -modesty_on_drive keep drive buffer hungry

View File

@ -2,7 +2,7 @@
/* Command line oriented batch and dialog tool which creates, loads, /* Command line oriented batch and dialog tool which creates, loads,
manipulates and burns ISO 9660 filesystem images. manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2020 Thomas Schmitt, <scdbackup@gmx.net> Copyright 2007-2021 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later. Provided under GPL version 2 or later.
@ -406,6 +406,7 @@ struct XorrisO { /* the global context of xorriso */
>=16 means yes with number as start LBA */ >=16 means yes with number as start LBA */
int dvd_obs; /* DVD write chunk size: 0, 32k or 64k */ int dvd_obs; /* DVD write chunk size: 0, 32k or 64k */
int do_obs_pad; /* 1= pad up end on all media types */
int modesty_on_drive; /* "enable" of burn_drive_set_buffer_waiting() int modesty_on_drive; /* "enable" of burn_drive_set_buffer_waiting()
0= disable , 1= enable waiting , 0= disable , 1= enable waiting ,

View File

@ -1 +1 @@
#define Xorriso_timestamP "2021.08.30.094939" #define Xorriso_timestamP "2021.08.30.103430"