Compare commits
2 Commits
27e15689e5
...
da44c706ea
Author | SHA1 | Date |
---|---|---|
Thomas Schmitt | da44c706ea | |
Thomas Schmitt | 31591b8196 |
|
@ -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.5.5, Jun 29, 2021"
|
.TH CDRSKIN 1 "Version 1.5.5, Sep 12, 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:
|
||||||
|
@ -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.)
|
to a usable drive. (Like /dev/sg0 using the same SCSI address as /dev/sr0.)
|
||||||
.TP
|
.TP
|
||||||
.BI \--obs_pad
|
.BI \--obs_pad
|
||||||
Pad the data of last write operation of a DVD-R[W] DAO session or
|
Pad the data of the last write operation of a DVD-R[W] DAO session, or BD-R
|
||||||
stdio: pseudo-drive up to the full size of an output chunk.
|
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
|
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.
|
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
|
.br
|
||||||
Use this option if there is the suspicion that DAO sessions abort with
|
Use this option if there is the suspicion that DVD-R[W] DAO or BD-R sessions
|
||||||
your kernel and/or DVD drive, if their size is not a multiple of 16 blocks.
|
abort with your kernel and/or DVD drive, if their size is not a multiple of
|
||||||
|
16 blocks.
|
||||||
.br
|
.br
|
||||||
This option may also get enabled at compile time of libburn.
|
This option may also get enabled at compile time of libburn.
|
||||||
.TP
|
.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
|
.BI \--old_pseudo_scsi_adr
|
||||||
Linux specific:
|
Linux specific:
|
||||||
Use and report literal Bus,Target,Lun addresses rather than real SCSI and
|
Use and report literal Bus,Target,Lun addresses rather than real SCSI and
|
||||||
|
|
|
@ -2914,6 +2914,8 @@ set_dev:;
|
||||||
printf(
|
printf(
|
||||||
" --no_rc as first argument: do not read startup files\n");
|
" --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(" --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(" --old_pseudo_scsi_adr use and report literal Bus,Target,Lun\n");
|
||||||
printf(" rather than real SCSI and pseudo ATA.\n");
|
printf(" rather than real SCSI and pseudo ATA.\n");
|
||||||
printf(
|
printf(
|
||||||
|
@ -3391,6 +3393,9 @@ struct CdrskiN {
|
||||||
int stream_recording_is_set; /* see burn_write_opts_set_stream_recording() */
|
int stream_recording_is_set; /* see burn_write_opts_set_stream_recording() */
|
||||||
int dvd_obs; /* DVD write chunk size: 0, 32k or 64k */
|
int dvd_obs; /* DVD write chunk size: 0, 32k or 64k */
|
||||||
int obs_pad; /* Whether to force obs end padding */
|
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 stdio_sync; /* stdio fsync interval: -1, 0, >=32 */
|
||||||
int single_track;
|
int single_track;
|
||||||
int prodvd_cli_compatible;
|
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->stream_recording_is_set= 0;
|
||||||
o->dvd_obs= 0;
|
o->dvd_obs= 0;
|
||||||
o->obs_pad= 0;
|
o->obs_pad= 0;
|
||||||
|
o->bdr_obs_exempt= 0;
|
||||||
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;
|
||||||
|
@ -7697,6 +7703,7 @@ burn_failed:;
|
||||||
#endif
|
#endif
|
||||||
burn_write_opts_set_dvd_obs(o, skin->dvd_obs);
|
burn_write_opts_set_dvd_obs(o, skin->dvd_obs);
|
||||||
burn_write_opts_set_obs_pad(o, skin->obs_pad);
|
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);
|
burn_write_opts_set_stdio_fsync(o, skin->stdio_sync);
|
||||||
|
|
||||||
if(skin->dummy_mode) {
|
if(skin->dummy_mode) {
|
||||||
|
@ -9169,6 +9176,9 @@ msifile_equals:;
|
||||||
} else if(strcmp(argv[i],"--obs_pad")==0) {
|
} else if(strcmp(argv[i],"--obs_pad")==0) {
|
||||||
skin->obs_pad= 1;
|
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) {
|
} else if(strcmp(argv[i],"--old_pseudo_scsi_adr")==0) {
|
||||||
/* is handled in Cdrpreskin_setup() */;
|
/* is handled in Cdrpreskin_setup() */;
|
||||||
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
#define Cdrskin_timestamP "2021.09.02.181259"
|
#define Cdrskin_timestamP "2021.09.12.084556"
|
||||||
|
|
|
@ -3389,6 +3389,21 @@ void burn_write_opts_set_dvd_obs(struct burn_write_opts *opts, int obs);
|
||||||
void burn_write_opts_set_obs_pad(struct burn_write_opts *opts, int pad);
|
void burn_write_opts_set_obs_pad(struct burn_write_opts *opts, int pad);
|
||||||
|
|
||||||
|
|
||||||
|
/* ts C10909 */
|
||||||
|
/** Exempts BD-R media from the elsewise unavoidable automatic padding of the
|
||||||
|
last write chunk to its full size.
|
||||||
|
Even if this exempt is granted it gets into effect only if stream recording
|
||||||
|
is disabled and burn_write_opts_set_obs_pad() is set to 0.
|
||||||
|
@param opts The write opts to change
|
||||||
|
@param value 1= possibly exempt BD-R from end chunk padding.
|
||||||
|
0= always act on BD-R as if
|
||||||
|
burn_write_opts_set_obs_pad(opts, 1) is in effect.
|
||||||
|
@since 1.5.6
|
||||||
|
*/
|
||||||
|
void burn_write_opts_set_bdr_obs_exempt(struct burn_write_opts *opts,
|
||||||
|
int value);
|
||||||
|
|
||||||
|
|
||||||
/* ts A91115 */
|
/* ts A91115 */
|
||||||
/** Sets the rhythm by which stdio pseudo drives force their output data to
|
/** Sets the rhythm by which stdio pseudo drives force their output data to
|
||||||
be consumed by the receiving storage device. This forcing keeps the memory
|
be consumed by the receiving storage device. This forcing keeps the memory
|
||||||
|
|
|
@ -186,6 +186,7 @@ burn_write_opts_auto_write_type;
|
||||||
burn_write_opts_free;
|
burn_write_opts_free;
|
||||||
burn_write_opts_get_drive;
|
burn_write_opts_get_drive;
|
||||||
burn_write_opts_new;
|
burn_write_opts_new;
|
||||||
|
burn_write_opts_set_bdr_obs_exempt;
|
||||||
burn_write_opts_set_dvd_obs;
|
burn_write_opts_set_dvd_obs;
|
||||||
burn_write_opts_set_fail21h_sev;
|
burn_write_opts_set_fail21h_sev;
|
||||||
burn_write_opts_set_fillup;
|
burn_write_opts_set_fillup;
|
||||||
|
|
|
@ -55,6 +55,7 @@ struct burn_write_opts *burn_write_opts_new(struct burn_drive *drive)
|
||||||
opts->obs_pad = 0;
|
opts->obs_pad = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
opts->bdr_obs_exempt = 0;
|
||||||
opts->start_byte = -1;
|
opts->start_byte = -1;
|
||||||
opts->fill_up_media = 0;
|
opts->fill_up_media = 0;
|
||||||
opts->force_is_set = 0;
|
opts->force_is_set = 0;
|
||||||
|
@ -535,6 +536,14 @@ void burn_write_opts_set_obs_pad(struct burn_write_opts *opts, int pad)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ts C10909: API */
|
||||||
|
void burn_write_opts_set_bdr_obs_exempt(struct burn_write_opts *opts,
|
||||||
|
int value)
|
||||||
|
{
|
||||||
|
opts->bdr_obs_exempt = !!value;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ts A91115: API */
|
/* ts A91115: API */
|
||||||
void burn_write_opts_set_stdio_fsync(struct burn_write_opts *opts, int rhythm)
|
void burn_write_opts_set_stdio_fsync(struct burn_write_opts *opts, int rhythm)
|
||||||
{
|
{
|
||||||
|
|
|
@ -46,6 +46,9 @@ struct burn_write_opts
|
||||||
2 indicates burn_write_opts_set_obs_pad(,1)
|
2 indicates burn_write_opts_set_obs_pad(,1)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* 1= do not apply obs_pad=1 to BD-R if not stream recording. */
|
||||||
|
int bdr_obs_exempt;
|
||||||
|
|
||||||
/* ts A61222 : Start address for media which offer a choice */
|
/* ts A61222 : Start address for media which offer a choice */
|
||||||
off_t start_byte;
|
off_t start_byte;
|
||||||
|
|
||||||
|
|
|
@ -1658,16 +1658,6 @@ int burn_disc_open_track_dvd_plus_r(struct burn_write_opts *o,
|
||||||
size += (off_t) (o->obs - (size % o->obs));
|
size += (off_t) (o->obs - (size % o->obs));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* <<< Only for now until the first DVD+R succeeded */
|
|
||||||
if (!o->obs_pad) {
|
|
||||||
sprintf(msg, "Program error: encountered DVD+R without chunk padding");
|
|
||||||
libdax_msgs_submit(libdax_messenger, d->global_index,
|
|
||||||
0x00000004,
|
|
||||||
LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH,
|
|
||||||
msg, 0, 0);
|
|
||||||
{ret = 0; goto ex;}
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = d->reserve_track(d, size);
|
ret = d->reserve_track(d, size);
|
||||||
if (ret <= 0) {
|
if (ret <= 0) {
|
||||||
sprintf(msg, "Cannot reserve track of %.f bytes",
|
sprintf(msg, "Cannot reserve track of %.f bytes",
|
||||||
|
@ -2436,9 +2426,17 @@ int burn_dvd_write_sync(struct burn_write_opts *o,
|
||||||
msg, 0, 0);
|
msg, 0, 0);
|
||||||
goto early_failure;
|
goto early_failure;
|
||||||
}
|
}
|
||||||
/* ??? padding needed ??? cowardly doing it for now */
|
/* Unaligned BD-R track end works with various drives and
|
||||||
if (o->obs_pad < 2)
|
produces exact READ CAPACITY results.
|
||||||
|
Nevertheless stream recording hates unaligned WRITE.
|
||||||
|
With DVD+R it seems that obs_pad is silently applied by the
|
||||||
|
drive if a non-aligned final WRITE is received.
|
||||||
|
*/
|
||||||
|
if (o->obs_pad < 2 &&
|
||||||
|
!(d->current_profile == 0x41 && !d->do_stream_recording &&
|
||||||
|
o->bdr_obs_exempt))
|
||||||
o->obs_pad = 1; /* fill-up track's last obs buffer */
|
o->obs_pad = 1; /* fill-up track's last obs buffer */
|
||||||
|
|
||||||
if (d->current_profile == 0x41) /* BD-R */
|
if (d->current_profile == 0x41) /* BD-R */
|
||||||
o->obs = Libburn_bd_r_obS;
|
o->obs = Libburn_bd_r_obS;
|
||||||
if (d->do_stream_recording) {
|
if (d->do_stream_recording) {
|
||||||
|
|
Loading…
Reference in New Issue