Made use of burn_write_opts_auto_write_type()
This commit is contained in:
parent
05623cffc4
commit
494693cc63
@ -261,13 +261,15 @@ int libburner_blank_disc(struct burn_drive *drive, int blank_fast)
|
|||||||
{
|
{
|
||||||
enum burn_disc_status disc_state;
|
enum burn_disc_status disc_state;
|
||||||
struct burn_progress p;
|
struct burn_progress p;
|
||||||
int percent = 1;
|
double percent = 1.0;
|
||||||
|
|
||||||
disc_state = burn_disc_get_status(drive);
|
disc_state = burn_disc_get_status(drive);
|
||||||
printf(
|
printf(
|
||||||
"Drive media status: %d (see libburn/libburn.h BURN_DISC_*)\n",
|
"Drive media status: %d (see libburn/libburn.h BURN_DISC_*)\n",
|
||||||
disc_state);
|
disc_state);
|
||||||
if (disc_state == BURN_DISC_BLANK) {
|
if (current_profile == 0x13) {
|
||||||
|
; /* formatted DVD-RW will get blanked to sequential state */
|
||||||
|
} else if (disc_state == BURN_DISC_BLANK) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"IDLE: Blank media detected. Will leave it untouched\n");
|
"IDLE: Blank media detected. Will leave it untouched\n");
|
||||||
return 2;
|
return 2;
|
||||||
@ -295,7 +297,7 @@ int libburner_blank_disc(struct burn_drive *drive, int blank_fast)
|
|||||||
if(p.sectors>0 && p.sector>=0) /* display 1 to 99 percent */
|
if(p.sectors>0 && p.sector>=0) /* display 1 to 99 percent */
|
||||||
percent = 1.0 + ((double) p.sector+1.0)
|
percent = 1.0 + ((double) p.sector+1.0)
|
||||||
/ ((double) p.sectors) * 98.0;
|
/ ((double) p.sectors) * 98.0;
|
||||||
printf("Blanking ( %d%% done )\n", percent);
|
printf("Blanking ( %.1f%% done )\n", percent);
|
||||||
sleep(1);
|
sleep(1);
|
||||||
}
|
}
|
||||||
printf("Done\n");
|
printf("Done\n");
|
||||||
@ -311,7 +313,7 @@ int libburner_blank_disc(struct burn_drive *drive, int blank_fast)
|
|||||||
int libburner_format_row(struct burn_drive *drive)
|
int libburner_format_row(struct burn_drive *drive)
|
||||||
{
|
{
|
||||||
struct burn_progress p;
|
struct burn_progress p;
|
||||||
int percent = 1;
|
double percent = 1.0;
|
||||||
|
|
||||||
if (current_profile == 0x13) {
|
if (current_profile == 0x13) {
|
||||||
fprintf(stderr, "IDLE: DVD-RW media is already formatted\n");
|
fprintf(stderr, "IDLE: DVD-RW media is already formatted\n");
|
||||||
@ -328,7 +330,7 @@ int libburner_format_row(struct burn_drive *drive)
|
|||||||
if(p.sectors>0 && p.sector>=0) /* display 1 to 99 percent */
|
if(p.sectors>0 && p.sector>=0) /* display 1 to 99 percent */
|
||||||
percent = 1.0 + ((double) p.sector+1.0)
|
percent = 1.0 + ((double) p.sector+1.0)
|
||||||
/ ((double) p.sectors) * 98.0;
|
/ ((double) p.sectors) * 98.0;
|
||||||
printf("Formatting ( %d%% done )\n", percent);
|
printf("Formatting ( %.1f%% done )\n", percent);
|
||||||
sleep(1);
|
sleep(1);
|
||||||
}
|
}
|
||||||
burn_disc_get_profile(drive_list[0].drive, ¤t_profile,
|
burn_disc_get_profile(drive_list[0].drive, ¤t_profile,
|
||||||
@ -351,6 +353,9 @@ int libburner_format_row(struct burn_drive *drive)
|
|||||||
|
|
||||||
In case of external signals expect abort handling of an ongoing burn to
|
In case of external signals expect abort handling of an ongoing burn to
|
||||||
last up to a minute. Wait the normal burning timespan before any kill -9.
|
last up to a minute. Wait the normal burning timespan before any kill -9.
|
||||||
|
|
||||||
|
For simplicity, this function allows memory leaks in case of failure.
|
||||||
|
In apps which do not abort immediately, one should clean up better.
|
||||||
*/
|
*/
|
||||||
int libburner_payload(struct burn_drive *drive,
|
int libburner_payload(struct burn_drive *drive,
|
||||||
char source_adr[][4096], int source_adr_count,
|
char source_adr[][4096], int source_adr_count,
|
||||||
@ -364,9 +369,9 @@ int libburner_payload(struct burn_drive *drive,
|
|||||||
struct burn_track *track, *tracklist[99];
|
struct burn_track *track, *tracklist[99];
|
||||||
struct burn_progress progress;
|
struct burn_progress progress;
|
||||||
time_t start_time;
|
time_t start_time;
|
||||||
int last_sector = 0, padding = 0, trackno, write_mode_tao = 0, fd;
|
int last_sector = 0, padding = 0, trackno, unpredicted_size = 0, fd;
|
||||||
off_t fixed_size;
|
off_t fixed_size;
|
||||||
char *adr;
|
char *adr, reasons[1024];
|
||||||
struct stat stbuf;
|
struct stat stbuf;
|
||||||
|
|
||||||
if (all_tracks_type != BURN_AUDIO) {
|
if (all_tracks_type != BURN_AUDIO) {
|
||||||
@ -395,7 +400,7 @@ int libburner_payload(struct burn_drive *drive,
|
|||||||
fixed_size = stbuf.st_size;
|
fixed_size = stbuf.st_size;
|
||||||
}
|
}
|
||||||
if (fixed_size==0)
|
if (fixed_size==0)
|
||||||
write_mode_tao = 1;
|
unpredicted_size = 1;
|
||||||
data_src = NULL;
|
data_src = NULL;
|
||||||
if (fd>=0)
|
if (fd>=0)
|
||||||
data_src = burn_fd_source_new(fd, -1, fixed_size);
|
data_src = burn_fd_source_new(fd, -1, fixed_size);
|
||||||
@ -419,9 +424,8 @@ int libburner_payload(struct burn_drive *drive,
|
|||||||
|
|
||||||
/* Evaluate drive and media */
|
/* Evaluate drive and media */
|
||||||
disc_state = burn_disc_get_status(drive);
|
disc_state = burn_disc_get_status(drive);
|
||||||
if (disc_state == BURN_DISC_APPENDABLE) {
|
if (disc_state != BURN_DISC_BLANK &&
|
||||||
write_mode_tao = 1;
|
disc_state != BURN_DISC_APPENDABLE) {
|
||||||
} else if (disc_state != BURN_DISC_BLANK) {
|
|
||||||
if (disc_state == BURN_DISC_FULL) {
|
if (disc_state == BURN_DISC_FULL) {
|
||||||
fprintf(stderr, "FATAL: Closed media with data detected. Need blank or appendable media.\n");
|
fprintf(stderr, "FATAL: Closed media with data detected. Need blank or appendable media.\n");
|
||||||
if (burn_disc_erasable(drive))
|
if (burn_disc_erasable(drive))
|
||||||
@ -437,18 +441,17 @@ int libburner_payload(struct burn_drive *drive,
|
|||||||
burn_options = burn_write_opts_new(drive);
|
burn_options = burn_write_opts_new(drive);
|
||||||
burn_write_opts_set_perform_opc(burn_options, 0);
|
burn_write_opts_set_perform_opc(burn_options, 0);
|
||||||
burn_write_opts_set_multi(burn_options, !!multi);
|
burn_write_opts_set_multi(burn_options, !!multi);
|
||||||
if (write_mode_tao)
|
|
||||||
burn_write_opts_set_write_type(burn_options,
|
|
||||||
BURN_WRITE_TAO, BURN_BLOCK_MODE1);
|
|
||||||
else
|
|
||||||
burn_write_opts_set_write_type(burn_options,
|
|
||||||
BURN_WRITE_SAO, BURN_BLOCK_SAO);
|
|
||||||
if(simulate_burn)
|
if(simulate_burn)
|
||||||
printf("\n*** Will TRY to SIMULATE burning ***\n\n");
|
printf("\n*** Will TRY to SIMULATE burning ***\n\n");
|
||||||
burn_write_opts_set_simulate(burn_options, simulate_burn);
|
burn_write_opts_set_simulate(burn_options, simulate_burn);
|
||||||
burn_structure_print_disc(target_disc);
|
|
||||||
burn_drive_set_speed(drive, 0, 0);
|
burn_drive_set_speed(drive, 0, 0);
|
||||||
burn_write_opts_set_underrun_proof(burn_options, 1);
|
burn_write_opts_set_underrun_proof(burn_options, 1);
|
||||||
|
if (burn_write_opts_auto_write_type(burn_options, target_disc,
|
||||||
|
reasons, 0) == BURN_WRITE_NONE) {
|
||||||
|
fprintf(stderr, "FATAL: Failed to find a suitable write mode with this media.\n");
|
||||||
|
fprintf(stderr, "Reasons given:\n%s\n", reasons);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
printf("Burning starts. With e.g. 4x media expect up to a minute of zero progress.\n");
|
printf("Burning starts. With e.g. 4x media expect up to a minute of zero progress.\n");
|
||||||
start_time = time(0);
|
start_time = time(0);
|
||||||
@ -462,7 +465,7 @@ int libburner_payload(struct burn_drive *drive,
|
|||||||
printf(
|
printf(
|
||||||
"Thank you for being patient since %d seconds.\n",
|
"Thank you for being patient since %d seconds.\n",
|
||||||
(int) (time(0) - start_time));
|
(int) (time(0) - start_time));
|
||||||
else if(write_mode_tao)
|
else if(unpredicted_size)
|
||||||
printf("Track %d : sector %d\n", progress.track+1,
|
printf("Track %d : sector %d\n", progress.track+1,
|
||||||
progress.sector);
|
progress.sector);
|
||||||
else
|
else
|
||||||
|
Loading…
Reference in New Issue
Block a user