diff --git a/xorriso/base_obj.c b/xorriso/base_obj.c index 345cd655..1e73ba6c 100644 --- a/xorriso/base_obj.c +++ b/xorriso/base_obj.c @@ -265,6 +265,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag) m->do_stream_recording= 0; m->dvd_obs= 0; m->do_obs_pad= 0; + m->bdr_obs_exempt= 0; m->modesty_on_drive= 0; m->min_buffer_usec= 5000; m->max_buffer_usec= 25000; diff --git a/xorriso/opts_d_h.c b/xorriso/opts_d_h.c index 322574de..2ceb2fbf 100644 --- a/xorriso/opts_d_h.c +++ b/xorriso/opts_d_h.c @@ -349,10 +349,27 @@ int Xorriso_option_dvd_obs(struct XorrisO *xorriso, char *obs, int flag) { double num; - if(strcmp(obs, "default") == 0) + if(strcmp(obs, "obs_pad") == 0) { + xorriso->do_obs_pad= 1; + return(1); + } else if(strcmp(obs, "no_obs_pad") == 0) { + xorriso->do_obs_pad= 0; + return(1); + } else if(strcmp(obs, "bdr_obs_exempt")== 0) { + xorriso->bdr_obs_exempt= 1; + return(1); + } else if(strcmp(obs, "no_bdr_obs_exempt")== 0) { + xorriso->bdr_obs_exempt= 0; + return(1); + } else if(strcmp(obs, "default") == 0) { num= 0; - else + } else if(obs[0] >= '0' && obs[0] <= '9') { num = Scanf_io_size(obs,0); + } else { + sprintf(xorriso->info_text, "-dvd_obs : Unrecognized parameter."); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0); + return(0); + } if(num != 0 && num != 32768 && num != 65536) { sprintf(xorriso->info_text, "-dvd_obs : Bad size. Acceptable are 0, 32k, 64k"); @@ -2241,8 +2258,9 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag) " [:\"min_usec=\"number][:\"max_usec\"=number]", " [:\"timeout_sec=\"number]", " Keep drive buffer hungry to ease concurrent burn run.", -" -dvd_obs \"default\"|\"32k\"|\"64k\"", -" Set number of bytes per DVD/BD write operation.", +" -dvd_obs \"default\"|\"32k\"|\"64k\"|\"obs_pad\"|\"bdr_obs_exempt\"", +" Set number of bytes per DVD/BD write operation or control", +" end alignment padding with DAO DVD-R[W] or BD-R.", " -use_immed_bit \"on\"|\"off\"|\"default\"", " Control whether long running SCSI commands shall run", " asynchronously with progress messages.", diff --git a/xorriso/text_io.c b/xorriso/text_io.c index 721c1023..3ab8fe89 100644 --- a/xorriso/text_io.c +++ b/xorriso/text_io.c @@ -3537,6 +3537,20 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag) sprintf(line,"-dvd_obs %s\n", mode); if(!(is_default && no_defaults)) Xorriso_status_result(xorriso,filter,fp,flag&2); + is_default= (xorriso->do_obs_pad == 0); + strcpy(mode, "no_obs_pad"); + if(xorriso->do_obs_pad) + strcpy(mode, "obs_pad"); + sprintf(line,"-dvd_obs %s\n", mode); + if(!(is_default && no_defaults)) + Xorriso_status_result(xorriso, filter, fp, flag & 2); + is_default= (xorriso->bdr_obs_exempt == 0); + strcpy(mode, "no_bdr_obs_exempt"); + if(xorriso->bdr_obs_exempt) + strcpy(mode, "bdr_obs_exempt"); + sprintf(line,"-dvd_obs %s\n", mode); + if(!(is_default && no_defaults)) + Xorriso_status_result(xorriso, filter, fp, flag & 2); is_default= (xorriso->use_immed_bit == 0); strcpy(line, "-use_immed_bit "); diff --git a/xorriso/write_run.c b/xorriso/write_run.c index 0bb2091c..1ddbcf1f 100644 --- a/xorriso/write_run.c +++ b/xorriso/write_run.c @@ -186,7 +186,8 @@ int Xorriso_make_write_options( #endif 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_bdr_obs_exempt(*burn_options, + !!xorriso->bdr_obs_exempt); burn_write_opts_set_stdio_fsync(*burn_options, xorriso->stdio_sync); burn_write_opts_set_underrun_proof(*burn_options, 1); return(1); diff --git a/xorriso/xorriso.1 b/xorriso/xorriso.1 index 064504b6..4d58fc6d 100644 --- a/xorriso/xorriso.1 +++ b/xorriso/xorriso.1 @@ -9,7 +9,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 XORRISO 1 "Version 1.5.5, Jun 04, 2021" +.TH XORRISO 1 "Version 1.5.5, Sep 12, 2021" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -3234,12 +3234,28 @@ in order to set an own address limit. "data" causes full speed to start when superblock and directory entries are written and writing of file content blocks begins. .TP -\fB\-dvd_obs\fR "default"|"32k"|"64k" +\fB\-dvd_obs\fR "default"|"32k"|"64k"|"obs_pad"|"bdr_obs_exempt" GNU/Linux specific: Set the number of bytes to be transmitted with each write operation to DVD or BD media. A number of 64 KB may improve throughput with bus systems which show latency problems. The default depends on media type, on command \-stream_recording , and on compile time options. +.br +On all systems: +"obs_pad" pads the data of the last write operation of a DVD\-R[W] DAO session +or BD\-R session 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. +Whether it is applied automatically to BD\-R depends on "bdr_obs_exempt". +"obs_pad" can be disabled by "no_obs_pad". +.br +"bdr_obs_exempt" exempts BD\-R media from automatic unconditional transaction +end padding, provided that this padding is not requested by "obs_pad" and that +no stream_recording is requested. "bdr_obs_exempt" can be disabled by +"no_obs_exempt". +.br +This is a new feature introduced with version 1.5.6. It might become default +in later versions. .TP \fB\-modesty_on_drive\fR parameter[:parameters] Control whether the drive buffer shall be kept from getting completely filled. diff --git a/xorriso/xorriso.info b/xorriso/xorriso.info index 51b2eed1..03658472 100644 --- a/xorriso/xorriso.info +++ b/xorriso/xorriso.info @@ -2748,12 +2748,25 @@ according to the setting of command -acl. least 16s in order to set an own address limit. "data" causes full speed to start when superblock and directory entries are written and writing of file content blocks begins. --dvd_obs "default"|"32k"|"64k" +-dvd_obs "default"|"32k"|"64k"|"obs_pad"|"bdr_obs_exempt" GNU/Linux specific: Set the number of bytes to be transmitted with each write operation to DVD or BD media. A number of 64 KB may improve throughput with bus systems which show latency problems. The default depends on media type, on command -stream_recording , and on compile time options. + On all systems: "obs_pad" pads the data of the last write operation + of a DVD-R[W] DAO session or BD-R session 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. Whether it is applied + automatically to BD-R depends on "bdr_obs_exempt". "obs_pad" can + be disabled by "no_obs_pad". + "bdr_obs_exempt" exempts BD-R media from automatic unconditional + transaction end padding, provided that this padding is not + requested by "obs_pad" and that no stream_recording is requested. + "bdr_obs_exempt" can be disabled by "no_obs_exempt". + This is a new feature introduced with version 1.5.6. It might + become default in later versions. -modesty_on_drive parameter[:parameters] Control whether the drive buffer shall be kept from getting completely filled. Parameter "on" (or "1") keeps the program from @@ -5577,7 +5590,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -chown sets ownership in ISO image: Manip. (line 43) * -chown_r sets ownership in ISO image: Manip. (line 47) * -clone copies ISO directory tree: Insert. (line 185) -* -close controls media closing: SetWrite. (line 471) +* -close controls media closing: SetWrite. (line 484) * -close_damaged closes damaged track and session: Writing. (line 205) * -close_filter_list bans filter registration: Filter. (line 50) * -commit writes pending ISO image: Writing. (line 27) @@ -5607,11 +5620,11 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -drive_access control device file locking: AqDrive. (line 72) * -drive_class controls drive accessability: AqDrive. (line 43) * -du show directory size in ISO image: Navigate. (line 78) -* -dummy controls write simulation: SetWrite. (line 463) +* -dummy controls write simulation: SetWrite. (line 476) * -dus show directory size in ISO image: Navigate. (line 81) * -dusx show directory size on disk: Navigate. (line 88) * -dux show directory size on disk: Navigate. (line 84) -* -dvd_obs set write block size: SetWrite. (line 400) +* -dvd_obs set write block size and end alignment: SetWrite. (line 400) * -early_stdio_test classifies stdio drives: Loading. (line 350) * -ecma119_map names w/o Rock Ridge, Joliet: Loading. (line 229) * -eject ejects drive tray: Writing. (line 50) @@ -5633,7 +5646,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -follow softlinks and mount points: SetInsert. (line 69) * -format formats media: Writing. (line 87) * -for_backup -acl,-xattr,-hardlinks,-md5: Loading. (line 215) -* -fs sets size of fifo: SetWrite. (line 466) +* -fs sets size of fifo: SetWrite. (line 479) * -getfacl shows ACL in ISO image: Navigate. (line 60) * -getfacl_r shows ACL in ISO image: Navigate. (line 66) * -getfattr shows xattr in ISO image: Navigate. (line 69) @@ -5679,7 +5692,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -mark sets synchronizing message: Frontend. (line 23) * -md5 controls handling of MD5 sums: Loading. (line 184) * -mkdir creates ISO directory: Insert. (line 177) -* -modesty_on_drive keep drive buffer hungry: SetWrite. (line 406) +* -modesty_on_drive keep drive buffer hungry: SetWrite. (line 419) * -mount issues mount command for ISO session: Restore. (line 195) * -mount_cmd composes mount command line: Inquiry. (line 49) * -mount_cmd controls mount command: Inquiry. (line 65) @@ -5698,7 +5711,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -out_charset sets output character set: SetWrite. (line 285) * -overwrite enables overwriting in ISO: SetInsert. (line 131) * -pacifier controls pacifier text form: Emulation. (line 166) -* -padding sets amount or mode of image padding: SetWrite. (line 494) +* -padding sets amount or mode of image padding: SetWrite. (line 507) * -page set terminal geometry: DialogCtl. (line 18) * -paste_in copies file into disk file: Restore. (line 135) * -pathspecs sets meaning of = with -add: SetInsert. (line 115) @@ -5760,7 +5773,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -split_size enables large file splitting: SetInsert. (line 145) * -status shows current settings: Scripting. (line 44) * -status_history_max curbs -status history: Scripting. (line 52) -* -stdio_sync controls stdio buffer: SetWrite. (line 456) +* -stdio_sync controls stdio buffer: SetWrite. (line 469) * -stream_recording controls defect management: SetWrite. (line 389) * -system_id sets system id: SetWrite. (line 205) * -tell_media_space reports free space: Inquiry. (line 98) @@ -5774,13 +5787,13 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -update_l inserts paths if different <1>: Insert. (line 128) * -update_li inserts paths if different: Insert. (line 124) * -update_r inserts paths if different: Insert. (line 110) -* -use_immed_bit controls use of Immed bit: SetWrite. (line 444) +* -use_immed_bit controls use of Immed bit: SetWrite. (line 457) * -use_readline enables readline for dialog: DialogCtl. (line 26) * -version prints help text: Scripting. (line 22) * -volid sets volume id: SetWrite. (line 168) * -volset_id sets volume set id: SetWrite. (line 188) * -volume_date sets volume timestamp: SetWrite. (line 211) -* -write_type chooses TAO or SAO/DAO: SetWrite. (line 487) +* -write_type chooses TAO or SAO/DAO: SetWrite. (line 500) * -x enables automatic execution order of arguments: ArgSort. (line 16) * -xattr controls handling of xattr (EA): Loading. (line 172) * -zisofs controls zisofs production: SetWrite. (line 296) @@ -5813,7 +5826,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Backup, enable features, -for_backup: Loading. (line 215) * Backup, scdbackup checksum tag, -scdbackup: Emulation. (line 179) * Blank media, _definition: Media. (line 29) -* Blank, format, Immed bit, -use_immed_bit: SetWrite. (line 444) +* Blank, format, Immed bit, -use_immed_bit: SetWrite. (line 457) * Blind growing, _definition: Methods. (line 41) * Bootability, control, -boot_image: Bootable. (line 75) * Bugs, reporting: Bugreport. (line 6) @@ -6081,26 +6094,26 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Verify, file checksum, -check_md5: Verify. (line 184) * Verify, file tree checksums, -check_md5_r: Verify. (line 198) * Verify, preset -check_media, -check_media_defaults: Verify. (line 40) -* Write, block size, -dvd_obs: SetWrite. (line 400) +* Write, block size and end alignment, -dvd_obs: SetWrite. (line 400) * Write, bootability, -boot_image: Bootable. (line 75) -* Write, buffer syncing, -stdio_sync: SetWrite. (line 456) -* Write, close media, -close: SetWrite. (line 471) +* Write, buffer syncing, -stdio_sync: SetWrite. (line 469) +* Write, close media, -close: SetWrite. (line 484) * Write, compliance to specs, -compliance: SetWrite. (line 62) * Write, defect management, -stream_recording: SetWrite. (line 389) * Write, disable Rock Ridge, -rockridge: SetWrite. (line 57) -* Write, drive buffer, -modesty_on_drive: SetWrite. (line 406) +* Write, drive buffer, -modesty_on_drive: SetWrite. (line 419) * Write, enable HFS+, -hfsplus: SetWrite. (line 14) * Write, enable Joliet, -joliet: SetWrite. (line 10) -* Write, fifo size, -fs: SetWrite. (line 466) +* Write, fifo size, -fs: SetWrite. (line 479) * Write, free space, -tell_media_space: Inquiry. (line 98) * Write, log problematic disk files, -errfile_log: Scripting. (line 116) * Write, log written sessions, -session_log: Scripting. (line 134) -* Write, padding image, -padding: SetWrite. (line 494) +* Write, padding image, -padding: SetWrite. (line 507) * Write, pending ISO image, -commit: Writing. (line 27) * Write, predict image size, -print_size: Inquiry. (line 86) * Write, set speed, -speed: SetWrite. (line 371) -* Write, simulation, -dummy: SetWrite. (line 463) -* Write, TAO or SAO/DAO, -write_type: SetWrite. (line 487) +* Write, simulation, -dummy: SetWrite. (line 476) +* Write, TAO or SAO/DAO, -write_type: SetWrite. (line 500) * xattr, control handling, -xattr: Loading. (line 172) * xattr, set in ISO image, -setfattr: Manip. (line 103) * xattr, set in ISO image, -setfattr_list: Manip. (line 120) @@ -6132,41 +6145,41 @@ Node: CmdFind88992 Node: Filter107921 Node: Writing112543 Node: SetWrite124798 -Node: Bootable153798 -Node: Jigdo181679 -Node: Charset186682 -Node: Exception190011 -Node: DialogCtl196140 -Node: Inquiry198742 -Node: Navigate207624 -Node: Verify216331 -Node: Restore227480 -Node: Emulation239179 -Node: Scripting249635 -Node: Frontend257418 -Node: Examples267044 -Node: ExDevices268222 -Node: ExCreate268883 -Node: ExDialog270183 -Node: ExGrowing271454 -Node: ExModifying272263 -Node: ExBootable272773 -Node: ExCharset273328 -Node: ExPseudo274224 -Node: ExCdrecord275151 -Node: ExMkisofs275471 -Node: ExGrowisofs277368 -Node: ExException278521 -Node: ExTime278979 -Node: ExIncBackup279437 -Node: ExRestore283463 -Node: ExRecovery284409 -Node: Files284981 -Node: Environ286315 -Node: Seealso287063 -Node: Bugreport287780 -Node: Legal288371 -Node: CommandIdx289383 -Node: ConceptIdx307208 +Node: Bootable154649 +Node: Jigdo182530 +Node: Charset187533 +Node: Exception190862 +Node: DialogCtl196991 +Node: Inquiry199593 +Node: Navigate208475 +Node: Verify217182 +Node: Restore228331 +Node: Emulation240030 +Node: Scripting250486 +Node: Frontend258269 +Node: Examples267895 +Node: ExDevices269073 +Node: ExCreate269734 +Node: ExDialog271034 +Node: ExGrowing272305 +Node: ExModifying273114 +Node: ExBootable273624 +Node: ExCharset274179 +Node: ExPseudo275075 +Node: ExCdrecord276002 +Node: ExMkisofs276322 +Node: ExGrowisofs278219 +Node: ExException279372 +Node: ExTime279830 +Node: ExIncBackup280288 +Node: ExRestore284314 +Node: ExRecovery285260 +Node: Files285832 +Node: Environ287166 +Node: Seealso287914 +Node: Bugreport288631 +Node: Legal289222 +Node: CommandIdx290234 +Node: ConceptIdx308059  End Tag Table diff --git a/xorriso/xorriso.texi b/xorriso/xorriso.texi index c164f629..95b54339 100644 --- a/xorriso/xorriso.texi +++ b/xorriso/xorriso.texi @@ -50,7 +50,7 @@ @c man .\" First parameter, NAME, should be all caps @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 .TH XORRISO 1 "Version 1.5.5, Jun 04, 2021" +@c man .TH XORRISO 1 "Version 1.5.5, Sep 12, 2021" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @@ -3754,14 +3754,30 @@ in order to set an own address limit. "data" causes full speed to start when superblock and directory entries are written and writing of file content blocks begins. @c man .TP -@item -dvd_obs "default"|"32k"|"64k" -@kindex -dvd_obs set write block size -@cindex Write, block size, -dvd_obs +@item -dvd_obs "default"|"32k"|"64k"|"obs_pad"|"bdr_obs_exempt" +@kindex -dvd_obs set write block size and end alignment +@cindex Write, block size and end alignment, -dvd_obs GNU/Linux specific: Set the number of bytes to be transmitted with each write operation to DVD or BD media. A number of 64 KB may improve throughput with bus systems which show latency problems. The default depends on media type, on command -stream_recording , and on compile time options. +@* +On all systems: +"obs_pad" pads the data of the last write operation of a DVD-R[W] DAO session +or BD-R session 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. +Whether it is applied automatically to BD-R depends on "bdr_obs_exempt". +"obs_pad" can be disabled by "no_obs_pad". +@* +"bdr_obs_exempt" exempts BD-R media from automatic unconditional transaction +end padding, provided that this padding is not requested by "obs_pad" and that +no stream_recording is requested. "bdr_obs_exempt" can be disabled by +"no_obs_exempt". +@* +This is a new feature introduced with version 1.5.6. It might become default +in later versions. @c man .TP @item -modesty_on_drive parameter[:parameters] @kindex -modesty_on_drive keep drive buffer hungry diff --git a/xorriso/xorriso_private.h b/xorriso/xorriso_private.h index 1d0d54af..df211ef2 100644 --- a/xorriso/xorriso_private.h +++ b/xorriso/xorriso_private.h @@ -408,6 +408,10 @@ struct XorrisO { /* the global context of xorriso */ int dvd_obs; /* DVD write chunk size: 0, 32k or 64k */ int do_obs_pad; /* 1= pad up end on all media types */ + int bdr_obs_exempt; /* 1= do not unconditionally apply do_obs_pad=1 + to BD-R if not stream recording + */ + int modesty_on_drive; /* "enable" of burn_drive_set_buffer_waiting() 0= disable , 1= enable waiting , (-1 = do not change setting) diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 42efd208..74a28c2d 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2021.09.04.075955" +#define Xorriso_timestamP "2021.09.12.092738"