Made support for DVD+R DL official, enabled untested support for BD-RE

This commit is contained in:
Thomas Schmitt 2008-02-28 12:32:34 +00:00
parent ea6957ef68
commit 616454c737
6 changed files with 40 additions and 33 deletions

View File

@ -16,8 +16,8 @@
.\" .sp <n> insert n+1 empty lines .\" .sp <n> insert n+1 empty lines
.\" for manpage-specific macros, see man(7) .\" for manpage-specific macros, see man(7)
.SH NAME .SH NAME
cdrskin \- burns preformatted data to CD-R[W], DVD-R[W], DVD+R[W], DVD-RAM cdrskin \- burns preformatted data to CD-R[W], DVD-R[W], DVD+R[W], DVD+R/DL,
via libburn. DVD-RAM via libburn.
.SH SYNOPSIS .SH SYNOPSIS
.B cdrskin .B cdrskin
.RI [ options | track_source_addresses ] .RI [ options | track_source_addresses ]
@ -44,7 +44,7 @@ or in Session at Once mode for seamless tracks.
.br .br
Multi session on CD (follow-up sessions in TAO only) Multi session on CD (follow-up sessions in TAO only)
.br .br
or on DVD-R[W] (in Incremental mode) or on DVD+R. or on DVD-R[W] (in Incremental mode) or on DVD+R[/DL].
.br .br
Single session on DVD-RW or DVD-R (Disk-at-once). Single session on DVD-RW or DVD-R (Disk-at-once).
.br .br
@ -163,7 +163,7 @@ Multiple cycles of blanking and overwriting with random numbers might be.
.SS .SS
.B Sequentially Recordable DVD Media: .B Sequentially Recordable DVD Media:
.br .br
Currently DVD-RW, DVD-R and DVD+R can be used for the Sequential recording Currently DVD-RW, DVD-R and DVD+R[/DL] can be used for the Sequential recording
model. model.
.br .br
DVD-RW must be in state "Sequential Recording". DVD-RW must be in state "Sequential Recording".
@ -198,9 +198,9 @@ unpredicted length and to keep media appendable by option
The only restriction towards CD-R[W] is the lack of support for -audio tracks. The only restriction towards CD-R[W] is the lack of support for -audio tracks.
Multiple tracks per session are permissible. Multiple tracks per session are permissible.
.br .br
The write modes for DVD+R resemble those with DVD-R except that with DVD+R The write modes for DVD+R[/DL] resemble those with DVD-R except that with +R
each track gets wrapped in an own session. There is no -dummy writing with each track gets wrapped in an own session. There is no -dummy writing with
DVD+R. DVD+R[/DL].
.br .br
Quite deliberately write mode -sao insists in the tradition of a predicted 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 track size and blank media, whereas -tao writes the tracks open ended and
@ -598,7 +598,7 @@ One should use it only if inavoidable.
.TP .TP
.BI \-sao .BI \-sao
Write CD in Session At Once mode, a sequential DVD-R[W] in Disc-at-once Write CD in Session At Once mode, a sequential DVD-R[W] in Disc-at-once
(DAO) mode, or a DVD+R. (DAO) mode, or a DVD+R[/DL].
.br .br
With CD this mode is able to put several audio tracks on media without With CD this mode is able to put several audio tracks on media without
producing audible gaps between them. producing audible gaps between them.
@ -606,8 +606,8 @@ producing audible gaps between them.
With DVD-R[W] this mode can only write a single track. With DVD-R[W] this mode can only write a single track.
No -multi is allowed with DVD-R[W] -sao. No -multi is allowed with DVD-R[W] -sao.
.br .br
-sao is permissible with overwriteable DVD and with DVD+R but actually only -sao is permissible with overwriteable DVD and with DVD+R[/DL] but actually
imposes restrictions without providing known advantages. only imposes restrictions without providing known advantages.
.br .br
-sao can only be used for tracks of fixely predicted size. This implies that -sao can only be used for tracks of fixely predicted size. This implies that
track arguments which depict stdin or named pipes need to be preceeded by track arguments which depict stdin or named pipes need to be preceeded by
@ -647,7 +647,7 @@ suffix ".wav".
.TP .TP
.BI \-tao .BI \-tao
Write CD in Track At Once (TAO) mode, sequential DVD-R[W] in Incremental Write CD in Track At Once (TAO) mode, sequential DVD-R[W] in Incremental
Streaming mode, or DVD+R without traditional -sao restrictions. Streaming mode, or DVD+R[/DL] without traditional -sao restrictions.
This mode also applies pro-forma to overwriteable DVD media. This mode also applies pro-forma to overwriteable DVD media.
.br .br
Mode -tao can be used with track sources of unpredictable size, like standard Mode -tao can be used with track sources of unpredictable size, like standard
@ -951,7 +951,7 @@ tested. Currently this applies to :
.br .br
Profile 0015h , DVD-R/DL Sequential (will not allow -multi). Profile 0015h , DVD-R/DL Sequential (will not allow -multi).
.br .br
Profile 002Bh , DVD+R/DL. Profile 0043h , BD-RE.
.br .br
If you really test such media, then please report the outcome on If you really test such media, then please report the outcome on
libburn-hackers@pykix.org libburn-hackers@pykix.org
@ -1131,7 +1131,7 @@ cdrskin -v dev=0,1,0 fs=32m speed=8 \\
.br .br
-tao padsize=300k - -tao padsize=300k -
.SS .SS
.B Write multi-session to the same CD, DVD-R[W] or DVD+R: .B Write multi-session to the same CD, DVD-R[W] or DVD+R[/DL]:
.br .br
cdrskin dev=/dev/hdc -v padsize=300k -multi -tao 1.iso cdrskin dev=/dev/hdc -v padsize=300k -multi -tao 1.iso
.br .br

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2008.02.22.213726" #define Cdrskin_timestamP "2008.02.28.123152"

View File

@ -730,7 +730,7 @@ void burn_preset_device_open(int exclusive, int blocking, int abort_on_busy);
/** Allows the use of media types which are implemented in libburn but not yet /** Allows the use of media types which are implemented in libburn but not yet
tested. The list of those untested profiles is subject to change. tested. The list of those untested profiles is subject to change.
Currently it contains: 0x15 "DVD-R/DL sequential recording", Currently it contains: 0x15 "DVD-R/DL sequential recording",
0x2b "DVD+R/DL" 0x43 "BD-RE"
If you really test such media, then please report the outcome on If you really test such media, then please report the outcome on
libburn-hackers@pykix.org libburn-hackers@pykix.org
If ever then this call should be done soon after burn_initialize() before If ever then this call should be done soon after burn_initialize() before
@ -1093,10 +1093,11 @@ off_t burn_disc_available_space(struct burn_drive *d,
0x09 "CD-R", 0x0a "CD-RW", 0x09 "CD-R", 0x0a "CD-RW",
0x11 "DVD-R sequential recording", 0x12 "DVD-RAM", 0x11 "DVD-R sequential recording", 0x12 "DVD-RAM",
0x13 "DVD-RW restricted overwrite", 0x14 "DVD-RW sequential recording", 0x13 "DVD-RW restricted overwrite", 0x14 "DVD-RW sequential recording",
0x1a "DVD+RW", 0x1b "DVD+R". 0x1a "DVD+RW", 0x1b "DVD+R"
0x2b "DVD+R/DL"
If enabled by burn_allow_untested_profiles() it also writes to profiles If enabled by burn_allow_untested_profiles() it also writes to profiles
0x15 "DVD-R/DL sequential recording", 0x2b "DVD+R/DL". 0x15 "DVD-R/DL sequential recording", 0x43 "BD-RE".
Writeable stdio-drives return this profile Writeable stdio-drives return this profile:
0xffff "stdio file" 0xffff "stdio file"
@param d The drive where the media is inserted. @param d The drive where the media is inserted.
@param pno Profile Number as of mmc5r03c.pdf, table 89 @param pno Profile Number as of mmc5r03c.pdf, table 89

View File

@ -306,8 +306,9 @@ int mmc_read_track_info(struct burn_drive *d, int trackno, struct buffer *buf,
c.opcode[1] = 1; c.opcode[1] = 1;
if(trackno<=0) { if(trackno<=0) {
if (d->current_profile == 0x1a || d->current_profile == 0x13 || if (d->current_profile == 0x1a || d->current_profile == 0x13 ||
d->current_profile == 0x12 ) d->current_profile == 0x12 || d->current_profile == 0x43)
/* DVD+RW , DVD-RW restricted overwrite , DVD-RAM */ /* DVD+RW , DVD-RW restricted overwrite , DVD-RAM
BD-RE */
trackno = 1; trackno = 1;
else if (d->current_profile == 0x10 || else if (d->current_profile == 0x10 ||
d->current_profile == 0x11 || d->current_profile == 0x11 ||
@ -349,7 +350,7 @@ int mmc_get_nwa(struct burn_drive *d, int trackno, int *lba, int *nwa)
*nwa = mmc_four_char_to_int(data + 12); *nwa = mmc_four_char_to_int(data + 12);
num = mmc_four_char_to_int(data + 16); num = mmc_four_char_to_int(data + 16);
if (d->current_profile == 0x1a || d->current_profile == 0x13 || if (d->current_profile == 0x1a || d->current_profile == 0x13 ||
d->current_profile == 0x12) { d->current_profile == 0x12 || d->current_profile == 0x43) {
/* overwriteable */ /* overwriteable */
*lba = *nwa = num = 0; *lba = *nwa = num = 0;
} else if (!(data[7]&1)) { } else if (!(data[7]&1)) {
@ -1490,7 +1491,7 @@ static int mmc_read_disc_info_al(struct burn_drive *d, int *alloc_len)
ts A70112 : same for DVD-RAM ts A70112 : same for DVD-RAM
*/ */
if (d->current_profile == 0x1a || d->current_profile == 0x13 || if (d->current_profile == 0x1a || d->current_profile == 0x13 ||
d->current_profile == 0x12) d->current_profile == 0x12 || d->current_profile == 0x43)
d->status = BURN_DISC_BLANK; d->status = BURN_DISC_BLANK;
if (d->status == BURN_DISC_BLANK) { if (d->status == BURN_DISC_BLANK) {
@ -2104,7 +2105,8 @@ static int mmc_get_configuration_al(struct burn_drive *d, int *alloc_len)
d->current_is_supported_profile = 1; d->current_is_supported_profile = 1;
#endif #endif
#ifdef Libburn_support_dvd_raM #ifdef Libburn_support_dvd_raM
if (cp == 0x12) if (cp == 0x12 || (cp == 0x43 && burn_support_untested_profiles))
/* DVD-RAM , BD-RE */
d->current_is_supported_profile = 1; d->current_is_supported_profile = 1;
#endif #endif
#ifdef Libburn_support_dvd_r_seQ #ifdef Libburn_support_dvd_r_seQ
@ -2114,8 +2116,7 @@ static int mmc_get_configuration_al(struct burn_drive *d, int *alloc_len)
d->current_is_supported_profile = 1; d->current_is_supported_profile = 1;
#endif #endif
#ifdef Libburn_support_dvd_plus_R #ifdef Libburn_support_dvd_plus_R
if (cp == 0x1b || (cp == 0x2b && burn_support_untested_profiles)) if (cp == 0x1b || cp == 0x2b) /* DVD+R , DVD+R/DL */
/* DVD+R , DVD+R/DL */
d->current_is_supported_profile = 1; d->current_is_supported_profile = 1;
#endif #endif
@ -3004,8 +3005,9 @@ int mmc_compose_mode_page_5(struct burn_drive *d,
pd[13] = 16; pd[13] = 16;
} else if (d->current_profile == 0x1a || d->current_profile == 0x1b || } else if (d->current_profile == 0x1a || d->current_profile == 0x1b ||
d->current_profile == 0x2b || d->current_profile == 0x12) { d->current_profile == 0x2b || d->current_profile == 0x12 ||
/* not with DVD+R[W][/DL] or DVD-RAM */; d->current_profile == 0x43) {
/* not with DVD+R[W][/DL] or DVD-RAM or BD-RE */;
return 0; return 0;
} else { } else {
/* Traditional setup for CD */ /* Traditional setup for CD */

View File

@ -580,7 +580,7 @@ void spc_sense_write_params(struct burn_drive *d)
/* ts A70212 : try to setup d->media_capacity_remaining */ /* ts A70212 : try to setup d->media_capacity_remaining */
if (d->current_profile == 0x1a || d->current_profile == 0x13 || if (d->current_profile == 0x1a || d->current_profile == 0x13 ||
d->current_profile == 0x12) d->current_profile == 0x12 || d->current_profile == 0x43)
d->read_format_capacities(d, -1); d->read_format_capacities(d, -1);
else if (d->status == BURN_DISC_BLANK || else if (d->status == BURN_DISC_BLANK ||
(d->current_is_cd_profile && d->status == BURN_DISC_APPENDABLE)) { (d->current_is_cd_profile && d->status == BURN_DISC_APPENDABLE)) {

View File

@ -967,8 +967,9 @@ int burn_precheck_write(struct burn_write_opts *o, struct burn_disc *disc,
if (d->status == BURN_DISC_UNSUITABLE) if (d->status == BURN_DISC_UNSUITABLE)
goto unsuitable_profile; goto unsuitable_profile;
if (d->drive_role == 2 || if (d->drive_role == 2 ||
d->current_profile == 0x1a || d->current_profile == 0x12) { d->current_profile == 0x1a || d->current_profile == 0x12 ||
/* DVD+RW , DVD-RAM , emulated drive on stdio file */ d->current_profile == 0x43) {
/* DVD+RW , DVD-RAM , BD-RE, emulated drive on stdio file */
if (o->start_byte >= 0 && (o->start_byte % 2048)) if (o->start_byte >= 0 && (o->start_byte % 2048))
strcat(reasons, strcat(reasons,
"write start address not properly aligned to 2048, "); "write start address not properly aligned to 2048, ");
@ -1370,8 +1371,8 @@ int burn_dvd_write_session(struct burn_write_opts *o,
ret = burn_disc_close_session_dvd_minus_r(o, s); ret = burn_disc_close_session_dvd_minus_r(o, s);
if (ret <= 0) if (ret <= 0)
return 0; return 0;
} else if (d->current_profile == 0x12) { } else if (d->current_profile == 0x12 || d->current_profile == 0x43) {
/* DVD-RAM */ /* DVD-RAM , BD-RE */
/* ??? any finalization needed ? */; /* ??? any finalization needed ? */;
} else if (d->current_profile == 0x13) { } else if (d->current_profile == 0x13) {
/* DVD-RW restricted overwrite */ /* DVD-RW restricted overwrite */
@ -1522,8 +1523,9 @@ int burn_dvd_write_sync(struct burn_write_opts *o,
d->needs_close_session = 0; d->needs_close_session = 0;
if (d->current_profile == 0x1a || d->current_profile == 0x12) { if (d->current_profile == 0x1a || d->current_profile == 0x12 ||
/* DVD+RW , DVD-RAM */ d->current_profile == 0x43) {
/* DVD+RW , DVD-RAM , BD-RE */
ret = 1; ret = 1;
if (d->current_profile == 0x1a) if (d->current_profile == 0x1a)
ret = burn_disc_setup_dvd_plus_rw(o, disc); ret = burn_disc_setup_dvd_plus_rw(o, disc);
@ -2191,6 +2193,8 @@ int burn_random_access_write(struct burn_drive *d, off_t byte_address,
alignment = 32 * 1024; alignment = 32 * 1024;
if (d->current_profile == 0x1a) /* DVD+RW */ if (d->current_profile == 0x1a) /* DVD+RW */
alignment = 2 * 1024; alignment = 2 * 1024;
if (d->current_profile == 0x43) /* BD-RE */
alignment = 2 * 1024;
if (alignment == 0) { if (alignment == 0) {
sprintf(msg, "Write start address not supported"); sprintf(msg, "Write start address not supported");
libdax_msgs_submit(libdax_messenger, d->global_index, libdax_msgs_submit(libdax_messenger, d->global_index,