Made use of burn_write_opts_auto_write_type()

This commit is contained in:
Thomas Schmitt 2007-02-07 16:37:25 +00:00
parent 0b8c0a490d
commit bf35437d7f

View File

@ -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, &current_profile, burn_disc_get_profile(drive_list[0].drive, &current_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