Declared BD-RE to be supported

This commit is contained in:
Thomas Schmitt 2008-05-06 18:08:04 +00:00
parent 2d9d250471
commit a54113267e
7 changed files with 59 additions and 36 deletions

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2008.05.06.084156" #define Cdrskin_timestamP "2008.05.06.180813"

View File

@ -7,10 +7,12 @@
Libburnia is an open-source project for reading, mastering and writing Libburnia is an open-source project for reading, mastering and writing
optical discs. optical discs.
For now this means CD-R, CD-RW, DVD-RAM, DVD+RW, DVD+R, DVD+R/DL, DVD-RW, DVD-R. For now this means CD-R, CD-RW, DVD-RAM, DVD+RW, DVD+R, DVD+R/DL, DVD-RW,
DVD-R, BD-RE.
Not supported yet are DVD-R/DL, HD-DVD, BD (blue ray). Testers for Not supported yet are DVD-R/DL, HD-DVD, BD-R (blue ray). Testers for
BD and DVD-R/DL are wanted, though. DVD-R/DL are wanted, though. BD-R programming efforts would be made
if an interested tester contacts us.
The project comprises of several more or less interdependent parts which The project comprises of several more or less interdependent parts which
together strive to be a usable foundation for application development. together strive to be a usable foundation for application development.
@ -57,8 +59,8 @@ composition, updating and writing. Quite unique in the Linux world.
cdrecord is a powerful GPL'ed burn program included in Joerg cdrecord is a powerful GPL'ed burn program included in Joerg
Schilling's cdrtools. cdrskin strives to be a second source for Schilling's cdrtools. cdrskin strives to be a second source for
the services traditionally provided by cdrecord. Additionally it the services traditionally provided by cdrecord. Additionally it
provides libburn's DVD capabilities, where only -sao is compatible provides libburn's DVD/BD capabilities, where only -sao is
with cdrecord. compatible with cdrecord.
cdrskin does not contain any bytes copied from cdrecord's sources. cdrskin does not contain any bytes copied from cdrecord's sources.
Many bytes have been copied from the message output of cdrecord Many bytes have been copied from the message output of cdrecord
runs, though. runs, though.

View File

@ -3,7 +3,7 @@ libburnia-project.org Optical Media Rotisserie Recipes as of April 2008
Content: Content:
- TAO Multi-Session CD Cookbook (CD-R, CD-RW) - TAO Multi-Session CD Cookbook (CD-R, CD-RW)
- SAO CD Cookbook (CD-R, CD-RW, pure audio or pure data only) - SAO CD Cookbook (CD-R, CD-RW, pure audio or pure data only)
- Overwriteable DVD Cookbook (DVD-RAM, DVD+RW, DVD-RW) - Overwriteable DVD Cookbook (DVD-RAM, DVD+RW, DVD-RW, BD-RE)
- Sequential DVD-R[W] Cookbook - Sequential DVD-R[W] Cookbook
- DVD+R[/DL] Cookbook - DVD+R[/DL] Cookbook
@ -403,8 +403,8 @@ correctness of Pre-gap and Post-gap would become evident.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Inspired by Andy Polyakov's http://fy.chalmers.se/~appro/linux/DVD+RW/tools , Inspired by Andy Polyakov's http://fy.chalmers.se/~appro/linux/DVD+RW/tools ,
backed by reading mmc5r03c.pdf from http://www.t10.org/ftp/t10/drafts/mmc5/ backed by reading mmc5r03c.pdf from http://www.t10.org/ftp/t10/drafts/mmc5/
and by experiments with drives NEC ND-4570A, LG GSA-4082B, PHILIPS SPD3300L. by own experiments with drives NEC ND-4570A, LG GSA-4082B, PHILIPS SPD3300L,
BD-RE experiments done by Giulio Orsero on LG BE06LU10. and by BD-RE experiments done by Giulio Orsero on LG BE06LU10.
For libburnia-project.org by Thomas Schmitt <scdbackup@gmx.net> For libburnia-project.org by Thomas Schmitt <scdbackup@gmx.net>
@ -417,7 +417,7 @@ DVD-RAM 0012h
DVD-RW Restricted Overwrite 0013h DVD-RW Restricted Overwrite 0013h
DVD-RW Sequential Recording 0014h (i.e. unformatted) DVD-RW Sequential Recording 0014h (i.e. unformatted)
DVD+RW 001Ah DVD+RW 001Ah
BD-RE 0043h (writing tested, formatting not tested) BD-RE 0043h
A short compilation of the write model: A short compilation of the write model:
- Overwriting in general - Overwriting in general

View File

@ -2170,10 +2170,11 @@ int burn_disc_get_multi_caps(struct burn_drive *d, enum burn_write_types wt,
if (wt == BURN_WRITE_NONE || wt == BURN_WRITE_SAO || if (wt == BURN_WRITE_NONE || wt == BURN_WRITE_SAO ||
wt == BURN_WRITE_TAO) wt == BURN_WRITE_TAO)
o->might_simulate = 1; o->might_simulate = 1;
} else if (d->current_profile == 0x12 || d->current_profile == 0x13 || } else if (d->current_profile == 0x12 ||
d->current_profile == 0x13 ||
d->current_profile == 0x1a || d->current_profile == 0x1a ||
(d->current_profile == 0x43 && d->current_profile == 0x43
burn_support_untested_profiles)) { ) {
/* DVD-RAM, overwriteable DVD-RW, DVD+RW, BD-RE */ /* DVD-RAM, overwriteable DVD-RW, DVD+RW, BD-RE */
o->start_adr = 1; o->start_adr = 1;
ret = burn_disc_get_formats(d, &status, &size, &dummy, ret = burn_disc_get_formats(d, &status, &size, &dummy,

View File

@ -730,7 +730,6 @@ 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",
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
@ -1094,9 +1093,9 @@ off_t burn_disc_available_space(struct burn_drive *d,
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" 0x2b "DVD+R/DL", 0x43 "BD-RE"
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", 0x43 "BD-RE". 0x15 "DVD-R/DL sequential recording",
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.

View File

@ -2126,8 +2126,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_raM #ifdef Libburn_support_dvd_raM
if (cp == 0x12 || (cp == 0x43 && burn_support_untested_profiles)) { if (cp == 0x12 || cp == 0x43) { /* DVD-RAM , BD-RE */
/* DVD-RAM , BD-RE */
d->current_is_supported_profile = 1; d->current_is_supported_profile = 1;
#ifdef Libburn_dvd_ram_as_bd_rE #ifdef Libburn_dvd_ram_as_bd_rE
@ -2910,8 +2909,7 @@ no_suitable_formatting_type:;
c.opcode[1] |= 0x08; c.opcode[1] |= 0x08;
} }
} else if (d->current_profile == 0x43 && } else if (d->current_profile == 0x43) {
burn_support_untested_profiles) {
/* BD-RE */ /* BD-RE */
index = -1; index = -1;
format_size = -1; format_size = -1;

View File

@ -8,8 +8,9 @@
libburner is a minimal demo application for the library libburn as provided libburner is a minimal demo application for the library libburn as provided
on http://libburnia-project.org . It can list the available devices, can on http://libburnia-project.org . It can list the available devices, can
blank a CD-RW or DVD-RW, can format a DVD-RW, can burn to CD-R, CD-RW, DVD-R, blank a CD-RW or DVD-RW, can format DVD-RW and BD-RE, can burn to CD-R,
DVD+R, DVD+R/DL, DVD+RW, DVD-RAM or DVD-RW. Not supported yet: DVD-R/DL, BD. CD-RW, DVD-R, DVD+R, DVD+R/DL, DVD+RW, DVD-RW, DVD-RAM, BD-RE.
Not supported yet: DVD-R/DL, BD-R.
It's main purpose, nevertheless, is to show you how to use libburn and also It's main purpose, nevertheless, is to show you how to use libburn and also
to serve the libburnia team as reference application. libburner.c does indeed to serve the libburnia team as reference application. libburner.c does indeed
@ -28,7 +29,8 @@
With that aquired drive you can blank a CD-RW With that aquired drive you can blank a CD-RW
libburner_blank_disc() libburner_blank_disc()
or you can format a DVD-RW to profile "Restricted Overwrite" (needed once) or you can format a DVD-RW to profile "Restricted Overwrite" (needed once)
libburner_format_row() or an unused BD-RE to default size
libburner_format_owrt()
With the aquired drive you can burn to CD or DVD With the aquired drive you can burn to CD or DVD
libburner_payload() libburner_payload()
When everything is done, main() releases the drive and shuts down libburn: When everything is done, main() releases the drive and shuts down libburn:
@ -313,26 +315,45 @@ int libburner_blank_disc(struct burn_drive *drive, int blank_fast)
} }
/** Persistently changes DVD-RW profile 0014h "Sequential Recording" to /** Formats unformatted DVD-RW to profile 0013h "Restricted Overwrite"
profile 0013h "Restricted Overwrite" which needs no blanking for re-use which needs no blanking for re-use but is not capable of multi-session.
but is not capable of multi-session.
Expect a behavior similar to blanking with unusual noises from the drive. Expect a behavior similar to blanking with unusual noises from the drive.
Formats unformatted BD-RE to default size. This will allocate some
reserve space, test for bad blocks and make the media ready for writing.
Expect a very long run time.
*/ */
int libburner_format_row(struct burn_drive *drive) int libburner_format_owrt(struct burn_drive *drive)
{ {
struct burn_progress p; struct burn_progress p;
double percent = 1.0; double percent = 1.0;
int ret, status, num_formats, format_flag= 0;
off_t size = 0;
unsigned dummy;
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");
return 2; return 2;
} else if (current_profile != 0x14) { } else if (current_profile == 0x43) {
fprintf(stderr, "FATAL: Can only format DVD-RW\n"); ret = burn_disc_get_formats(drive, &status, &size, &dummy,
&num_formats);
if (ret > 0 && status == BURN_FORMAT_IS_FORMATTED) {
fprintf(stderr,
"IDLE: BD-RE media is already formatted\n");
return 2;
}
size = 0; /* does not really matter */
format_flag = 3<<1; /* format to default size, no quick */
} else if (current_profile == 0x14) { /* sequential DVD-RW */
size = 128 * 1024 * 1024;
format_flag = 1; /* write initial 128 MiB */
} else {
fprintf(stderr, "FATAL: Can only format DVD-RW or BD-RE\n");
return 0; return 0;
} }
printf("Beginning to format media.\n"); printf("Beginning to format media.\n");
burn_disc_format(drive, (off_t) 0, 0); burn_disc_format(drive, size, format_flag);
sleep(1); sleep(1);
while (burn_drive_get_status(drive, &p) != BURN_DRIVE_IDLE) { while (burn_drive_get_status(drive, &p) != BURN_DRIVE_IDLE) {
@ -344,9 +365,10 @@ int libburner_format_row(struct burn_drive *drive)
} }
burn_disc_get_profile(drive_list[0].drive, &current_profile, burn_disc_get_profile(drive_list[0].drive, &current_profile,
current_profile_name); current_profile_name);
printf("Media type now: %4.4xh \"%s\"\n", if (current_profile == 0x14 || current_profile == 0x13)
current_profile, current_profile_name); printf("Media type now: %4.4xh \"%s\"\n",
if (current_profile != 0x13) { current_profile, current_profile_name);
if (current_profile == 0x14) {
fprintf(stderr, fprintf(stderr,
"FATAL: Failed to change media profile to desired value\n"); "FATAL: Failed to change media profile to desired value\n");
return 0; return 0;
@ -534,7 +556,8 @@ int libburner_payload(struct burn_drive *drive,
burn_session_free(session); burn_session_free(session);
burn_disc_free(target_disc); burn_disc_free(target_disc);
if (multi && current_profile != 0x1a && current_profile != 0x13 && if (multi && current_profile != 0x1a && current_profile != 0x13 &&
current_profile != 0x12) /* not with DVD+RW, DVD-RW, DVD-RAM */ current_profile != 0x12 && current_profile != 0x43)
/* not with DVD+RW, formatted DVD-RW, DVD-RAM, BD-RE */
printf("NOTE: Media left appendable.\n"); printf("NOTE: Media left appendable.\n");
if (simulate_burn) if (simulate_burn)
printf("\n*** Did TRY to SIMULATE burning ***\n\n"); printf("\n*** Did TRY to SIMULATE burning ***\n\n");
@ -697,7 +720,7 @@ int main(int argc, char **argv)
{ ret = 0; goto release_drive; } { ret = 0; goto release_drive; }
if (do_blank) { if (do_blank) {
if (do_blank > 100) if (do_blank > 100)
ret = libburner_format_row(drive_list[driveno].drive); ret = libburner_format_owrt(drive_list[driveno].drive);
else else
ret = libburner_blank_disc(drive_list[driveno].drive, ret = libburner_blank_disc(drive_list[driveno].drive,
do_blank == 1); do_blank == 1);