|
|
|
@ -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;
|
|
|
|
|
|
|
|
|
|