diff --git a/xorriso/base_obj.c b/xorriso/base_obj.c index f4ca0359..3994c6f9 100644 --- a/xorriso/base_obj.c +++ b/xorriso/base_obj.c @@ -201,6 +201,8 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag) m->zisofs_block_size= m->zisofs_block_size_default= (1 << 15); m->zisofs_v2_block_size= m->zisofs_v2_block_size_default= (1 << 17); m->zisofs_block_number_target= -1; + m->zisofs_bpt_discard_free_ratio= m->zisofs_bpt_discard_free_ratio_default= + 0.5; m->do_overwrite= 2; m->do_reassure= 0; m->drive_blacklist= NULL; diff --git a/xorriso/filters.c b/xorriso/filters.c index 9977397d..3b68eab9 100644 --- a/xorriso/filters.c +++ b/xorriso/filters.c @@ -664,6 +664,13 @@ int Xorriso_set_zisofs_params(struct XorrisO *xorriso, int flag) memset(&ctrl, 0, sizeof(ctrl)); ctrl.version= 1; + ret= iso_zisofs_get_params(&ctrl, 0); + if(ret < 0) { + Xorriso_report_iso_error(xorriso, "", ret, + "Error when inquiring zisofs parameters before setting some", + 0, "FAILURE", 1); + return(0); + } ctrl.compression_level= xorriso->zlib_level; if(xorriso->zisofs_block_size == (1 << 16)) @@ -681,6 +688,7 @@ int Xorriso_set_zisofs_params(struct XorrisO *xorriso, int flag) if(xorriso->zisofs_v2_block_size == (1 << i)) ctrl.v2_block_size_log2= i; ctrl.block_number_target= xorriso->zisofs_block_number_target; + ctrl.bpt_discard_free_ratio= xorriso->zisofs_bpt_discard_free_ratio; ret= iso_zisofs_set_params(&ctrl, 0); Xorriso_process_msg_queues(xorriso,0); @@ -750,19 +758,26 @@ int Xorriso_status_zisofs(struct XorrisO *xorriso, char *filter, FILE *fp, (double) xorriso->zisofs_block_number_target); Xorriso_status_result(xorriso, filter, fp, flag & 2); } - used_blocks= Xorriso_zisofs_current_blocks(xorriso, 0); if(always || !( - xorriso->zisofs_max_total_blocks == + xorriso->zisofs_max_total_blocks == xorriso->zisofs_max_total_blocks_default && - xorriso->zisofs_max_file_blocks == + xorriso->zisofs_max_file_blocks == xorriso->zisofs_max_file_blocks_default && - used_blocks == 0)) { + xorriso->zisofs_bpt_discard_free_ratio == + xorriso->zisofs_bpt_discard_free_ratio_default)) { sprintf(xorriso->result_line, - "-zisofs max_bpt=%.f:bpt_used=%.f:max_bpt_f=%.f\n", - (double) xorriso->zisofs_max_total_blocks * 8.0, + "-zisofs max_bpt=%.f:max_bpt_f=%.f:bpt_free_ratio=%.3f\n", + (double) xorriso->zisofs_max_total_blocks * 8.0, + (double) xorriso->zisofs_max_file_blocks * 8.0, + xorriso->zisofs_bpt_discard_free_ratio); + Xorriso_status_result(xorriso, filter, fp, flag & 2); + } + if(always || !(used_blocks == 0)) { + sprintf(xorriso->result_line, + "-zisofs bpt_used=%.f:bpt_ratio_used=%.3f\n", (double) used_blocks * 8.0, - (double) xorriso->zisofs_max_file_blocks * 8.0); + ((double) used_blocks) / (double) xorriso->zisofs_max_total_blocks); Xorriso_status_result(xorriso, filter, fp, flag & 2); } if(always || !( diff --git a/xorriso/lib_mgt.c b/xorriso/lib_mgt.c index 1e83a079..85f41598 100644 --- a/xorriso/lib_mgt.c +++ b/xorriso/lib_mgt.c @@ -229,6 +229,9 @@ LIBISOBURN_MISCONFIGURATION_ = 0; xorriso->zisofs_v2_block_size= xorriso->zisofs_v2_block_size_default= 1 << zisofs_ctrl.v2_block_size_log2; xorriso->zisofs_block_number_target= zisofs_ctrl.block_number_target; + xorriso->zisofs_bpt_discard_free_ratio= + xorriso->zisofs_bpt_discard_free_ratio_default= + zisofs_ctrl.bpt_discard_free_ratio; } iso_node_xinfo_make_clonable(Xorriso__mark_update_xinfo, diff --git a/xorriso/opts_d_h.c b/xorriso/opts_d_h.c index 8b014573..a7d833f5 100644 --- a/xorriso/opts_d_h.c +++ b/xorriso/opts_d_h.c @@ -2188,6 +2188,7 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag) " level=0|...|9 , block_size=32k|64k|128k , by_magic=on|off", " version_2=off|as_needed|on , block_size_v2=32k|...|1024k", " max_bpt=1k...128g , max_bpt_f=1k...128g , bpt_target=num", +" bpt_free_ratio=-1|[0.0...1.0]" "", "Write-to-media commands:", " -rollback Discard the manipulated ISO image and reload it.", diff --git a/xorriso/opts_p_z.c b/xorriso/opts_p_z.c index fc0fa167..ef0e946c 100644 --- a/xorriso/opts_p_z.c +++ b/xorriso/opts_p_z.c @@ -2263,8 +2263,8 @@ int Xorriso_option_zisofs(struct XorrisO *xorriso, char *mode, int flag) { int was_level, was_blocksize, was_v2_enabled, was_blocksize_v2; uint64_t was_max_total_blocks, was_max_file_blocks, was_block_number_target; - int ret, l, i; - double num; + int ret, l, i, sticky; + double num, was_bpt_discard_free_ratio; char *cpt, *npt, text[16]; was_level= xorriso->zlib_level; @@ -2274,6 +2274,7 @@ int Xorriso_option_zisofs(struct XorrisO *xorriso, char *mode, int flag) was_max_file_blocks= xorriso->zisofs_max_file_blocks; was_blocksize_v2= xorriso->zisofs_v2_block_size; was_block_number_target= xorriso->zisofs_block_number_target; + was_bpt_discard_free_ratio= xorriso->zisofs_bpt_discard_free_ratio; npt= cpt= mode; for(cpt= mode; npt!=NULL; cpt= npt+1) { npt= strchr(cpt,':'); @@ -2298,6 +2299,7 @@ int Xorriso_option_zisofs(struct XorrisO *xorriso, char *mode, int flag) strncmp(cpt, "osiz_used=", 10) == 0 || strncmp(cpt, "gzip_used=", 10) == 0 || strncmp(cpt, "gunzip_used=", 12) == 0 || + strncmp(cpt, "bpt_ratio_used=", 15) == 0 || strncmp(cpt, "bpt_used=", 9) == 0) { /* (ignored info from -status) */; @@ -2341,8 +2343,12 @@ int Xorriso_option_zisofs(struct XorrisO *xorriso, char *mode, int flag) "-zisofs: Unsupported block pointer pool size (allowed: 1k to 128g)"); goto sorry_ex; } + sticky= 0; + if(xorriso->zisofs_max_total_blocks == xorriso->zisofs_max_file_blocks) + sticky= 1; xorriso->zisofs_max_total_blocks= num / 8.0; - if(xorriso->zisofs_max_total_blocks < xorriso->zisofs_max_file_blocks) + if(xorriso->zisofs_max_total_blocks < xorriso->zisofs_max_file_blocks || + sticky) xorriso->zisofs_max_file_blocks= xorriso->zisofs_max_total_blocks; } else if(strncmp(cpt, "max_bpt_f=", 10) == 0) { @@ -2372,6 +2378,18 @@ int Xorriso_option_zisofs(struct XorrisO *xorriso, char *mode, int flag) parse_zisofs_param(cpt, 11, l, &num); xorriso->zisofs_block_number_target= num; + } else if(strncmp(cpt, "bpt_free_ratio=", 15) == 0) { + parse_zisofs_param(cpt, 15, l, &num); + /* 0 means to libisofs "do not change" */ + if(num == 0.0) + num= -1.0; + if(num != -1.0 && (num <= 0.0 || num > 1.0)) { + sprintf(xorriso->info_text, + "-zisofs: Unsupported free blockpointer ratio (allowed -1 or 0.0 to 1.0)"); + goto sorry_ex; + } + xorriso->zisofs_bpt_discard_free_ratio = num; + } else if(strncmp(cpt, "default", l)==0) { xorriso->zlib_level= xorriso->zlib_level_default; xorriso->zisofs_block_size= xorriso->zisofs_block_size_default; @@ -2381,6 +2399,8 @@ int Xorriso_option_zisofs(struct XorrisO *xorriso, char *mode, int flag) xorriso->zisofs_max_file_blocks= xorriso->zisofs_max_file_blocks_default; xorriso->zisofs_v2_block_size= xorriso->zisofs_v2_block_size_default; xorriso->zisofs_block_number_target= -1; + xorriso->zisofs_bpt_discard_free_ratio= + xorriso->zisofs_bpt_discard_free_ratio_default; } else { unknown_mode:; @@ -2397,6 +2417,7 @@ sorry_ex: xorriso->zisofs_max_file_blocks= was_max_file_blocks; xorriso->zisofs_v2_block_size= was_blocksize_v2; xorriso->zisofs_block_number_target= was_block_number_target; + xorriso->zisofs_bpt_discard_free_ratio= was_bpt_discard_free_ratio; return(0); } } diff --git a/xorriso/xorriso.1 b/xorriso/xorriso.1 index 75232068..3ba739f3 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.3, Oct 16, 2020" +.TH XORRISO 1 "Version 1.5.3, Oct 21, 2020" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -3154,9 +3154,19 @@ may further reduce the effective payload. "max_bpt_f="1k|...|128g sets the limit for the memory size of the block pointer list of a single file. max_bpt_f is never larger than max_bpt. If either is set to violate this rule, the other gets set to the same value. +If both values are the same before a change by max_bpt= or max_bpt_f=, then +both limits stick together unless the limit is decreased by max_bpt_f=. .br - "default" same as "level=6:block_size=32k:by_magic=off: -version_2=off:block_size_v2=128k:max_bpt=256m:max_bpt_f=256m". + "bpt_free_ratio="\-1|[0.0...1.0] sets a threshold for switching to block +pointer discarding during compression. If less than the given fraction of the +max_bpt_f= memory is free, then block pointers of compression filters get +discarded after size assessment. This causes a third read run of the input +file during the production of the ISO filesystem. Value \-1 disables this +feature. +.br + "default" is the same as "level=6:block_size=32k:by_magic=off: +version_2=off:block_size_v2=128k:max_bpt=256m:max_bpt_f=256m: +bpt_free_ratio=0.5". .TP \fB\-speed\fR code|number[k|m|c|d|b] Set the burn speed. Default is "max" (or "0") = maximum speed as announced diff --git a/xorriso/xorriso.info b/xorriso/xorriso.info index 4001db88..f8d1888b 100644 --- a/xorriso/xorriso.info +++ b/xorriso/xorriso.info @@ -2683,9 +2683,19 @@ according to the setting of command -acl. "max_bpt_f="1k|...|128g sets the limit for the memory size of the block pointer list of a single file. max_bpt_f is never larger than max_bpt. If either is set to violate this rule, the other - gets set to the same value. - "default" same as "level=6:block_size=32k:by_magic=off: - version_2=off:block_size_v2=128k:max_bpt=256m:max_bpt_f=256m". + gets set to the same value. If both values are the same before a + change by max_bpt= or max_bpt_f=, then both limits stick together + unless the limit is decreased by max_bpt_f=. + "bpt_free_ratio="-1|[0.0...1.0] sets a threshold for switching to + block pointer discarding during compression. If less than the + given fraction of the max_bpt_f= memory is free, then block + pointers of compression filters get discarded after size + assessment. This causes a third read run of the input file during + the production of the ISO filesystem. Value -1 disables this + feature. + "default" is the same as "level=6:block_size=32k:by_magic=off: + version_2=off:block_size_v2=128k:max_bpt=256m:max_bpt_f=256m: + bpt_free_ratio=0.5". -speed code|number[k|m|c|d|b] Set the burn speed. Default is "max" (or "0") = maximum speed as announced by the drive. Further special speed codes are: @@ -5490,7 +5500,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 451) +* -close controls media closing: SetWrite. (line 461) * -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) @@ -5520,11 +5530,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 443) +* -dummy controls write simulation: SetWrite. (line 453) * -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 380) +* -dvd_obs set write block size: SetWrite. (line 390) * -early_stdio_test classifies stdio drives: Loading. (line 341) * -ecma119_map names w/o Rock Ridge, Joliet: Loading. (line 229) * -eject ejects drive tray: Writing. (line 50) @@ -5544,7 +5554,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 446) +* -fs sets size of fifo: SetWrite. (line 456) * -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) @@ -5589,7 +5599,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 386) +* -modesty_on_drive keep drive buffer hungry: SetWrite. (line 396) * -mount issues mount command for ISO session: Restore. (line 153) * -mount_cmd composes mount command line: Inquiry. (line 49) * -mount_cmd controls mount command: Inquiry. (line 65) @@ -5608,7 +5618,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 474) +* -padding sets amount or mode of image padding: SetWrite. (line 484) * -page set terminal geometry: DialogCtl. (line 18) * -paste_in copies file into disk file: Restore. (line 121) * -pathspecs sets meaning of = with -add: SetInsert. (line 115) @@ -5666,12 +5676,12 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -signal_handling controls handling of system signals: Exception. (line 66) * -sleep waits for a given time span: Scripting. (line 113) -* -speed set write speed: SetWrite. (line 351) +* -speed set write speed: SetWrite. (line 361) * -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 436) -* -stream_recording controls defect management: SetWrite. (line 369) +* -stdio_sync controls stdio buffer: SetWrite. (line 446) +* -stream_recording controls defect management: SetWrite. (line 379) * -system_id sets system id: SetWrite. (line 205) * -tell_media_space reports free space: Inquiry. (line 98) * -temp_mem_limit curbs memory consumption: Scripting. (line 96) @@ -5684,13 +5694,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 424) +* -use_immed_bit controls use of Immed bit: SetWrite. (line 434) * -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 467) +* -write_type chooses TAO or SAO/DAO: SetWrite. (line 477) * -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) @@ -5723,7 +5733,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 424) +* Blank, format, Immed bit, -use_immed_bit: SetWrite. (line 434) * Blind growing, _definition: Methods. (line 41) * Bootability, control, -boot_image: Bootable. (line 75) * Bugs, reporting: Bugreport. (line 6) @@ -5986,26 +5996,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 380) +* Write, block size, -dvd_obs: SetWrite. (line 390) * Write, bootability, -boot_image: Bootable. (line 75) -* Write, buffer syncing, -stdio_sync: SetWrite. (line 436) -* Write, close media, -close: SetWrite. (line 451) +* Write, buffer syncing, -stdio_sync: SetWrite. (line 446) +* Write, close media, -close: SetWrite. (line 461) * Write, compliance to specs, -compliance: SetWrite. (line 62) -* Write, defect management, -stream_recording: SetWrite. (line 369) +* Write, defect management, -stream_recording: SetWrite. (line 379) * Write, disable Rock Ridge, -rockridge: SetWrite. (line 57) -* Write, drive buffer, -modesty_on_drive: SetWrite. (line 386) +* Write, drive buffer, -modesty_on_drive: SetWrite. (line 396) * Write, enable HFS+, -hfsplus: SetWrite. (line 14) * Write, enable Joliet, -joliet: SetWrite. (line 10) -* Write, fifo size, -fs: SetWrite. (line 446) +* Write, fifo size, -fs: SetWrite. (line 456) * 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 474) +* Write, padding image, -padding: SetWrite. (line 484) * Write, pending ISO image, -commit: Writing. (line 27) * Write, predict image size, -print_size: Inquiry. (line 86) -* Write, set speed, -speed: SetWrite. (line 351) -* Write, simulation, -dummy: SetWrite. (line 443) -* Write, TAO or SAO/DAO, -write_type: SetWrite. (line 467) +* Write, set speed, -speed: SetWrite. (line 361) +* Write, simulation, -dummy: SetWrite. (line 453) +* Write, TAO or SAO/DAO, -write_type: SetWrite. (line 477) * 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) @@ -6037,41 +6047,41 @@ Node: CmdFind88338 Node: Filter107267 Node: Writing111889 Node: SetWrite124144 -Node: Bootable151824 -Node: Jigdo178909 -Node: Charset183912 -Node: Exception187241 -Node: DialogCtl193370 -Node: Inquiry195972 -Node: Navigate204854 -Node: Verify213561 -Node: Restore224710 -Node: Emulation233876 -Node: Scripting244332 -Node: Frontend252115 -Node: Examples261741 -Node: ExDevices262919 -Node: ExCreate263580 -Node: ExDialog264880 -Node: ExGrowing266151 -Node: ExModifying266960 -Node: ExBootable267470 -Node: ExCharset268025 -Node: ExPseudo268921 -Node: ExCdrecord269848 -Node: ExMkisofs270168 -Node: ExGrowisofs272065 -Node: ExException273218 -Node: ExTime273676 -Node: ExIncBackup274134 -Node: ExRestore278160 -Node: ExRecovery279106 -Node: Files279678 -Node: Environ281012 -Node: Seealso281760 -Node: Bugreport282477 -Node: Legal283068 -Node: CommandIdx284080 -Node: ConceptIdx301696 +Node: Bootable152434 +Node: Jigdo179519 +Node: Charset184522 +Node: Exception187851 +Node: DialogCtl193980 +Node: Inquiry196582 +Node: Navigate205464 +Node: Verify214171 +Node: Restore225320 +Node: Emulation234486 +Node: Scripting244942 +Node: Frontend252725 +Node: Examples262351 +Node: ExDevices263529 +Node: ExCreate264190 +Node: ExDialog265490 +Node: ExGrowing266761 +Node: ExModifying267570 +Node: ExBootable268080 +Node: ExCharset268635 +Node: ExPseudo269531 +Node: ExCdrecord270458 +Node: ExMkisofs270778 +Node: ExGrowisofs272675 +Node: ExException273828 +Node: ExTime274286 +Node: ExIncBackup274744 +Node: ExRestore278770 +Node: ExRecovery279716 +Node: Files280288 +Node: Environ281622 +Node: Seealso282370 +Node: Bugreport283087 +Node: Legal283678 +Node: CommandIdx284690 +Node: ConceptIdx302306  End Tag Table diff --git a/xorriso/xorriso.texi b/xorriso/xorriso.texi index 65a09253..00548304 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.3, Oct 16, 2020" +@c man .TH XORRISO 1 "Version 1.5.3, Oct 21, 2020" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @@ -3667,9 +3667,19 @@ may further reduce the effective payload. "max_bpt_f="1k|...|128g sets the limit for the memory size of the block pointer list of a single file. max_bpt_f is never larger than max_bpt. If either is set to violate this rule, the other gets set to the same value. +If both values are the same before a change by max_bpt= or max_bpt_f=, then +both limits stick together unless the limit is decreased by max_bpt_f=. @* - "default" same as "level=6:block_size=32k:by_magic=off: -version_2=off:block_size_v2=128k:max_bpt=256m:max_bpt_f=256m". + "bpt_free_ratio="-1|[0.0...1.0] sets a threshold for switching to block +pointer discarding during compression. If less than the given fraction of the +max_bpt_f= memory is free, then block pointers of compression filters get +discarded after size assessment. This causes a third read run of the input +file during the production of the ISO filesystem. Value -1 disables this +feature. +@* + "default" is the same as "level=6:block_size=32k:by_magic=off: +version_2=off:block_size_v2=128k:max_bpt=256m:max_bpt_f=256m: +bpt_free_ratio=0.5". @c man .TP @item -speed code|number[k|m|c|d|b] @kindex -speed set write speed diff --git a/xorriso/xorriso_private.h b/xorriso/xorriso_private.h index 1edd1361..d3de0fd3 100644 --- a/xorriso/xorriso_private.h +++ b/xorriso/xorriso_private.h @@ -232,6 +232,8 @@ struct XorrisO { /* the global context of xorriso */ int zisofs_v2_block_size; int zisofs_v2_block_size_default; int64_t zisofs_block_number_target; + double zisofs_bpt_discard_free_ratio; + double zisofs_bpt_discard_free_ratio_default; int do_overwrite; /* 0=off, 1=on, 2=nondir */ int do_reassure; /* 0=off, 1=on, 2=tree */ diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 3640b7c3..61f77d15 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2020.10.17.133001" +#define Xorriso_timestamP "2020.10.22.114038"