From da44c706eaa1e32749e091adeac0df384632144f Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Sun, 12 Sep 2021 10:46:28 +0200 Subject: [PATCH] New cdrskin option --bdr_obs_exempt --- cdrskin/cdrskin.1 | 21 ++++++++++++++++----- cdrskin/cdrskin.c | 10 ++++++++++ cdrskin/cdrskin_timestamp.h | 2 +- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/cdrskin/cdrskin.1 b/cdrskin/cdrskin.1 index bafa2a3..ca6d657 100644 --- a/cdrskin/cdrskin.1 +++ b/cdrskin/cdrskin.1 @@ -2,7 +2,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 CDRSKIN 1 "Version 1.5.5, Jun 29, 2021" +.TH CDRSKIN 1 "Version 1.5.5, Sep 12, 2021" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -1640,16 +1640,27 @@ addresses which are not listed with cdrskin --devices but nevertheless point to a usable drive. (Like /dev/sg0 using the same SCSI address as /dev/sr0.) .TP .BI \--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. +Pad the data of the last write operation of a DVD-R[W] DAO session, or BD-R +session, or stdio: pseudo-drive 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 option +--bdr_obs_exempt. .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. +Use this option if there is the suspicion that DVD-R[W] DAO or BD-R 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 +.BI \--bdr_obs_exempt +Exempt 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. +.br +This is a new feature introduced with version 1.5.6. It might become default +in later versions. +.TP .BI \--old_pseudo_scsi_adr Linux specific: Use and report literal Bus,Target,Lun addresses rather than real SCSI and diff --git a/cdrskin/cdrskin.c b/cdrskin/cdrskin.c index dbff298..3262cf6 100644 --- a/cdrskin/cdrskin.c +++ b/cdrskin/cdrskin.c @@ -2914,6 +2914,8 @@ set_dev:; printf( " --no_rc as first argument: do not read startup files\n"); printf(" --obs_pad pad DVD DAO to full 16 or 32 blocks\n"); + printf( + " --bdr_obs_exempt possibly exempt BD-R from padding to full 64k\n"); printf(" --old_pseudo_scsi_adr use and report literal Bus,Target,Lun\n"); printf(" rather than real SCSI and pseudo ATA.\n"); printf( @@ -3391,6 +3393,9 @@ struct CdrskiN { int stream_recording_is_set; /* see burn_write_opts_set_stream_recording() */ int dvd_obs; /* DVD write chunk size: 0, 32k or 64k */ int obs_pad; /* Whether to force obs end padding */ + int bdr_obs_exempt; /* Whether to possibly exempt BD-R from automatic + obs_pad + */ int stdio_sync; /* stdio fsync interval: -1, 0, >=32 */ int single_track; int prodvd_cli_compatible; @@ -3665,6 +3670,7 @@ int Cdrskin_new(struct CdrskiN **skin, struct CdrpreskiN *preskin, int flag) o->stream_recording_is_set= 0; o->dvd_obs= 0; o->obs_pad= 0; + o->bdr_obs_exempt= 0; o->stdio_sync= 0; o->single_track= 0; o->prodvd_cli_compatible= 0; @@ -7697,6 +7703,7 @@ burn_failed:; #endif burn_write_opts_set_dvd_obs(o, skin->dvd_obs); burn_write_opts_set_obs_pad(o, skin->obs_pad); + burn_write_opts_set_bdr_obs_exempt(o, skin->bdr_obs_exempt); burn_write_opts_set_stdio_fsync(o, skin->stdio_sync); if(skin->dummy_mode) { @@ -9169,6 +9176,9 @@ msifile_equals:; } else if(strcmp(argv[i],"--obs_pad")==0) { skin->obs_pad= 1; + } else if(strcmp(argv[i],"--bdr_obs_exempt")==0) { + skin->bdr_obs_exempt= 1; + } else if(strcmp(argv[i],"--old_pseudo_scsi_adr")==0) { /* is handled in Cdrpreskin_setup() */; diff --git a/cdrskin/cdrskin_timestamp.h b/cdrskin/cdrskin_timestamp.h index cac992e..5798734 100644 --- a/cdrskin/cdrskin_timestamp.h +++ b/cdrskin/cdrskin_timestamp.h @@ -1 +1 @@ -#define Cdrskin_timestamP "2021.09.12.084139" +#define Cdrskin_timestamP "2021.09.12.084556"