Allowed finalizing of DVD+R

This commit is contained in:
Thomas Schmitt 2007-03-30 20:11:36 +00:00
parent 125e28160d
commit 649f67697a
3 changed files with 38 additions and 34 deletions

View File

@ -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 "March 28, 2007"
.TH CDRSKIN 1 "March 30, 2007"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
@ -190,12 +190,6 @@ DVD+R.
Quite deliberately write mode -sao insists in the tradition of a predicted
track size and blank media, whereas -tao writes the tracks open ended and
allows appendable media.
.br
Currently DVD+R are always kept appendable regardless wether -multi is given
or not. This might change in future so it is strongly advised to already now
use
.B -multi
whenever the disc shall be kept appendable.
.PP
.B Overwriteable DVD Media:
.br
@ -418,7 +412,7 @@ If not, then the burn run will be aborted.
.br
The range of -isosize is exactly one track. Further tracks may be preceeded
by further -isosize options, though. At least 15 blocks of padding will be
added to each -isosize track. But be advised to use padsize=300k.
added to each -isosize track. But be advised to rather use padsize=300k.
.br
This option can be performed on track sources which are regular files or block
devices. For the first track of the session it can be performed on any type

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2007.03.28.202802"
#define Cdrskin_timestamP "2007.03.30.201034"

View File

@ -1075,9 +1075,31 @@ int burn_disc_close_track_dvd_minus_r(struct burn_write_opts *o,
}
/* ts A70229 */
int burn_disc_finalize_dvd_plus_r(struct burn_write_opts *o)
{
struct burn_drive *d = o->drive;
libdax_msgs_submit(libdax_messenger, d->global_index,
0x00000002,
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_ZERO,
"Finalizing DVD+R ...", 0, 0);
/* CLOSE SESSION, 101b, Finalize with minimal radius */
d->close_track_session(d, 2, 1); /* (2<<1)|1 = 5 */
libdax_msgs_submit(libdax_messenger, d->global_index,
0x00000002,
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_ZERO,
"... finalizing DVD+R done ", 0, 0);
return 1;
}
/* ts A70226 */
int burn_disc_close_track_dvd_plus_r(struct burn_write_opts *o,
struct burn_session *s, int tnum)
struct burn_session *s, int tnum, int is_last_track)
{
struct burn_drive *d = o->drive;
char msg[80];
@ -1093,8 +1115,11 @@ int burn_disc_close_track_dvd_plus_r(struct burn_write_opts *o,
/* Each session becomes a single logical track. So to distinguish them,
it is mandatory to close the session together with each track. */
d->close_track_session(d, 1, 0); /* CLOSE SESSION, 010b */
if (is_last_track && !o->multi)
burn_disc_finalize_dvd_plus_r(o);
else
d->close_track_session(d, 1, 0); /* CLOSE SESSION, 010b */
d->busy = BURN_DRIVE_WRITING;
d->last_track_no++;
return 1;
@ -1103,7 +1128,7 @@ int burn_disc_close_track_dvd_plus_r(struct burn_write_opts *o,
/* ts A61218 - A70129 */
int burn_dvd_write_track(struct burn_write_opts *o,
struct burn_session *s, int tnum)
struct burn_session *s, int tnum, int is_last_track)
{
struct burn_track *t = s->track[tnum];
struct burn_drive *d = o->drive;
@ -1189,7 +1214,8 @@ int burn_dvd_write_track(struct burn_write_opts *o,
goto ex;
} else if (d->current_profile == 0x1b || d->current_profile == 0x2b) {
/* DVD+R , DVD+R/DL */
ret = burn_disc_close_track_dvd_plus_r(o, s, tnum);
ret = burn_disc_close_track_dvd_plus_r(o, s, tnum,
is_last_track);
if (ret <= 0)
goto ex;
}
@ -1268,7 +1294,7 @@ int burn_disc_close_session_dvd_minus_r(struct burn_write_opts *o,
/* ts A61218 */
int burn_dvd_write_session(struct burn_write_opts *o,
struct burn_session *s)
struct burn_session *s, int is_last_session)
{
int i,ret;
struct burn_drive *d = o->drive;
@ -1276,7 +1302,8 @@ int burn_dvd_write_session(struct burn_write_opts *o,
/* >>> open_session ? */
for (i = 0; i < s->tracks; i++) {
ret = burn_dvd_write_track(o, s, i);
ret = burn_dvd_write_track(o, s, i,
is_last_session && i == (s->tracks - 1));
if (ret <= 0)
break;
}
@ -1428,24 +1455,6 @@ int burn_disc_setup_dvd_plus_r(struct burn_write_opts *o,
}
/* ts A70229 */
int burn_disc_finalize_dvd_plus_r(struct burn_write_opts *o)
{
struct burn_drive *d = o->drive;
/* <<< FOR NOW: avoid finalizing media */
return 3;
if (o->multi)
return 2;
d->busy = BURN_DRIVE_CLOSING_SESSION;
/* CLOSE SESSION, 101b, Finalize with minimal radius */
d->close_track_session(d, 2, 1); /* (2<<1)|1 = 5 */
d->busy = BURN_DRIVE_WRITING;
return 1;
}
/* ts A61218 - A70129 */
int burn_dvd_write_sync(struct burn_write_opts *o,
struct burn_disc *disc)
@ -1700,7 +1709,8 @@ int burn_dvd_write_sync(struct burn_write_opts *o,
d->progress.session = i;
d->progress.tracks = disc->session[i]->tracks;
ret = burn_dvd_write_session(o, disc->session[i]);
ret = burn_dvd_write_session(o, disc->session[i],
i == (disc->sessions - 1));
if (ret <= 0)
goto ex;