New API calls isoburn_igopt_set_write_type() , isoburn_igopt_get_write_type()
This commit is contained in:
parent
c2e3a36d51
commit
d674f847c2
@ -864,14 +864,8 @@ void isoburn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
|
||||
struct burn_drive *drive;
|
||||
char *reasons= NULL, *msg= NULL, *adr= NULL;
|
||||
struct stat stbuf;
|
||||
|
||||
#ifdef Libisoburn_write_type_autO
|
||||
|
||||
/* <<< on its way out */
|
||||
enum burn_write_types write_type;
|
||||
|
||||
#endif /* Libisoburn_write_type_autO */
|
||||
|
||||
drive= burn_write_opts_get_drive(opts);
|
||||
|
||||
reasons= calloc(1, BURN_REASONS_LEN);
|
||||
@ -923,44 +917,42 @@ void isoburn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef Libisoburn_write_type_autO
|
||||
if(o->do_tao) {
|
||||
if (o->do_tao > 0)
|
||||
burn_write_opts_set_write_type(opts, BURN_WRITE_TAO, BURN_BLOCK_MODE1);
|
||||
else
|
||||
burn_write_opts_set_write_type(opts, BURN_WRITE_SAO, BURN_BLOCK_SAO);
|
||||
|
||||
/* <<< on its way out */
|
||||
ret = burn_precheck_write(opts, disc, reasons, 0);
|
||||
if(ret <= 0) {
|
||||
sprintf(msg, "Cannot set write type %s for this medium.",
|
||||
o->do_tao > 0 ? "TAO" : "SAO");
|
||||
sprintf(msg + strlen(msg), "Reasons given:\n %s", reasons);
|
||||
goto no_write_type;
|
||||
}
|
||||
sprintf(msg, "Explicitly chosen write type: %s",
|
||||
o->do_tao > 0 ? "TAO" : "SAO");
|
||||
isoburn_msgs_submit(o, 0x00060000, msg, 0, "NOTE", 0);
|
||||
} else {
|
||||
write_type= burn_write_opts_auto_write_type(opts, disc, reasons, 0);
|
||||
if (write_type == BURN_WRITE_NONE) {
|
||||
sprintf(msg, "Failed to find a suitable write type:\n%s", reasons);
|
||||
no_write_type:;
|
||||
isoburn_msgs_submit(o, 0x00060000, msg, 0, "FAILURE", 0);
|
||||
if(o!=NULL)
|
||||
o->wrote_well= 0;
|
||||
/* To cause a negative reply with burn_drive_wrote_well() */
|
||||
burn_drive_cancel(drive);
|
||||
goto ex;
|
||||
}
|
||||
|
||||
write_type= burn_write_opts_auto_write_type(opts, disc, reasons, 0);
|
||||
if (write_type == BURN_WRITE_NONE) {
|
||||
sprintf(msg, "Failed to find a suitable write mode:\n%s", reasons);
|
||||
isoburn_msgs_submit(o, 0x00060000, msg, 0, "FAILURE", 0);
|
||||
if(o!=NULL)
|
||||
o->wrote_well= 0;
|
||||
/* To cause a negative reply with burn_drive_wrote_well() */
|
||||
burn_drive_cancel(drive);
|
||||
goto ex;
|
||||
sprintf(reasons, "%d", (int) write_type);
|
||||
sprintf(msg, "Write_type = %s\n",
|
||||
(write_type == BURN_WRITE_SAO ? "SAO" :
|
||||
(write_type == BURN_WRITE_TAO ? "TAO" : reasons)));
|
||||
isoburn_msgs_submit(o, 0x00060000, msg, 0, "DEBUG", 0);
|
||||
}
|
||||
|
||||
sprintf(reasons, "%d", (int) write_type);
|
||||
sprintf(msg, "Write_type = %s\n",
|
||||
(write_type == BURN_WRITE_SAO ? "SAO" :
|
||||
(write_type == BURN_WRITE_TAO ? "TAO" : reasons)));
|
||||
isoburn_msgs_submit(o, 0x00060000, msg, 0, "DEBUG", 0);
|
||||
|
||||
#else /* Libisoburn_write_type_autO */
|
||||
|
||||
/* The caller is in charge to select the write type */
|
||||
ret = burn_precheck_write(opts, disc, reasons, 0);
|
||||
if(ret <= 0) {
|
||||
sprintf(msg, "Write parameters not properly set for this medium:\n %s",
|
||||
reasons);
|
||||
isoburn_msgs_submit(o, 0x00060000, msg, 0, "FAILURE", 0);
|
||||
if(o!=NULL)
|
||||
o->wrote_well= 0;
|
||||
/* To cause a negative reply with burn_drive_wrote_well() */
|
||||
burn_drive_cancel(drive);
|
||||
goto ex;
|
||||
}
|
||||
|
||||
#endif /* ! Libisoburn_write_type_autO */
|
||||
|
||||
#ifdef Hardcoded_cd_rW
|
||||
/* <<< A70929 : hardcoded CD-RW with fabricated -msinfo */
|
||||
fprintf(stderr, "Setting write address to LBA %d\n", Hardcoded_cd_rw_nwA);
|
||||
|
@ -149,6 +149,7 @@ int isoburn_new(struct isoburn **objpt, int flag)
|
||||
o->msgs_submit= NULL;
|
||||
o->msgs_submit_handle= NULL;
|
||||
o->msgs_submit_flag= 0;
|
||||
o->do_tao= 0;
|
||||
o->prev= NULL;
|
||||
o->next= NULL;
|
||||
o->target_iso_head= calloc(1, o->target_iso_head_size);
|
||||
@ -435,6 +436,8 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
|
||||
{ret= -4; goto ex;}
|
||||
}
|
||||
|
||||
out_o->do_tao = opts->do_tao;
|
||||
|
||||
state = isoburn_disc_get_status(in_d);
|
||||
if (state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE &&
|
||||
state != BURN_DISC_FULL) {
|
||||
@ -1099,6 +1102,7 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
|
||||
memset(o->hfsp_serial_number, 0, 8);
|
||||
o->hfsp_block_size= 0;
|
||||
o->apm_block_size= 0;
|
||||
o->do_tao= 0;
|
||||
return(1);
|
||||
}
|
||||
|
||||
@ -1703,3 +1707,19 @@ int isoburn_igopt_get_hfsp_block_size(struct isoburn_imgen_opts *opts,
|
||||
}
|
||||
|
||||
|
||||
int isoburn_igopt_set_write_type(struct isoburn_imgen_opts *opts, int do_tao)
|
||||
{
|
||||
if(do_tao < -1 || do_tao > 1)
|
||||
return(0);
|
||||
opts->do_tao= do_tao;
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
int isoburn_igopt_get_write_type(struct isoburn_imgen_opts *opts, int *do_tao)
|
||||
{
|
||||
*do_tao= opts->do_tao;
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
|
@ -165,6 +165,9 @@ struct isoburn {
|
||||
void *msgs_submit_handle; /* specific to application method */
|
||||
int msgs_submit_flag; /* specific to application method */
|
||||
|
||||
/* Forwarding an image generation option to the burn wrapper */
|
||||
int do_tao;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -691,6 +694,13 @@ struct isoburn_imgen_opts {
|
||||
*/
|
||||
int apm_block_size;
|
||||
|
||||
/* Write mode for optical media:
|
||||
* 0 = auto
|
||||
* 1 = TAO, Incremental, no RESERVE TRACK
|
||||
* -1 = SAO, DAO, RESERVE TRACK
|
||||
*/
|
||||
int do_tao;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
@ -1834,6 +1834,31 @@ int isoburn_igopt_get_hfsp_block_size(struct isoburn_imgen_opts *opts,
|
||||
int *hfsp_block_size, int *apm_block_size);
|
||||
|
||||
|
||||
/** Set or inquire the write type for the next write run on optical media.
|
||||
@since 1.2.4
|
||||
@param opts
|
||||
The option set to be manipulated or inquired.
|
||||
@param do_tao
|
||||
The value to be set or the variable where to return the current
|
||||
setting:
|
||||
0 = Let libburn choose according to other write parameters.
|
||||
This is advisable unless there are particular reasons not to
|
||||
use one of the two write types. Be aware that 1 and -1 can
|
||||
lead to failure if the write type is not appropriate for
|
||||
the given media situation.
|
||||
1 = Use BURN_WRITE_TAO which does
|
||||
TAO on CD, Incremental on DVD-R,
|
||||
no track reservation on DVD+R and BD-R
|
||||
-1 = Use BURN_WRITE_SAO which does
|
||||
SAO on CD, DAO on DVD-R,
|
||||
track reservation on DVD+R and BD-R
|
||||
@return
|
||||
<=0 = error, 1 = success
|
||||
*/
|
||||
int isoburn_igopt_set_write_type(struct isoburn_imgen_opts *opts, int do_tao);
|
||||
int isoburn_igopt_get_write_type(struct isoburn_imgen_opts *opts, int *do_tao);
|
||||
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
/* End of Options for image generation */
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
@ -48,6 +48,7 @@ isoburn_igopt_get_sort_files;
|
||||
isoburn_igopt_get_system_area;
|
||||
isoburn_igopt_get_tail_blocks;
|
||||
isoburn_igopt_get_untranslated_name_len;
|
||||
isoburn_igopt_get_write_type;
|
||||
isoburn_igopt_new;
|
||||
isoburn_igopt_set_disc_label;
|
||||
isoburn_igopt_set_efi_bootp;
|
||||
@ -69,6 +70,7 @@ isoburn_igopt_set_sort_files;
|
||||
isoburn_igopt_set_system_area;
|
||||
isoburn_igopt_set_tail_blocks;
|
||||
isoburn_igopt_set_untranslated_name_len;
|
||||
isoburn_igopt_set_write_type;
|
||||
isoburn_initialize;
|
||||
isoburn_is_compatible;
|
||||
isoburn_libburn_req;
|
||||
|
@ -1 +1 @@
|
||||
#define Xorriso_timestamP "2012.07.08.200735"
|
||||
#define Xorriso_timestamP "2012.07.10.082919"
|
||||
|
Loading…
Reference in New Issue
Block a user