Compare commits

...

47 Commits

Author SHA1 Message Date
bd6874e7d1 Documented changes and release timestamp 2009-01-02 17:11:31 +00:00
65f67f7b5d Updated cdrskin tarball generator 2009-01-02 17:01:31 +00:00
6127790ab2 Made number transition to 0.6.0 2009-01-02 16:59:24 +00:00
a4ca88d5f8 Updated copyright claims to year 2009 2009-01-02 16:30:50 +00:00
e25bce8f12 Branching for libburn release 0.6.0 2009-01-02 16:18:58 +00:00
687bde257c Cosmetic changes 2008-12-29 10:53:58 +00:00
1de41908a8 Fixed denial of fast formatting with BD-RE introduced by revision 2280 2008-12-22 13:05:51 +00:00
8af33586e8 Clarified blank, appendable, closed burn_disc_status 2008-12-19 20:35:43 +00:00
3ea5106d68 Removed project overview and references to libisofs and libisoburn 2008-12-17 11:12:19 +00:00
0ca643d0a4 Removed project overview and references to libisofs and libisoburn 2008-12-17 09:34:53 +00:00
d50c90b7be New API function burn_get_read_capacity() 2008-12-17 09:19:34 +00:00
1b5ab0834e Updated cdrskin web page 2008-12-14 14:39:40 +00:00
147cb430d1 Updated libburner to BD-R 2008-12-14 10:45:04 +00:00
1cbe3afdcc Now producing libburn.so.4.24.0 2008-12-13 14:49:39 +00:00
817edbaeea Interpreting feature 0023h for BD-R formatting capabilities 2008-12-12 21:40:34 +00:00
6552c8267c Making format size of BD-RE and BD-R quite freely adjustable 2008-12-12 11:22:14 +00:00
82fcf62309 Catching BD-R zero spare formatting with NOTE rather than SORRY 2008-12-11 09:22:33 +00:00
c1572c271f Rejecting unformattable BD-R more early 2008-12-11 07:23:29 +00:00
83ed108298 Mentioning BD-R in documentation 2008-12-10 17:16:19 +00:00
0d669b4369 Formatting of BD-R SRM to default size and by index 2008-12-10 11:43:28 +00:00
22554efe4f Formatting of BD-R SRM to default size and by index 2008-12-10 09:26:09 +00:00
eb7e20a02c Beginning to implement write code for BD-R SRM without POW 2008-12-09 12:36:28 +00:00
a5e2729604 Beginning to implement write code for BD-R SRM without POW 2008-12-09 12:35:13 +00:00
d52ea49eb6 Documented changes and release timestamp 2008-12-07 16:04:38 +00:00
96e1cc451c Updated cdrskin tarball generator 2008-12-07 16:02:30 +00:00
bfba58b0fa 2008-12-07 16:00:45 +00:00
175061615e Defaulting sessions without leadout entry 2008-12-03 08:52:44 +00:00
717ad0f412 Circumventing BD-RE Quick Certification refusal of LG GGW-H20L YL03 2008-11-29 14:04:31 +00:00
f3ea35b9b8 Translating ASC=0x31 formatting error messages, reporting command names 2008-11-29 14:01:41 +00:00
bb9ef6b988 Changed error severity with TOC truncation to MISHAP 2008-11-27 17:21:54 +00:00
aa606552eb Truncating eventually detected damaged CD table-of-content 2008-11-27 08:11:03 +00:00
9d99e7874a Added tests against the SIGSEGV of ticket 146 2008-11-26 21:06:37 +00:00
d1483a15da Mentioned FreeBSD peculiarities in our docs 2008-11-21 21:45:23 +00:00
ed60d9a644 Removed remark that use of statvfs() was untested with FreeBSD 2008-11-15 22:07:24 +00:00
bd5d8e8991 Documented changes and release timestamp 2008-11-12 12:54:21 +00:00
bf64271c67 Updated cdrskin tarball generator 2008-11-12 12:52:22 +00:00
b0c8bbd48d Made number transition to 0.5.7 2008-11-12 12:51:07 +00:00
2fb19dd08e Avoiding warning message about implicitely declared burn_fifo_abort() 2008-11-12 07:53:01 +00:00
2ce3199241 Disabling the sigsegv provoking new debug message 2008-11-08 20:25:38 +00:00
6fe53827da Cancelling libburn fifo thread before freeing the fifo object 2008-11-08 14:18:14 +00:00
6053f3a6e3 Clarified behavior of burn_source with pipes 2008-11-08 13:48:59 +00:00
de274ddaff Bug fix: Unsuitable write modes were caught silently and later than desired 2008-11-01 12:13:26 +00:00
92b0e145d5 Fixed incomplete sentence in man cdrskin 2008-10-15 10:35:06 +00:00
4a5083739d A clarification in comment about burn_disc_format() 2008-10-15 10:33:09 +00:00
7a8040fe9f Documented changes and release timestamp 2008-10-05 12:45:10 +00:00
57df15054f Updated cdrskin tarball generator 2008-10-05 12:43:18 +00:00
a57cf121d8 Made number transition to next development cycle 2008-10-05 12:41:44 +00:00
32 changed files with 1493 additions and 348 deletions

View File

@ -1,7 +1,7 @@
Derek Foreman <derek@signalmarketing.com> and Ben Jansens <xor@orodu.net>
Copyright (C) 2002-2006 Derek Foreman and Ben Jansens
Mario Danic <mario.danic@gmail.com>, Thomas Schmitt <scdbackup@gmx.net>
Copyright (C) 2006-2008 Mario Danic, Thomas Schmitt
Copyright (C) 2006-2009 Mario Danic, Thomas Schmitt
This program is free software; you can redistribute it and/or modify

View File

@ -101,9 +101,9 @@ test_structest_CPPFLAGS = -Ilibburn
test_structest_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
test_structest_SOURCES = test/structest.c
## cdrskin construction site - ts A60816 - A80820
## cdrskin construction site - ts A60816 - A90102
cdrskin_cdrskin_CPPFLAGS = -Ilibburn
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_5_3
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_6_0
# cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
# ts A80123, change proposed by Simon Huggins to cause dynamic libburn linking

120
README
View File

@ -4,50 +4,56 @@
This all is under GPL.
(See GPL reference, our clarification and commitment at the end of this text)
------------------------------------------------------------------------------
libburnia-project.org
libburn-project.org
By Mario Danic <mario.danic@gmail.com> and Thomas Schmitt <scdbackup@gmx.net>
Copyright (C) 2006-2008 Mario Danic, Thomas Schmitt
Still containing parts of
Libburn. By Derek Foreman <derek@signalmarketing.com> and
Ben Jansens <xor@orodu.net>
Copyright (C) 2006-2009 Mario Danic, Thomas Schmitt
Still containing parts of Libburn. By Derek Foreman <derek@signalmarketing.com>
and Ben Jansens <xor@orodu.net>
Copyright (C) 2002-2006 Derek Foreman and Ben Jansens
These parts are to be replaced by own code of above libburnia-project.org
copyright holders and then libburnia-project.org is to be their sole copyright.
This is done to achieve the right to issue the clarification and the
commitment as written at the end of this text.
The rights and merits of the Libburn-copyright holders Derek Foreman and
Ben Jansens will be duely respected.
This libburnia-project.org toplevel README (C) 2006-2008 Thomas Schmitt
http://files.libburnia-project.org/releases/libburn-0.6.0.pl00.tar.gz
------------------------------------------------------------------------------
Build and Installation
Our build system is based on autotools. For preparing the build of a SVN
snapshot you will need autotools of at least version 1.7.
Check out from SVN by
svn co http://svn.libburnia-project.org/libburn/trunk libburn
go into directory libburn and apply autotools by
./bootstrap
From tarball
Alternatively you may unpack a release tarball for which you do not need
autotools installed.
Obtain libburn-0.6.0.pl00.tar.gz, take it to a directory of your choice and do:
To build a libburnia-project.org subproject it should be sufficient to go
into its toplevel directory (here: "libburn") and execute
tar xzf libburn-0.6.0.pl00.tar.gz
cd libburn-0.6.0
./configure --prefix=/usr
make
To make libburn accessible for running resp. application development,
and to install the cdrecord compatibility binary cdrskin, do:
and to install the cdrecord compatibility binary cdrskin, do
(as Superuser):
make install
Above procedure installs cdrskin depending on libburn.so.4 .
This procedure installs libburn.so.4 and cdrskin depending on it.
For a standalone cdrskin binary, see cdrskin/README.
From SVN
Our build system is based on autotools. For preparing the build of a SVN
snapshot you will need autotools of at least version 1.7.
Do in a directory of your choice:
svn co http://svn.libburnia-project.org/libburn/trunk libburn-0.5.9
cd libburn-0.5.9
./bootstrap
./configure --prefix=/usr
make
make install
Warning: The trunk might contain experimental features which might not
persist until next release.
------------------------------------------------------------------------------
An important part of the project, libisofs, is hosted in a bzr repository at
launchpad.net :
bzr branch lp:libisofs
@ -57,7 +63,6 @@ Another part the project, libisoburn, is hosted in the libburnia SVN, too:
See README files there.
------------------------------------------------------------------------------
@ -65,24 +70,25 @@ See README files there.
libburnia-project.org is an open-source software project for reading, mastering
and writing optical discs.
For now this means only CD media and all single layer DVD media except DVD+R.
For now this means CD media, all DVD media except DVD-R DL, all BD media.
The project comprises of several more or less interdependent parts which
together strive to be a usable foundation for application development.
These are libraries, language bindings, and middleware binaries which emulate
classical (and valuable) Linux tools.
Currently it is supported on Linux with kernels >= 2.4 and on FreeBSD versions
with ATAPI/CAM support enabled in the kernel, see atapicam(4).
Our scope is currently Linux 2.4 and 2.6 only. For ports to other systems
we would need : login on a development machine resp. a live OS on CD or DVD,
advise from a system person about the equivalent of Linux sg or FreeBSD CAM,
volunteers for testing of realistic use cases.
For ports to other systems we would need : login on a development machine
resp. a live OS on CD or DVD, advise from a system person about the equivalent
of Linux sg or FreeBSD CAM, volunteers for testing of realistic use cases.
We have a well tested code base for burning data and audio CDs and many DVD
types. The burn API is quite comprehensively documented and can be used to
build a presentable application.
We have a functional binary which emulates the core use cases of cdrecord in
order to prove that usability, and in order to allow you to explore libburn's
scope by help of existing cdrecord frontends.
We have a well tested code base for burning data and audio CDs, DVDs and BDs.
The burn API is quite comprehensively documented and can be used to build a
presentable application.
We have a functional application which emulates the core use cases of cdrecord
in order to prove that usability, and in order to allow you to explore
libburn's scope by help of existing cdrecord frontends.
ISO 9660 filesystems with Rock Ridge and Joliet extensions can be created
and manipulated quite freely. This capability together with our burn capability
@ -122,8 +128,9 @@ The project components (list subject to growth, hopefully):
- xorriso is an application of all three libraries which creates, loads,
manipulates and writes ISO 9660 filesystem images with
Rock Ridge extensions. Manipulation is not only adding or
overwriting of files but also deletion, renaming, and attribute
changing.
overwriting of files but also deleting, renaming, attribute
changing, incremental backups, activating boot images, and
extracting of files from ISO images to disk.
See xorriso/README for more.
- "test" is a collection of application gestures and examples given by the
@ -142,8 +149,8 @@ any way and even may revoke such new features before the next release of
x.y.*[02468]. As soon as it is released, a feature is promised to persist.
SONAMES:
libburn.so.4 (since 0.3.4, March 2007),
libisofs.so.6 (since 0.6.2, February 2008),
libburn.so.4 (since 0.3.4, March 2007),
libisofs.so.6 (since 0.6.2, February 2008),
libisoburn.so.1 (since 0.1.0, February 2008).
@ -316,6 +323,35 @@ Project history as far as known to me:
- 20th Sep 2008 libisoburn/xorriso-0.2.6 takes into respect the new Level 3
capabilities of libisofs.
- 6th Oct 2008 libburn-0.5.4 adjusts the changes of 0.5.2 to the needs of
Linux kernel 2.4 and introduces human readable SCSI error messages.
- 6th Oct 2008 libisofs-0.6.10 fixes two bugs which prevented adding and
manipulation of ISOLINUX boot images.
- 15th Oct 2008 libisoburn/xorriso-0.2.8 can activate and maintain an
ISOLINUX boot image by an EL Torito boot record.
- 12th Nov 2008 libburn-0.5.6 fixes usage of freed memory by the fifo thread
of an aborted burn run.
- 26th Nov 2008 libisofs-0.6.12 can produce a ISOLINUX isohybrid MBR on the fly
and allows to produce ISO images which resemble old mkisofs images.
- 2nd Dec 2008 libisoburn-0.3.0. xorriso now is ready for exotic character
sets, for legacy FreeBSD systems which expect an outdated Rock Ridge
signature, and for producing ISO images with MBR which boot from hard disk
or USB stick. Three minor bugs were fixed.
- 7th Dec 2008 libburn-0.5.8 prevents a SIGSEGV with wierd CD table-of-content
and improves BD-RE formatting.
- 9th Dec 2008 Our project received a donation from Thomas Weber.
- 2nd Jan 2009 libburn-0.6.0 allows to format BD-R and to write to either
formatted or unformatted BD-R.
------------------------------------------------------------------------------
This program is free software; you can redistribute it and/or modify

View File

@ -4,15 +4,16 @@
cdrskin. By Thomas Schmitt <scdbackup@gmx.net>
Integrated sub project of libburnia-project.org but also published via:
http://scdbackup.sourceforge.net/cdrskin_eng.html
http://scdbackup.sourceforge.net/cdrskin-0.5.3.tar.gz
Copyright (C) 2006-2008 Thomas Schmitt, provided under GPL version 2.
http://scdbackup.sourceforge.net/cdrskin-0.6.0.pl00.tar.gz
Copyright (C) 2006-2009 Thomas Schmitt, provided under GPL version 2.
------------------------------------------------------------------------------
cdrskin is a limited cdrecord compatibility wrapper which allows to use
most of the libburn features from the command line.
Currently it is only supported on Linux with kernels >= 2.4.
Currently it is supported on Linux with kernels >= 2.4 and on FreeBSD versions
with ATAPI/CAM support enabled in the kernel, see atapicam(4).
By using this software you agree to the disclaimer at the end of this text
"This software is provided as is. There is no warranty implied and ..."
@ -20,10 +21,10 @@ By using this software you agree to the disclaimer at the end of this text
Compilation, First Glimpse, Installation
Obtain cdrskin-0.5.3.tar.gz, take it to a directory of your choice and do:
Obtain cdrskin-0.6.0.pl00.tar.gz, take it to a directory of your choice and do:
tar xzf cdrskin-0.5.3.tar.gz
cd cdrskin-0.5.3
tar xzf cdrskin-0.6.0.pl00.tar.gz
cd cdrskin-0.6.0
Within that directory execute:
@ -273,8 +274,8 @@ behavior.
BD-RE media need formatting before first use. cdrskin option "blank=as_needed"
recognizes unformatted BD-RE and applies a lengthy formatting run.
During write operations DVD-RAM and BD-RE automatically apply defect
management. This usually slows them down to half nominal speed. If drive
During write operations DVD-RAM and BD-RE automatically apply Defect
Management. This usually slows them down to half nominal speed. If drive
and media produce flawless results anyway, then one can try to reach full
nominal speed by option "stream_recording=on".
In this case bad blocks are not detected during write and not even previously
@ -349,14 +350,24 @@ Incremental Streaming afterwards. So blank=fast will do full blanking.
blank=deformat_sequential_quickest is faster but might yield DAO-only media.
DVD+R and DVD+R DL
DVD+R , DVD+R DL , BD-R
From the view of cdrskin they behave much like DVD-R. Each track gets wrapped
into an own session, though.
DVD+R DL appear as extra large DVD+R. cdrskin does not allow to set the address
of the layer break where a reading drive might show some delay while switching
between both media layers.
BD-R are sold unformatted blank. If used without initial formatting then the
drive is supposed to format them to maximum payload size with no Defect
Management (see also above with BD-RE).
If Defect Management is desired then BD-R need to be formatted before the
first attempt to write a session to them.
blank=format_if_needed will detect the situation and eventually apply
default sized Defect Management formatting.
blank=format_defectmgt_* will apply non-default parameters to formatting.
Emulated Drives
@ -435,7 +446,7 @@ contributions in a due way.
Based on and sub project of:
libburnia-project.org
By Mario Danic <mario.danic@gmail.com> and Thomas Schmitt <scdbackup@gmx.net>
Copyright (C) 2006-2008 Mario Danic, Thomas Schmitt
Copyright (C) 2006-2009 Mario Danic, Thomas Schmitt
libburnia-project.org is inspired by and in other components still containing
parts of

View File

@ -38,7 +38,7 @@ original="./libburn_svn_release.tgz"
# My changes are in $changes , mainly in $changes/cdrskin
changes="./libburn-release"
skin_release="0.5.2"
skin_release="0.6.0"
patch_level=".pl00"
skin_rev="$skin_release""$patch_level"

View File

@ -38,7 +38,7 @@ original="./libburn_svn.tgz"
# My changes are in $changes , mainly in $changes/cdrskin
changes="./libburn-develop"
skin_release="0.5.3"
skin_release="0.6.1"
patch_level=""
skin_rev="$skin_release""$patch_level"

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 "Aug 05, 2008"
.TH CDRSKIN 1 "Dec 10, 2008"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
@ -16,7 +16,7 @@
.\" .sp <n> insert n+1 empty lines
.\" for manpage-specific macros, see man(7)
.SH NAME
cdrskin \- burns preformatted data to CD, DVD, and BD-RE via libburn.
cdrskin \- burns preformatted data to CD, DVD, and BD via libburn.
.SH SYNOPSIS
.B cdrskin
.RI [ options | track_source_addresses ]
@ -28,14 +28,14 @@ cdrskin \- burns preformatted data to CD, DVD, and BD-RE via libburn.
.\" respectively.
.PP
\fBcdrskin\fP is a program that provides some of cdrecord's options
in a compatible way for CD media. With DVD and BD-RE it has its own ways.
in a compatible way for CD media. With DVD and BD it has its own ways.
You do not need to be superuser for its daily usage.
.SS
.B Overview of features:
.br
Blanking of CD-RW and DVD-RW.
.br
Formatting of DVD-RW, DVD+RW, DVD-RAM, BD-RE.
Formatting of DVD-RW, DVD+RW, DVD-RAM, BD.
.br
Burning of data or audio tracks to CD,
.br
@ -45,7 +45,7 @@ or in Session at Once mode for seamless tracks.
.br
Multi session on CD (follow-up sessions in TAO only)
.br
or on DVD-R[W] (in Incremental mode) or on DVD+R[/DL].
or on DVD-R[W] (in Incremental mode) or DVD+R[/DL] or BD-R.
.br
Single session on DVD-RW or DVD-R (Disk-at-once).
.br
@ -161,12 +161,13 @@ round of overwriting. Usually
is the appropriate option.
Blanking damages the previous content but does not
make it completely unreadable. It is no effective privacy precaution.
Multiple cycles of blanking and overwriting with random numbers might be.
Multiple cycles of blanking and overwriting with random numbers might be
needed.
.SS
.B Sequentially Recordable DVD Media:
.B Sequentially Recordable DVD or BD Media:
.br
Currently DVD-RW, DVD-R and DVD+R[/DL] can be used for the Sequential recording
model.
Currently DVD-RW, DVD-R , DVD+R[/DL], and BD-R can be used for the Sequential
recording model.
.br
This applies to DVD-RW only if they are in state "Sequential Recording".
The media must be either blank or appendable.
@ -200,14 +201,18 @@ unpredicted length and to keep media appendable by option
The only restriction towards CD-R[W] is the lack of support for -audio tracks.
Multiple tracks per session are permissible.
.br
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
DVD+R[/DL].
The write modes for DVD+R[/DL] and BD-R resemble those with DVD-R except that
each track gets wrapped in an own session. There is no -dummy writing
with DVD+R[/DL] or BD-R.
.br
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
BD-R may be formatted before first use to enable the Defect Management which
might catch and repair some bad spots at the expense of slow speed
even with flawless media.
.br
.B Note:
Option -multi might make DVD media unreadable in some DVD-ROM drives.
Best reader compatibility is achieved without it
@ -352,7 +357,7 @@ audio track. Same is done for suffix ".au" and SUN Audio.
Option -audio may be used only with CD media and not with DVD or BD.
.TP
.BI blank= type
Blank a CD-RW, DVD-RW, or format a DVD-RW, DVD+RW, DVD-RAM, BD-RE.
Blank a CD-RW, DVD-RW, or format a DVD-RW, DVD+RW, DVD-RAM, BD.
This is combinable with burning in the same run of cdrskin.
The type given with blank= selects the particular behavior:
.RS
@ -364,7 +369,7 @@ It is a reason to abort if the media cannot assume thoroughly writeable state,
e.g. if it is non-blank write-once.
.br
This leaves unformatted DVD-RW in unformatted blank state. To format DVD-RW use
blank=format_overwriteable.
blank=format_overwriteable. Blank unformatted BD-R stay unformatted.
.br
(Note: blank=as_needed is not an original cdrecord option.)
.TP
@ -393,10 +398,11 @@ This is faster than full blanking but may yield media incapable of
Incremental Streaming (-tao).
.TP
format_if_needed
Format a media if it is not overwriteably formatted yet,
Format a media if it is not formatted yet,
and if cdrskin supports formatting for the media type,
and if formatting will not happen automatically during write.
This currently applies to unformatted DVD-RW, DVD-RAM and BD-RE.
This currently applies to unformatted DVD-RW, DVD-RAM, BD-RE,
and blank unformatted BD-R.
Eventually the appropriate default formatting is chosen.
If other media or states are encountered then nothing happens.
.br
@ -426,7 +432,7 @@ For DVD+RW this is the only supported explicit formatting type. It provides
complete "de-icing" so no reader slips on unwritten data areas.
.TP
format_defectmgt
Format DVD-RAM or BD-RE to reserve the default amount of spare blocks for
Format DVD-RAM or BD to reserve the default amount of spare blocks for
defect management.
.br
The following format_defectmgt_* allow to submit user wishes which
@ -450,25 +456,25 @@ Whether there happens certification at all depends much on the media state
and the actually selected format descriptor.
.TP
format_defectmgt_max
Format DVD-RAM or BD-RE to reserve a maximum number of spare blocks.
Format DVD-RAM or BD to reserve a maximum number of spare blocks.
.TP
format_defectmgt_min
Format DVD-RAM or BD-RE to reserve a minimum number of spare blocks.
Format DVD-RAM or BD to reserve a minimum number of spare blocks.
It might be necessary to format format_defectmgt_none first in order to get
offered the most minmal spare blocks sizes for format_defectmgt_min.
.TP
format_defectmgt_none
Format DVD-RAM or BD-RE to the largest available payload in the hope to disable
defect management at all. This seems not to have a speed increasing effect,
though.
defect management at all. This may or may not have a speed increasing effect.
Unformatted blank BD-R will be left unformatted.
.TP
format_defectmgt_payload_<size>
Format DVD-RAM or BD-RE. The text after "format_defectmgt_payload_" gives a
Format DVD-RAM or BD. The text after "format_defectmgt_payload_" gives a
number of bytes, eventually with suffixes "s", "k", "m". The largest number
of spare blocks will be chosen which allows at least the given payload size.
.TP
format_by_index_<number>
Format DVD-RW, DVD+RW, DVD-RAM or BD-RE.
Format DVD-RW, DVD+RW, DVD-RAM or BD.
The number after "format_by_index_" is used as index to the list of available
format descriptors. This list can be obtained by option --list_formats.
The numbers after text "Format idx" are the ones to be used with
@ -1181,7 +1187,7 @@ original cdrecord.
.TP
.BI stream_recording="on"|"off"
By setting "on" request that compliance to the desired speed setting is
preferred over management of write errors. With DVD-RAM and BD-RE this can
preferred over management of write errors. With DVD-RAM and BD this can
bring effective write speed near to the nominal write speed of the media.
But it will also disable the automatic use of replacement blocks
if write errors occur. It might as well be disliked or ignored by the drive.

View File

@ -1,6 +1,6 @@
/*
cdrskin.c , Copyright 2006-2008 Thomas Schmitt <scdbackup@gmx.net>
cdrskin.c , Copyright 2006-2009 Thomas Schmitt <scdbackup@gmx.net>
Provided under GPL version 2. See future commitment below.
A cdrecord compatible command line interface for libburn.
@ -88,7 +88,7 @@ or
/** The official program version */
#ifndef Cdrskin_prog_versioN
#define Cdrskin_prog_versioN "0.5.3"
#define Cdrskin_prog_versioN "0.6.0"
#endif
/** The official libburn interface revision to use.
@ -98,10 +98,10 @@ or
#define Cdrskin_libburn_majoR 0
#endif
#ifndef Cdrskin_libburn_minoR
#define Cdrskin_libburn_minoR 5
#define Cdrskin_libburn_minoR 6
#endif
#ifndef Cdrskin_libburn_micrO
#define Cdrskin_libburn_micrO 2
#define Cdrskin_libburn_micrO 0
#endif
@ -135,44 +135,44 @@ or
#endif /* Cdrskin_libburn_cvs_A60220_tS */
#ifdef Cdrskin_libburn_0_5_2
#define Cdrskin_libburn_versioN "0.5.2"
#ifdef Cdrskin_libburn_0_6_0
#define Cdrskin_libburn_versioN "0.6.0"
#define Cdrskin_libburn_from_pykix_svN 1
#endif /* Cdrskin_libburn_0_5_2 */
#endif /* Cdrskin_libburn_0_6_0 */
#ifdef Cdrskin_libburn_0_5_3
#define Cdrskin_libburn_versioN "0.5.3"
#ifdef Cdrskin_libburn_0_6_1
#define Cdrskin_libburn_versioN "0.6.1"
#define Cdrskin_libburn_from_pykix_svN 1
/* Place novelty switch macros here.
Move them down to Cdrskin_libburn_from_pykix_svN on version leap
*/
/* there are no libburn novelties in 0.5.3 yet */
/* there are no libburn novelties in 0.6.1 yet */
#endif /* Cdrskin_libburn_0_5_3 */
#endif /* Cdrskin_libburn_0_6_1 */
#ifndef Cdrskin_libburn_versioN
#define Cdrskin_libburn_0_5_2
#define Cdrskin_libburn_versioN "0.5.2"
#define Cdrskin_libburn_0_6_0
#define Cdrskin_libburn_versioN "0.6.0"
#define Cdrskin_libburn_from_pykix_svN 1
#endif
#ifdef Cdrskin_libburn_0_5_2
#ifdef Cdrskin_libburn_0_6_0
#undef Cdrskin_libburn_majoR
#undef Cdrskin_libburn_minoR
#undef Cdrskin_libburn_micrO
#define Cdrskin_libburn_majoR 0
#define Cdrskin_libburn_minoR 5
#define Cdrskin_libburn_micrO 2
#define Cdrskin_libburn_minoR 6
#define Cdrskin_libburn_micrO 0
#endif
#ifdef Cdrskin_libburn_0_5_3
#ifdef Cdrskin_libburn_0_6_1
#undef Cdrskin_libburn_majoR
#undef Cdrskin_libburn_minoR
#undef Cdrskin_libburn_micrO
#define Cdrskin_libburn_majoR 0
#define Cdrskin_libburn_minoR 5
#define Cdrskin_libburn_micrO 3
#define Cdrskin_libburn_minoR 6
#define Cdrskin_libburn_micrO 1
#endif
@ -251,7 +251,7 @@ or
/* 0.4.8 */
/* Bug fix release for write_start_address=... on DVD-RAM and BD-RE */
/* 0.5.0 , 0.5.2 */
/* 0.5.0 , 0.5.2 , 0.5.4 , 0.5.6 , 0.5.8 , 0.6.0 */
/* novel libburn features are transparent to cdrskin */
@ -2414,11 +2414,11 @@ return:
fprintf(stderr,
"\tformat_overwrite_full\t\tfull-size format a DVD-RW or DVD+RW\n");
fprintf(stderr,
"\tformat_defectmgt[_max|_min|_none]\tformat DVD-RAM or BD-RE\n");
"\tformat_defectmgt[_max|_min|_none]\tformat DVD-RAM or BD-R[E]\n");
fprintf(stderr,
"\tformat_defectmgt[_cert_on|_cert_off]\tcertification slow|quick\n");
fprintf(stderr,
"\tformat_defectmgt_payload_<size>\tformat DVD-RAM or BD-RE\n");
"\tformat_defectmgt_payload_<size>\tformat DVD-RAM or BD-R[E]\n");
fprintf(stderr,
"\tformat_by_index_<number>\t\tformat by index from --list_formats\n");
@ -2892,7 +2892,7 @@ set_severities:;
int major, minor, micro;
printf(
"Cdrecord 2.01-Emulation Copyright (C) 2006-2008, see libburnia-project.org\n");
"Cdrecord 2.01-Emulation Copyright (C) 2006-2009, see libburnia-project.org\n");
printf("libburn interface : %d.%d.%d\n",
burn_header_version_major, burn_header_version_minor,
burn_header_version_micro);
@ -3150,12 +3150,12 @@ struct CdrskiN {
bit10= format to maximum available size
bit11= - reserved -
bit12= - reserved -
bit13= - reserved -
bit13= try to disable eventual defect management
bit14= - reserved -
bit15= format by index
2=deformat_sequential (blank_fast might matter)
3=format (= format_overwrite restricted to DVD+RW)
4=format_defectmgt for DVD-RAM, BD-RE
4=format_defectmgt for DVD-RAM, BD-R[E]
bit8-15: bit0-7 of burn_disc_format(flag)
bit8 = write zeros after formatting
bit9+10: size mode
@ -5148,10 +5148,12 @@ int Cdrskin_blank(struct CdrskiN *skin, int flag)
skin->blank_format_type= 1|(1<<8);
skin->blank_format_size= 128*1024*1024;
} else if(profile_number == 0x12 ||
profile_number == 0x43) { /* DVD-RAM , BD-RE */;
profile_number == 0x43 ||
(profile_number == 0x41 && do_format==6)) {
/* DVD-RAM , BD-RE , BD-R SRM */
#ifdef Cdrskin_libburn_has_burn_disc_formaT
ret= burn_disc_get_formats(drive, &status, &size, &dummy, &num_formats);
if(ret>0 && status!=BURN_FORMAT_IS_FORMATTED) {
if((ret>0 && status!=BURN_FORMAT_IS_FORMATTED)) {
do_format= 4;
skin->blank_format_type= 4|(3<<9); /* default payload size */
skin->blank_format_size= 0;
@ -5228,9 +5230,10 @@ int Cdrskin_blank(struct CdrskiN *skin, int flag)
} else if(do_format==4) {
/* Formatting and influencing defect management of DVD-RAM , BD-RE */
if(!(profile_number == 0x12 || profile_number == 0x43)) {
if(!(profile_number == 0x12 || profile_number == 0x41 ||
profile_number == 0x43)) {
fprintf(stderr,
"cdrskin: SORRY : blank=%s for now does DVD-RAM and BD-RE only\n",
"cdrskin: SORRY : blank=%s for now does DVD-RAM and BD only\n",
fmt_text);
{ret= 0; goto ex;}
}
@ -5839,10 +5842,12 @@ int Cdrskin_activate_write_mode(struct CdrskiN *skin, enum burn_disc_status s,
profile_number==0x12 ||
profile_number==0x11 || profile_number==0x14 ||
profile_number==0x15 ||
profile_number==0x1b || profile_number==0x2b)
profile_number==0x1b || profile_number==0x2b ||
profile_number==0x41 || profile_number==0x43)
&& might_do_tao) {
/* DVD+RW, DVD-RW Restricted Overwrite, DVD-RAM,
DVD-R[W][/DL] Sequential Recording, DVD+R[/DL] */
DVD-R[W][/DL] Sequential Recording, DVD+R[/DL],
BD-R SRM , BD-RE */
strcpy(skin->preskin->write_mode_name,"TAO");
} else {
strcpy(skin->preskin->write_mode_name,"SAO");

View File

@ -2,7 +2,7 @@
<HEAD>
<META NAME="description" CONTENT="cdrskin, a limited cdrecord compatibility wrapper for libburn">
<META NAME="keywords" CONTENT="cdrskin, libburn, libburnia, burn, CD, DVD, linux, recording, burning, CD-R, CD-RW, DVD-R, DVD-RW, DVD+RW, DVD+R, DVD+R/DL, DVD-RAM, BD-RE, cdrecord, compatible, scdbackup">
<META NAME="keywords" CONTENT="cdrskin, libburn, libburnia, burn, CD, DVD, linux, recording, burning, CD-R, CD-RW, DVD-R, DVD-RW, DVD+RW, DVD+R, DVD+R/DL, DVD-RAM, BD-RE, BD-R, cdrecord, compatible, scdbackup">
<META NAME="robots" CONTENT="follow">
<TITLE>cdrskin homepage english</TITLE>
</HEAD>
@ -24,7 +24,7 @@
<P>
<H2>Purpose:</H2>
Burns preformatted data to CD, DVD, and BD media:<BR>
CD-R, DVD-R, DVD+R, DVD+R/DL, CD-RW, DVD-RW, DVD-RAM, DVD+RW, BD-RE
CD-R, DVD-R, DVD+R, DVD+R/DL, BD-R, CD-RW, DVD-RW, DVD-RAM, DVD+RW, BD-RE
</P>
<P>
@ -47,6 +47,8 @@ and to MMC-5 for DVD or BD).
<DT>Linux with kernel 2.4 or higher (and libc, of course) :</DT>
<DD>With kernel 2.4 an ATA drive has to be under ide-scsi emulation.</DD>
<DD>With kernel 2.6 the drive should not be under ide-scsi.</DD>
<DT>or FreeBSD (with libc, of course) :</DT>
<DD>ATAPI/CAM support has to be enabled in the kernel, see atapicam(4).</DD>
<DT>libpthread</DT>
<DD>is supposed to be a standard system component.</DD>
</DL>
@ -57,15 +59,18 @@ and to MMC-5 for DVD or BD).
GPL software included:<BR>
</H2>
<DL>
<DT>libburn-0.5.2</DT>
<DT>libburn-0.6.0</DT>
<DD>(founded by Derek Foreman and Ben Jansens,
furthered since August 2006 by Thomas Schmitt from team of libburnia-project.org)</DD>
<DD>transfers data to CD, DVD, BD-RE</DD>
developed and maintained since August 2006 by
Thomas Schmitt from team of libburnia-project.org)
</DD>
<DD>transfers data to CD, DVD, BD</DD>
</DL>
</P>
<P>
This program system has been tested on Intel/AMD Linux systems only.<BR>
This program system has been tested on Intel/AMD Linux and FreeBSD systems
only.<BR>
Ports to other usable systems are appreciated. Reports are welcome.
</P>
@ -88,7 +93,7 @@ are provided in a compatible way.<BR>
On all DVD media except DVD-R DL, cdrskin is able to perform any recording job
which is possible with cdrecord.
Other than with cdrecord, option -multi is supported with many DVD types and
write mode -tao works with anything but quickly blanked DVD-RW.
BD-R. Write mode -tao works with anything but quickly blanked DVD-RW.
</DT>
<BR><BR>
<DT>Get an overview of drives and their addresses</DT>
@ -186,8 +191,8 @@ or to do experiments on BD-R media.
<P>
<DL>
<DT>Download as source code (see README):</DT>
<DD><A HREF="cdrskin-0.5.2.pl00.tar.gz">cdrskin-0.5.2.pl00.tar.gz</A>
(735 KB).
<DD><A HREF="cdrskin-0.6.0.pl00.tar.gz">cdrskin-0.6.0.pl00.tar.gz</A>
(745 KB).
</DD>
<DD>
The cdrskin tarballs are source code identical with libburn releases
@ -236,15 +241,15 @@ cdrskin_0.4.2.pl00-x86-suse9_0-static.tar.gz</A>, (310 KB), -static compiled,
<HR>
<P>
Enhancements towards previous stable version cdrskin-0.5.0.pl00:
Enhancements towards previous stable version cdrskin-0.5.8.pl00:
<UL>
<LI>It is now possible to use drives which are not found by --devices</LI>
<LI>Formatting and writing of BD-R media</LI>
<!--
<LI>none</LI>
-->
</UL>
Bug fixes towards cdrskin-0.5.0.pl00:
Bug fixes towards cdrskin-0.5.8.pl00:
<UL>
<LI>none</LI>
<!--
@ -257,20 +262,20 @@ Bug fixes towards cdrskin-0.5.0.pl00:
<P>
<DL>
<DT><H3>Development snapshot, version 0.5.3 :</H3></DT>
<DD>Enhancements towards current stable version 0.5.2.pl00:
<DT><H3>Development snapshot, version 0.6.1 :</H3></DT>
<DD>Enhancements towards current stable version 0.6.0.pl00:
<UL>
<LI>none yet</LI>
<!--
-->
<LI>none yet</LI>
</UL>
</DD>
<DD>&nbsp;</DD>
<DD><A HREF="README_cdrskin_devel">README 0.5.3</A>
<DD><A HREF="cdrskin__help_devel">cdrskin_0.5.3 --help</A></DD>
<DD><A HREF="cdrskin_help_devel">cdrskin_0.5.3 -help</A></DD>
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.5.3)</A></DD>
<DD><A HREF="README_cdrskin_devel">README 0.6.1</A>
<DD><A HREF="cdrskin__help_devel">cdrskin_0.6.1 --help</A></DD>
<DD><A HREF="cdrskin_help_devel">cdrskin_0.6.1 -help</A></DD>
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.6.1)</A></DD>
<DD>&nbsp;</DD>
<DT>Maintainers of cdrskin unstable packages please use SVN of
<A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT>
@ -290,8 +295,8 @@ admins with full system souvereignty.</DT>
<A HREF="README_cdrskin_devel">upcoming README</A> ):
</DD>
<DD>
<A HREF="cdrskin-0.5.3.tar.gz">cdrskin-0.5.3.tar.gz</A>
(735 KB).
<A HREF="cdrskin-0.6.1.tar.gz">cdrskin-0.6.1.tar.gz</A>
(740 KB).
</DD>
<!-- This is not offered any more since spring 2008

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2008.10.04.073814"
#define Cdrskin_timestamP "2009.01.02.160001"

View File

@ -5767,15 +5767,486 @@ Made number transition to 0.5.3
+ cdrskin/add_ts_changes_to_libburn_0_5_3
Updated cdrskin tarball generator
20 Aug 2008 []
20 Aug 2008 [1999]
cdrskin/changelog.txt
Documented changes and release timestamp
------------------------------------ cycle - cdrskin-0.5.3 - 2008.08.20.100045
------------------------------------ cycle - cdrskin-0.5.3 - 2008.08.20.110457
30 Aug 2008 [2023]
README
Mentioned release of libisoburn-0.2.4
2008.08.30.104339 [2024]
libburn/mmc.c
libburn/spc.c
Issueing many SCSI error messages in cleartext now
2008.09.09.131915 [2039]
libburn/sg-linux.c
Trying to avoid unnecessary access to sibling device objects
12 Sep 2008 [2043]
doc/cookbook.txt
Described ISO 9660 multi-session on overwriteable media
2008.09.14.174344 [2048]
libburn/util.c
Gave up problematic and unused version.h
2008.09.16.060250 [2052]
cdrskin/cdrskin.c
Corrected pacifier text (Ticket 141)
24 Sep 2008 [2079]
README
Mentioned recent releases of libisofs and libisoburn
2008.09.28.193802 [2086]
libburn/spc.c
Bug fix: Potential buffer overflow introduced with revision 2024
2008.09.28.211741 [2087]
libburn/sg-linux.c
Bug fix: /dev/sr0 was accepted as enumerable address on Linux 2.4
2008.10.04.072657 [2096]
libburn/write.c
libburn/read.c
libburn/drive.c
Prevented SIGSEGV after illegal drive operations during sync write
2008.10.04.072657 [2097]
cdrskin/cdrskin.1
Mentioned new xorriso capabilities in man cdrskin
2008.10.04.073814 [2098]
configure.ac
Incremented LT_CURRENT and LT_AGE to get libburn.so.4.18.0
------------------------------------ cycle - cdrskin-0.5.3 - 2008.10.04.072657
* Bug fix: /dev/sr0 was accepted as enumerable address on Linux 2.4
------------------------------------ cycle - cdrskin-0.5.3 -
------------------------------------ cycle - cdrskin-0.5.3 -
2008.10.05.073001 [2102]
Makefile.am
configure.ac
README
libburn/libburn.h
cdrskin/cdrskin.c
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/cdrskin_eng.html
Made number transition
5 Oct 2008 [2103]
- cdrskin/add_ts_changes_to_libburn_0_5_2
- cdrskin/add_ts_changes_to_libburn_0_5_3
+ cdrskin/add_ts_changes_to_libburn_0_5_4
+ cdrskin/add_ts_changes_to_libburn_0_5_5
Updated cdrskin tarball generator
5 Oct 2008 [2104]
cdrskin/changelog.txt
Documented changes and release timestamp
------------------------------ release - cdrskin-0.5.4.pl00 - 2008.10.06.073001
* Bug fix: /dev/sr0 was accepted as enumerable address on Linux 2.4
* Issueing many SCSI error messages in cleartext now
2008.10.05.123737 [2106]
Makefile.am
configure.ac
README
libburn/libburn.h
cdrskin/cdrskin.c
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/cdrskin_eng.html
Made number transition to next development cycle
5 Oct 2008 [2107]
- cdrskin/add_ts_changes_to_libburn_0_5_2
- cdrskin/add_ts_changes_to_libburn_0_5_3
+ cdrskin/add_ts_changes_to_libburn_0_5_4
+ cdrskin/add_ts_changes_to_libburn_0_5_5
Updated cdrskin tarball generator
5 Oct 2008 [2108]
cdrskin/changelog.txt
Documented changes and release timestamp
------------------------------------ cycle - cdrskin-0.5.5 - 2008.10.05.130109
2008.10.15.103224 [2126]
libburn/libburn.h
A clarification in comment about burn_disc_format()
15 Oct 2008 [2127]
cdrskin/cdrskin.1
Fixed incomplete sentence in man cdrskin
2008.11.01.121240 [2157]
libburn/libburn.h
libburn/async.c
Bug fix: Unsuitable write modes were caught silently and later than desired
------------------------------------ cycle - cdrskin-0.5.5 - 2008.11.01.121445
2008.11.08.134828 [2173]
libburn/libburn.h
Clarified behavior of burn_source with pipes
2008.11.08.141734 [2174]
libburn/file.h
libburn/file.c
libburn/async.c
Cancelling libburn fifo thread before freeing the fifo object
2008.11.08.202456 [2175]
libburn/async.c
Disabling the sigsegv provoking new debug message
2008.11.12.075111 [2180]
libburn/async.h
Avoiding warning message about implicitely declared burn_fifo_abort()
------------------------------------ cycle - cdrskin-0.5.5 - 2008.11.12.075411
* Bug fix: libburn fifo thread was not aborted when burn run was aborted
12 Nov 2008 [2181]
svn copy http://svn.libburnia-project.org/libburn/trunk
http://svn.libburnia-project.org/libburn/branches/ZeroFiveSix
Preparing for libburn-0.5.6
12 Nov 2008 [2182]
svn delete http://svn.libburnia-project.org/libburn/branches/ZeroFourSix
Removing obsolete libburn branch ZeroFourSix
2008.11.12.120001 [2183]
Makefile.am
configure.ac
README
libburn/libburn.h
cdrskin/cdrskin.c
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/cdrskin_eng.html
Made number transition to 0.5.6
12 Nov 2008 [2184]
- cdrskin/add_ts_changes_to_libburn_0_5_4
- cdrskin/add_ts_changes_to_libburn_0_5_5
+ cdrskin/add_ts_changes_to_libburn_0_5_6
+ cdrskin/add_ts_changes_to_libburn_0_5_7
Updated cdrskin tarball generator
12 Nov 2008 [2185]
cdrskin/changelog.txt
Documented changes and release timestamp
12 Nov 2008 [2186]
cdrskin/cdrskin.c
Corrected wrong version number of cdrskin
------------------------------ release - cdrskin-0.5.6.pl00 - 2008.11.12.120001
* Bug fix: libburn fifo thread was not aborted when burn run was aborted
which could lead to use of freed memory
2008.11.12.121832 [2187]
Makefile.am
configure.ac
README
libburn/libburn.h
cdrskin/cdrskin.c
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/cdrskin_eng.html
Made number transition to 0.5.7
12 Nov 2008 [2188]
- cdrskin/add_ts_changes_to_libburn_0_5_4
- cdrskin/add_ts_changes_to_libburn_0_5_5
+ cdrskin/add_ts_changes_to_libburn_0_5_6
+ cdrskin/add_ts_changes_to_libburn_0_5_7
Updated cdrskin tarball generator
12 Nov 2008 [2189]
cdrskin/changelog.txt
Documented changes and release timestamp
------------------------------------ cycle - cdrskin-0.5.7 - 2008.11.12.130026
12 Nov 2008 [2191]
svn move \
http://svn.libburnia-project.org/libburn/"$svn_name" \
http://svn.libburnia-project.org/libburn/"$tag_name"
libburn release 0.5.6 is ready
2008.11.15.220652 [2197]
libburn/sg-freebsd.c
libburn/sg-freebsd-port.c
Removed remark that use of statvfs() was untested with FreeBSD
21 Nov 2008 [2208]
README
cdrskin/README
cdrskin/cdrskin_eng.html
Mentioned FreeBSD peculiarities in our docs
2008.11.26.210608 [2213]
libburn/structure.c
Added tests against the SIGSEGV of ticket 146
2008.11.27.081027 [2214]
libburn/libdax_msgs.h
libburn/structure.c
Truncating eventually detected damaged CD table-of-content
------------------------------------ cycle - cdrskin-0.5.7 - 2008.11.27.081027
* Bug fix: Session without leadout entry on CD caused SIGSEGV
2008.11.27.172124 [2215]
libburn/libdax_msgs.h
libburn/structure.c
Changed error severity with TOC truncation to MISHAP
2008.11.29.140115 [2217]
libburn/spc.c
Translating ASC=0x31 formatting error messages, reporting command names
2008.11.29.140404 [2218]
libburn/mmc.c
Circumventing BD-RE Quick Certification refusal of LG GGW-H20L YL03
------------------------------------ cycle - cdrskin-0.5.7 - 2008.11.29.140404
2008.12.03.085219 [2239]
libburn/mmc.c
libburn/structure.c
libburn/libdax_msgs.h
Defaulting sessions without leadout entry
------------------------------------ cycle - cdrskin-0.5.7 - 2008.12.03.085219
Dec 07 2008 [2248]
svn copy http://svn.libburnia-project.org/libburn/trunk
http://svn.libburnia-project.org/libburn/branches/ZeroFiveEight
Preparing for libburn-0.5.8
2008.12.07.140001 [2249]
Makefile.am
configure.ac
README
libburn/libburn.h
cdrskin/cdrskin.c
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/cdrskin_eng.html
Made number transition to 0.5.8
Dec 07 2008 [2250]
- cdrskin/add_ts_changes_to_libburn_0_5_6
- cdrskin/add_ts_changes_to_libburn_0_5_7
+ cdrskin/add_ts_changes_to_libburn_0_5_8
+ cdrskin/add_ts_changes_to_libburn_0_5_9
Updated cdrskin tarball generator
Dec 07 2008 [2251]
cdrskin/changelog.txt
Documented changes and release timestamp
------------------------------ release - cdrskin-0.5.8.pl00 - 2008.12.07.140001
* Bug fix: A session without leadout entry on CD caused a SIGSEGV by NULL
* Improvements about BD-RE formatting
2008.12.07.155219 [2252]
Makefile.am
configure.ac
README
libburn/libburn.h
cdrskin/cdrskin.c
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/cdrskin_eng.html
Made number transition to 0.5.9
Dec 07 2008 [2253]
- cdrskin/add_ts_changes_to_libburn_0_5_6
- cdrskin/add_ts_changes_to_libburn_0_5_7
+ cdrskin/add_ts_changes_to_libburn_0_5_8
+ cdrskin/add_ts_changes_to_libburn_0_5_9
Updated cdrskin tarball generator
Dec 07 2008 [2254]
cdrskin/changelog.txt
Documented changes and release timestamp
Dec 07 2008 [2255]
svn move -m "libburn release 0.5.8 is ready" \
http://svn.libburnia-project.org/libburn/branches/ZeroFiveEigh \
http://svn.libburnia-project.org/libburn/tags/ZeroFiveEight
svn delete -m 'Deleted obsolete branch' \
http://svn.libburnia-project.org/libburn/branches/"$svn_name"
------------------------------------ cycle - cdrskin-0.5.9 - 2008.12.07.155219
2008.12.09.123314 [2264]
libburn/libburn.h
libburn/drive.c
libburn/async.c
libburn/write.c
libburn/mmc.c
Beginning to implement write code for BD-R SRM without POW
2008.12.09.123558 [2265]
cdrskin/cdrskin.c
Beginning to implement write code for BD-R SRM without POW
2008.12.10.092535 [2271]
libburn/transport.h
libburn/async.c
libburn/mmc.h
libburn/mmc.c
Formatting of BD-R SRM to default size and by index
2008.12.10.114241 [2273]
cdrskin/cdrskin.c
Formatting of BD-R SRM to default size and by index
10 Dec 2008 [2274]
README
cdrskin/README
cdrskin/cdrskin.1
cdrskin/wiki_plain.txt
Mentioning BD-R in documentation
2008.12.11.072308 [2276]
libburn/libdax_msgs.h
libburn/async.c
Rejecting unformattable BD-R more early
2008.12.11.092204 [2278]
libburn/libdax_msgs.h
libburn/async.c
libburn/mmc.c
cdrskin/cdrskin.1
Catching BD-R zero spare formatting with NOTE rather than SORRY
2008.12.12.112129 [2279]
libburn/libburn.h
libburn/async.c
libburn/mmc.c
Making format size of BD-RE and BD-R quite freely adjustable
2008.12.12.214013 [2280]
libburn/transport.h
libburn/async.c
libburn/mmc.c
Interpreting feature 0023h for BD formatting capabilities
2008.12.13.144909 [2284]
configure.ac
Now producing libburn.so.4.24.0
------------------------------------ cycle - cdrskin-0.5.9 - 2008.12.13.144909
* Formatting and writing of BD-R media
14 Dec 2008 [2289]
test/libburner.c
Updated libburner to BD-R
14 Dec 2008 [2290]
cdrskin/cdrskin_eng.html
Updated cdrskin web page
2008.12.17.091905 [2297]
libburn/libburn.h
libburn/drive.c
New API function burn_get_read_capacity()
17 Dec 2008 [2298] [2302]
doc/comments
Removed project overview and references to libisofs and libisoburn
------------------------------------ cycle - cdrskin-0.5.9 - 2008.12.19.070912
* New API function burn_get_read_capacity()
2008.12.19.203523 [2306]
libburn/libburn.h
Clarified blank, appendable, closed burn_disc_status
2008.12.22.130527 [2323]
libburn/async.c
Fixed denial of fast formatting with BD-RE introduced by revision 2280
------------------------------------ cycle - cdrskin-0.5.9 - 2008.12.23.144853
2008.12.29.105341 [2342]
libburn/libburn.h
test/libburner.c
Cosmetic changes
Jan 02 2009 [2346]
svn copy http://svn.libburnia-project.org/libburn/trunk
http://svn.libburnia-project.org/libburn/branches/ZeroSixZero
Preparing for libburn-0.6.0
02 Jan 2009 [2347]
COPYRIGHT
libburn/libdax_msgs.c
libburn/libdax_msgs.h
test/libburner.c
Updated copyright claims to year 2009
2009.01.02.160001 [i2348]
Makefile.am
configure.ac
README
libburn/libburn.h
cdrskin/cdrskin.c
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/cdrskin_eng.html
Made number transition to 0.6.0
02 Jan 2009 [2349]
- cdrskin/add_ts_changes_to_libburn_0_5_8
- cdrskin/add_ts_changes_to_libburn_0_5_9
+ cdrskin/add_ts_changes_to_libburn_0_6_0
+ cdrskin/add_ts_changes_to_libburn_0_6_1
Updated cdrskin tarball generator
[]
cdrskin/changelog.txt
Documented changes and release timestamp
------------------------------ release - cdrskin-0.6.0.pl00 - 2009.01.02.160001
* Formatting and writing of BD-R media
* New API function burn_get_read_capacity()
------------------------------------ cycle - cdrskin-0.6.1 -
------------------------------------ cycle - cdrskin-0.6.1 -
===============================================================================
TODO
@ -5784,6 +6255,15 @@ Documented changes and release timestamp
--------------------------------- bugs -------------------------------------
- Needed is a system dependend facility: dev_t <-> major, minor
- Do something about drive->buffer asynchronous race conditions
and dangerous use of local heap memory.
(The various asynchronous operations use the same buffer
pointer in struct burn_drive and let it point to
their private memory.
Of course, any problem is due to faulty application
... but then it is really hard to detect.)
- Why are DVD+R tracks labeled "invisible" by dvd+rw-mediainfo ?
Why does the DVD drive only show the first session ?
@ -5797,6 +6277,13 @@ READ TRACK INFORMATION[#5]:
------------------------------ end of bugs ---------------------------------
Support for BD-R SRM+POW
? Provide an option to open track source file O_DIRECT ?
(needs read chunks much larger than 2 kB)
? Enable profile 0x42 BD-R random recording
Provide DVD+R DL layer break setter
Check all SORRY and FATAL errors whether they should become FAILUREs
@ -5839,10 +6326,6 @@ http://developer.osdl.org/dev/robustmutexes/src/fusyn.hg/Documentation/ioctl/cdr
[]
Convert burn_print() into libdax_msgs_submit()
[]
Test unlocking of all drives by burn_drive_info_free()
Test unlocking of single drive by burn_drive_grab(), burn_drive_release()
[]
Clear outdated persistent read buffer after small CD image was read (ticket 57)

View File

@ -7,7 +7,7 @@
debug_opts="-O2"
def_opts=
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
libvers="-DCdrskin_libburn_0_5_3"
libvers="-DCdrskin_libburn_0_6_0"
cleanup_src_or_obj="libburn/cleanup.o"
libdax_msgs_o="libburn/libdax_msgs.o"
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
@ -33,15 +33,15 @@ do
libdax_audioxtr_o=
libdax_msgs_o="libburn/message.o"
cleanup_src_or_obj="-DCleanup_has_no_libburn_os_H cdrskin/cleanup.c"
elif test "$i" = "-libburn_0_5_2"
elif test "$i" = "-libburn_0_6_0"
then
libvers="-DCdrskin_libburn_0_5_2"
libvers="-DCdrskin_libburn_0_6_0"
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
libdax_msgs_o="libburn/libdax_msgs.o"
cleanup_src_or_obj="libburn/cleanup.o"
elif test "$i" = "-libburn_svn"
then
libvers="-DCdrskin_libburn_0_5_3"
libvers="-DCdrskin_libburn_0_6_1"
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
libdax_msgs_o="libburn/libdax_msgs.o"
cleanup_src_or_obj="libburn/cleanup.o"
@ -76,7 +76,7 @@ do
echo " -compile_cdrfifo compile program cdrskin/cdrfifo."
echo " -compile_dewav compile program test/dewav without libburn."
echo " -cvs_A60220 set macro to match libburn-CVS of 20 Feb 2006."
echo " -libburn_0_5_2 set macro to match libburn-0.5.2"
echo " -libburn_0_6_0 set macro to match libburn-0.6.0"
echo " -libburn_svn set macro to match current libburn-SVN."
echo " -no_largefile do not use 64 bit off_t (must match libburn)."
echo " -do_not_compile_cdrskin omit compilation of cdrskin/cdrskin."

View File

@ -10,8 +10,8 @@ Schilling's cdrtools. cdrskin strives to be a second source for the services
traditionally provided by cdrecord. Currently it does CD-R and CD-RW this way.
Overwriteable media DVD-RAM, DVD+RW, DVD-RW, and BD-RE are handled differently
than with cdrecord-ProDVD in order to offer TAO-like single track recording.
Sequential DVD-R[W], DVD+R, DVD+R DL are handled like CD-R[W] with TAO and
multi-session. Additionally cdrskin offers cdrecord-ProDVD-like mode DAO
Sequential DVD-R[W], DVD+R, DVD+R DL, BD-R are handled like CD-R[W] with TAO
and multi-session. Additionally cdrskin offers cdrecord-ProDVD-like mode DAO
with DVD-R[W].
cdrskin does not contain any bytes copied from cdrecord's sources.

View File

@ -1,4 +1,4 @@
AC_INIT([libburn], [0.5.3], [http://libburnia-project.org])
AC_INIT([libburn], [0.6.0], [http://libburnia-project.org])
AC_PREREQ([2.50])
dnl AC_CONFIG_HEADER([config.h])
@ -7,7 +7,7 @@ AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE([subdir-objects])
dnl Notes by ts A71207 - A80126 :
dnl Notes by ts A71207 - A81111 :
dnl
dnl Regrettably the meaning of the various version types was misunderstood
dnl before version 0.4.1.
@ -64,6 +64,10 @@ dnl 0.4.6 = libburn.so.4.11.0
dnl 0.4.8 = libburn.so.4.13.0
dnl 0.5.0 = libburn.so.4.15.0
dnl 0.5.2 = libburn.so.4.17.0
dnl 0.5.4 = libburn.so.4.19.0
dnl 0.5.6 = libburn.so.4.21.0
dnl 0.5.8 = libburn.so.4.23.0
dnl 0.6.0 = libburn.so.4.25.0
dnl
dnl So LT_CURRENT, LT_REVISION and LT_AGE get set directly here.
dnl SONAME of the emerging library is LT_CURRENT - LT_AGE.
@ -88,8 +92,8 @@ dnl If BURN_*_VERSION changes, be sure to change AC_INIT above to match.
dnl
dnl As said: Only copies. Original in libburn/libburn.h : burn_header_version_*
BURN_MAJOR_VERSION=0
BURN_MINOR_VERSION=5
BURN_MICRO_VERSION=2
BURN_MINOR_VERSION=6
BURN_MICRO_VERSION=0
BURN_VERSION=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
AC_SUBST(BURN_MAJOR_VERSION)
@ -100,15 +104,15 @@ AC_SUBST(BURN_VERSION)
dnl Libtool versioning
LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
dnl
dnl ts A80820
dnl ### This is the release version libburn-0.5.2 = libburn.so.4.17.0
dnl This is the development version after above release version
dnl ### LT_CURRENT++, LT_AGE++ has not yet happened.
dnl LT_CURRENT++, LT_AGE++ has happened meanwhile.
dnl ts A90102
dnl This is the release version libburn-0.6.0 = libburn.so.4.25.0
dnl ### This is the development version after above release version
dnl LT_CURRENT++, LT_AGE++ has not yet happened.
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
dnl
dnl SONAME = 22 - 18 = 4 . Library name = libburn.so.4.18.0
LT_CURRENT=22
LT_AGE=18
dnl SONAME = 29 - 25 = 4 . Library name = libburn.so.4.25.0
LT_CURRENT=29
LT_AGE=25
LT_REVISION=0
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`

View File

@ -1,106 +1,51 @@
/**
@author Mario Danic, Thomas Schmitt
@mainpage Libburnia Documentation Index
@mainpage Libburn Documentation Index
@section intro Introduction
Libburnia is an open-source project for reading, mastering and writing
optical discs.
optical discs. This page is about its capability to handle optical media.
For now this means CD-R, CD-RW, DVD-RAM, DVD+RW, DVD+R, DVD+R/DL, DVD-RW,
DVD-R, BD-RE.
DVD-R, BD-R, BD-RE.
Not supported yet are DVD-R/DL, HD-DVD, BD-R (blue ray). Testers for
DVD-R/DL are wanted, though. BD-R programming efforts would be made
if an interested tester contacts us.
Not supported yet are DVD-R/DL. Testers wanted.
The project comprises of several more or less interdependent parts which
together strive to be a usable foundation for application development.
These are libraries, language bindings, and middleware binaries which emulate
classical (and valuable) Linux tools.
Our scope is currently Linux 2.4 and 2.6, or FreeBSD . For ports to other
systems we would need : login on a development machine resp. a live OS on CD
or DVD, advise from a system person about the equivalent of Linux sg or FreeBSD
CAM, volunteers for testing of realistic use cases.
Our scope is currently Linux 2.4 and 2.6 only. For ports to other systems
we would need : login on a development machine resp. a live OS on CD or DVD,
advise from a system person about the equivalent of Linux sg or FreeBSD CAM,
volunteers for testing of realistic use cases.
libburn is the library by which preformatted data get onto optical media.
Its code is independent of cdrecord. Its DVD capabilities are learned from
studying the code of dvd+rw-tools and MMC-5 specs. No code but only the pure
SCSI knowledge has been taken from dvd+rw-tools, though.
We have a well tested code base for burning data and audio CDs and many DVD
types. The burn API is quite comprehensively documented and can be used to
build a presentable application.
We have a functional binary which emulates the core use cases of cdrecord in
order to prove that usability, and in order to allow you to explore libburn's
scope by help of existing cdrecord frontends.
cdrskin is a limited cdrecord compatibility wrapper for libburn.
cdrecord is a powerful GPL'ed burn program included in Joerg Schilling's
cdrtools. cdrskin strives to be a second source for the services traditionally
provided by cdrecord. Additionally it provides libburn's DVD/BD capabilities,
where only -sao is compatible with cdrecord.
cdrskin does not contain any bytes copied from cdrecord's sources.
Many bytes have been copied from the message output of cdrecord runs, though.
See cdrskin/README for more.
ISO 9660 filesystems with Rock Ridge and Joliet extensions can be created
and manipulated quite freely. This capability together with our burn capability
makes possible a single binary application which covers all steps of image
composition, updating and writing. Quite unique in the Linux world.
The burn API example of libburn is named test/libburner.c . The API for media
information inquiry is demonstrated in test/telltoc.c .
Explore these examples if you look for inspiration.
@subsection components The project components (list subject to growth, hopefully):
- libburn is the library by which preformatted data get onto optical media.
It uses either /dev/sgN (e.g. on kernel 2.4 with ide-scsi) or
/dev/srM or /dev/hdX (e.g. on kernel 2.6).
libburn is the foundation of our cdrecord emulation. Its code is
independent of cdrecord. Its DVD capabilities are learned from
studying the code of dvd+rw-tools and MMC-5 specs. No code but only
the pure SCSI knowledge has been taken from dvd+rw-tools, though.
- libisofs is the library to pack up hard disk files and directories into a
ISO 9660 disk image. This may then be brought to CD via libburn.
libisofs is to be the foundation of our upcoming mkisofs emulation.
- libisoburn is an add-on to libburn and libisofs which coordinates both and
also allows to grow ISO-9660 filesystem images on multi-session
media as well as on overwriteable media via the same API.
All media peculiarities are handled automatically.
- cdrskin is a limited cdrecord compatibility wrapper for libburn.
cdrecord is a powerful GPL'ed burn program included in Joerg
Schilling's cdrtools. cdrskin strives to be a second source for
the services traditionally provided by cdrecord. Additionally it
provides libburn's DVD/BD capabilities, where only -sao is
compatible with cdrecord.
cdrskin does not contain any bytes copied from cdrecord's sources.
Many bytes have been copied from the message output of cdrecord
runs, though.
See cdrskin/README for more.
- xorriso is an application of all three libraries which creates, loads,
manipulates and writes ISO 9660 filesystem images with
Rock Ridge extensions. Manipulation is not only adding or
overwriting of files but also deletion, renaming, and attribute
changing. An incremental backup feature is provided.
See xorriso/README for more
- "test" is a collection of application gestures and examples given by the
authors of the library features. The burn API example of libburn
is named test/libburner.c . The API for media information inquiry is
demonstrated in test/telltoc.c .
Explore these examples if you look for inspiration.
We strive to be a responsive upstream.
Our libraries are committed to maintain older feature sets in newer versions.
This applies to source code headers (API) as well as to linkable objects (ABI).
The only exception from this rule is about non-release versions x.y.*[13579]
which are allowed to introduce new features, change those new features in
any way and even may revoke such new features before the next release of
x.y.*[02468]. As soon as it is released, a feature is promised to persist.
SONAMES:
SONAME:
libburn.so.4 (since 0.3.4, March 2007),
libisofs.so.6 (since 0.6.2, February 2008),
libisoburn.so.1 (since 0.1.0, February 2008).
@section using Using the libraries
@section using Using libburn
Our build system is based on autotools.
User experience tells us that you will need at least autotools version 1.7.
To build libburn and its subprojects it should be sufficient to go into
its toplevel directory and execute
To build libburn and its companion applications go into its toplevel directory
and execute
- ./bootstrap (needed if you downloaded from SVN)
@ -112,29 +57,24 @@ To make the libraries accessible for running resp. developing applications
- make install
Both libraries are written in C language and get built by autotools.
Thus we expect them to be useable by a wide range of Linux-implemented
languages and development tools.
@section libburner Libburner
libburner is a minimal demo application for the library libburn
(see: libburn/libburn.h) as provided on http://libburnia-project.org .
It can list the available devices, can blank a CD-RW or DVD-RW and
can burn to recordable CD and recordable single layer DVD.
It can list the available devices, can burn to recordable CD, DVD, or BD,
can blank a CD-RW or DVD-RW, and can format unformatted DVD-RW, BD-R, or BD-RE.
It's main purpose, nevertheless, is to show you how to use libburn and also
to serve the libburnia team as reference application. libburner does indeed
define the standard way how above three gestures can be implemented and
stay upward compatible for a good while.
define the standard way how above gestures can be implemented and stay upward
compatible for a good while.
@subsection libburner-help Libburner --help
<pre>
Usage: test/libburner
[--drive <address>|<driveno>|"-"] [--audio]
[--blank_fast|--blank_full|--format_overwrite]
[--try_to_simulate]
[--blank_fast|--blank_full|--format] [--try_to_simulate]
[--multi] [<one or more imagefiles>|"-"]
Examples
A bus scan (needs rw-permissions to see a drive):
@ -147,8 +87,8 @@ Blank a used CD-RW (is combinable with burning in one run):
test/libburner --drive /dev/hdc --blank_fast
Blank a used DVD-RW (is combinable with burning in one run):
test/libburner --drive /dev/hdc --blank_full
Format a DVD-RW to avoid need for blanking before re-use:
test/libburner --drive /dev/hdc --format_overwrite
Format a DVD-RW, BD-RE or BD-R:
test/libburner --drive /dev/hdc --format
Burn two audio tracks (to CD only):
lame --decode -t /path/to/track1.mp3 track1.cd
test/dewav /path/to/track2.wav -o track2.cd

View File

@ -25,9 +25,9 @@
#include "drive.h"
#include "write.h"
#include "options.h"
#include "file.h"
#include "async.h"
#include "init.h"
#include "file.h"
#include "back_hacks.h"
#include <pthread.h>
@ -376,7 +376,7 @@ static void *format_worker_func(struct w_list *w)
void burn_disc_format(struct burn_drive *drive, off_t size, int flag)
{
struct format_opts o;
int ok = 0;
int ok = 0, ret;
char msg[160];
if ((SCAN_GOING()) || find_worker(drive) != NULL) {
@ -409,8 +409,82 @@ void burn_disc_format(struct burn_drive *drive, off_t size, int flag)
flag |= 4; /* format up to maximum size */
} else if (drive->current_profile == 0x12) {
ok = 1; /* DVD-RAM */
} else if (drive->current_profile == 0x41) {
/* BD-R SRM */
ok= 1;
ret = drive->read_format_capacities(drive, 0x00);
if (ret > 0 &&
drive->format_descr_type == BURN_FORMAT_IS_FORMATTED)
ok = 0;
if (drive->status != BURN_DISC_BLANK)
ok = 0;
if (!ok) {
libdax_msgs_submit(libdax_messenger,
drive->global_index, 0x00020162,
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
"BD-R not unformatted blank any more. Cannot format.",
0, 0);
drive->cancel = 1;
return;
}
if (flag & 32) {
libdax_msgs_submit(libdax_messenger,
drive->global_index, 0x00020163,
LIBDAX_MSGS_SEV_NOTE, LIBDAX_MSGS_PRIO_HIGH,
"Blank BD-R left unformatted for zero spare capacity.",
0, 0);
return;
}
} else if (drive->current_profile == 0x43) {
ok = 1; /* BD-RE */
if ((flag & 32) && !(drive->current_feat23h_byte4 & 8)) {
libdax_msgs_submit(libdax_messenger,
drive->global_index, 0x00020164,
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
"Drive does not format BD-RE without spares.",
0, 0);
drive->cancel = 1;
return;
}
if ((flag & 6) != 6 || (flag & 128)) {
if ((flag & 64) && !(drive->current_feat23h_byte4 & 2)) {
if (drive->current_feat23h_byte4 & 1) {
libdax_msgs_submit(libdax_messenger,
drive->global_index, 0x00020165,
LIBDAX_MSGS_SEV_WARNING,
LIBDAX_MSGS_PRIO_HIGH,
"Drive does not support fast formatting",
0, 0);
flag &= ~64;
} else {
no_non_default_bd_re:;
libdax_msgs_submit(libdax_messenger,
drive->global_index, 0x00020167,
LIBDAX_MSGS_SEV_SORRY,
LIBDAX_MSGS_PRIO_HIGH,
"Drive does not support non-default formatting",
0, 0);
drive->cancel = 1;
return;
}
}
if ((!(flag & 64)) && !(drive->current_feat23h_byte4 & 1)){
if (drive->current_feat23h_byte4 & 2) {
libdax_msgs_submit(libdax_messenger,
drive->global_index, 0x00020166,
LIBDAX_MSGS_SEV_WARNING,
LIBDAX_MSGS_PRIO_HIGH,
"Drive does not support full formatting",
0, 0);
flag |= 64;
} else
goto no_non_default_bd_re;
}
}
}
if (!ok) {
@ -495,7 +569,7 @@ void burn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
*/
strcpy(reasons, "Write job parameters are unsuitable:\n");
if (burn_precheck_write(opts, disc, reasons + strlen(reasons), 1)
== BURN_WRITE_NONE) {
<= 0) {
libdax_msgs_submit(libdax_messenger,
opts->drive->global_index, 0x00020139,
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
@ -518,6 +592,12 @@ void burn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
static void *fifo_worker_func(struct w_list *w)
{
int old;
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &old);
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &old);
/* Note: Only burn_fifo_abort() shall cancel the fifo thread */
burn_fifo_source_shoveller(w->u.fifo.source, w->u.fifo.flag);
remove_worker(pthread_self());
return NULL;
@ -547,6 +627,27 @@ int burn_fifo_start(struct burn_source *source, int flag)
}
int burn_fifo_abort(struct burn_source_fifo *fs, int flag)
{
int ret;
pthread_t pt;
if (fs->thread_is_valid <= 0 || fs->thread_handle == NULL)
return(2);
#ifdef NIX
libdax_msgs_submit(libdax_messenger, -1, 0x00000002,
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH,
"Aborting running burn_source_fifo thread", 0, 0);
#endif /* NIX */
pt= *((pthread_t *) fs->thread_handle);
remove_worker(pt);
ret = pthread_cancel(pt);
return (ret == 0);
}
#ifdef Libburn_has_burn_async_join_alL
/* ts A71019 : never used */

View File

@ -10,5 +10,9 @@ struct burn_write_opts;
/* To be called when the first read() call comes to a fifo */
int burn_fifo_start(struct burn_source *source, int flag);
/* ts A81108 */
/* To abort a running fifo thread before the fifo object gets deleted */
int burn_fifo_abort(struct burn_source_fifo *fs, int flag);
#endif /* BURN__ASYNC_H */

View File

@ -2246,8 +2246,9 @@ int burn_disc_get_multi_caps(struct burn_drive *d, enum burn_write_types wt,
o->might_do_sao = 4;
o->might_do_tao = 2;
o->advised_write_mode = BURN_WRITE_TAO;
} else if (d->current_profile == 0x1b || d->current_profile == 0x2b) {
/* DVD+R , DVD+R/DL */
} else if (d->current_profile == 0x1b || d->current_profile == 0x2b ||
d->current_profile == 0x41) {
/* DVD+R , DVD+R/DL , BD-R SRM */
o->multi_session = o->multi_track = 1;
o->might_do_tao = 2;
o->might_do_sao = 1;
@ -2506,3 +2507,10 @@ int burn_drive_set_media_capacity_remaining(struct burn_drive *d, off_t value)
return 1;
}
/* ts A81215 : API */
int burn_get_read_capacity(struct burn_drive *d, int *capacity, int flag)
{
*capacity = d->media_read_capacity;
return (d->media_read_capacity != 0x7fffffff);
}

View File

@ -9,6 +9,8 @@
#include <unistd.h>
#include <fcntl.h>
#include <time.h>
#include <pthread.h>
#include "source.h"
#include "libburn.h"
#include "file.h"
@ -307,6 +309,7 @@ static void fifo_free(struct burn_source *source)
{
struct burn_source_fifo *fs = source->data;
burn_fifo_abort(fs, 0);
if (fs->inp != NULL)
burn_source_free(fs->inp);
if (fs->buf != NULL)
@ -320,9 +323,12 @@ int burn_fifo_source_shoveller(struct burn_source *source, int flag)
struct burn_source_fifo *fs = source->data;
int ret, bufsize, diff, wpos, rpos, trans_end, free_bytes;
char *bufpt;
pthread_t thread_handle_storage;
fs->thread_handle= &thread_handle_storage;
*((pthread_t *) fs->thread_handle)= pthread_self();
fs->thread_pid = getpid();
fs->thread_pid_valid = 1;
fs->thread_is_valid = 1;
bufsize = fs->chunksize * fs->chunks;
while (!fs->end_of_consumption) {
@ -430,6 +436,8 @@ int burn_fifo_source_shoveller(struct burn_source *source, int flag)
free(fs->buf); /* Give up fifo buffer. Next fifo might start soon. */
fs->buf = NULL;
fs->thread_handle= NULL;
fs->thread_is_valid = 0;
return (fs->input_error == 0);
}
@ -465,8 +473,9 @@ struct burn_source *burn_fifo_source_new(struct burn_source *inp,
if (fs == NULL)
return NULL;
fs->is_started = 0;
fs->thread_handle = NULL;
fs->thread_pid = 0;
fs->thread_pid_valid = 0;
fs->thread_is_valid = 0;
fs->inp = NULL; /* set later */
fs->chunksize = chunksize;
fs->chunks = chunks;

View File

@ -29,8 +29,9 @@ struct burn_source_fifo {
*/
int is_started;
void *thread_handle; /* actually a pointer to a thread_t */
int thread_pid;
int thread_pid_valid;
int thread_is_valid;
/* the burn_source for which this fifo is acting as proxy */
struct burn_source *inp;

View File

@ -183,18 +183,41 @@ enum burn_block_types
BURN_BLOCK_SAO = 16384
};
/** Possible status' of the drive in regard to the disc in it. */
/** Possible status of the drive in regard to the disc in it. */
enum burn_disc_status
{
/** The current status is not yet known */
BURN_DISC_UNREADY,
/** The drive holds a blank disc */
/** The drive holds a blank disc. It is ready for writing from scratch.
Unused multi-session media:
CD-R, CD-RW, DVD-R, DVD-RW, DVD+R, BD-R
Blanked multi-session media (i.e. treated by burn_disc_erase())
CD-RW, DVD-RW
Overwriteable media with or without valid data
DVD-RAM, DVD+RW, formatted DVD-RW, BD-RE
*/
BURN_DISC_BLANK,
/** There is no disc at all in the drive */
BURN_DISC_EMPTY,
/** There is an incomplete disc in the drive */
/** There is an incomplete disc in the drive. It is ready for appending
another session.
Written but not yet closed multi-session media
CD-R, CD-RW, DVD-R, DVD-RW, DVD+R, BD-R
*/
BURN_DISC_APPENDABLE,
/** There is a disc with data on it in the drive */
/** There is a disc with data on it in the drive. It is usable only for
reading.
Written and closed multi-session media
CD-R, CD-RW, DVD-R, DVD-RW, DVD+R, BD-R
Read-Only media
CD-ROM, DVD-ROM, BD-ROM
Note that many DVD-ROM drives report any written media
as Read-Only media and not by their real media types.
*/
BURN_DISC_FULL,
/* ts A61007 */
@ -204,7 +227,7 @@ enum burn_disc_status
/* ts A61020 */
/* @since 0.2.6 */
/** The media seems not to be suitable for burning */
/** The media seems to be unsuitable for reading and for writing */
BURN_DISC_UNSUITABLE
};
@ -384,6 +407,13 @@ struct burn_source {
The size of a sector depends on BURN_MODE_*. The known range is
2048 to 2352.
If this call is reading from a pipe then it will learn
about the end of data only when that pipe gets closed on the
feeder side. So if the track size is not fixed or if the pipe
delivers less than the predicted amount or if the size is not
block aligned, then burning will halt until the input process
closes the pipe.
IMPORTANT:
If this function pointer is NULL, then the struct burn_source is of
version >= 1 and the job of .(*read)() is done by .(*read_xt)().
@ -813,7 +843,8 @@ void burn_allow_untested_profiles(int yes);
If the path does not exist in the filesystem yet, it is attempted to create
it as a regular file as soon as write operations are started.
The capabilities of role 3 resemble a blank DVD-R.
The capabilities of role 3 resemble a blank DVD-R. Nevertheless each
burn_disc_write() run may only write a single track.
One may distinguish pseudo-drives from MMC drives by call
burn_drive_get_drive_role().
@ -1129,7 +1160,8 @@ off_t burn_disc_available_space(struct burn_drive *d,
0x11 "DVD-R sequential recording", 0x12 "DVD-RAM",
0x13 "DVD-RW restricted overwrite", 0x14 "DVD-RW sequential recording",
0x1a "DVD+RW", 0x1b "DVD+R",
0x2b "DVD+R/DL", 0x43 "BD-RE",
0x2b "DVD+R/DL",
0x41 "BD-R sequential recording", 0x43 "BD-RE",
0xffff "stdio file"
Note: 0xffff is not a MMC profile but a libburn invention.
If enabled by burn_allow_untested_profiles() it also writes to profiles
@ -1137,8 +1169,8 @@ off_t burn_disc_available_space(struct burn_drive *d,
Read-only are the profiles
0x08 "CD-ROM", 0x10 "DVD-ROM",
0x40 "BD-ROM",
For now read-only are BD-R profiles (testers wanted)
0x41 "BD-R sequential recording", 0x42 "BD-R random recording"
For now read-only is BD-R profile (testers wanted)
0x42 "BD-R random recording"
@param d The drive where the media is inserted.
@param pno Profile Number. See also mmc5r03c.pdf, table 89
@param name Profile Name (see above list, unknown profiles have empty name)
@ -1161,8 +1193,8 @@ int burn_disc_erasable(struct burn_drive *d);
enum burn_drive_status burn_drive_get_status(struct burn_drive *drive,
struct burn_progress *p);
/** Creates a write_opts struct for burning to the specified drive
must be freed with burn_write_opts_free
/** Creates a write_opts struct for burning to the specified drive.
The returned object must later be freed with burn_write_opts_free().
@param drive The drive to write with
@return The write_opts, NULL on error
*/
@ -1212,7 +1244,8 @@ void burn_disc_erase(struct burn_drive *drive, int fast);
/** Format media for use with libburn. This currently applies to DVD-RW
in state "Sequential Recording" (profile 0014h) which get formatted to
state "Restricted Overwrite" (profile 0013h). DVD+RW can be "de-iced"
by setting bit2 of flag. Other media cannot be formatted yet.
by setting bit2 of flag. DVD-RAM and BD-RE may get formatted initially
or re-formatted to adjust their Defect Managment.
This function usually returns while the drive is still in the process
of formatting. The formatting is done, when burn_drive_get_status()
returns BURN_DRIVE_IDLE. This may be immediately after return or may
@ -1227,7 +1260,8 @@ void burn_disc_erase(struct burn_drive *drive, int fast);
bit1+2: size mode
0 = use parameter size as far as it makes sense
1 = insist in size 0 even if there is a better default known
(on DVD-RAM or BD-RE identical to size mode 0)
(on DVD-RAM or BD-R identical to size mode 0,
i.e. they never get formatted with payload size 0)
2 = without bit7: format to maximum available size
with bit7 : take size from indexed format descriptor
3 = without bit7: format to default size
@ -1236,13 +1270,16 @@ void burn_disc_erase(struct burn_drive *drive, int fast);
bit4= enforce re-format of (partly) formatted media
bit5= try to disable eventual defect management
bit6= try to avoid lengthy media certification
bit7= MMC expert application mode (else libburn tries to
choose a suitable format type):
bit8 to bit15 contain the index of the format to use. See
burn_disc_get_formats(), burn_disc_get_format_descr().
bit7, bit8 to bit15 =
bit7 enables MMC expert application mode (else libburn
tries to choose a suitable format type):
If it is set then bit8 to bit15 contain the index of
the format to use. See burn_disc_get_formats(),
burn_disc_get_format_descr().
Acceptable types are: 0x00, 0x01, 0x10, 0x11, 0x13,
0x15, 0x26, 0x30, 0x31.
If bit7 is set, bit4 is set automatically.
0x15, 0x26, 0x30, 0x31, 0x32.
If bit7 is set, then bit4 is set automatically.
bit16= enable POW on blank BD-R
@since 0.3.0
*/
void burn_disc_format(struct burn_drive *drive, off_t size, int flag);
@ -2193,8 +2230,8 @@ void burn_version(int *major, int *minor, int *micro);
*/
#define burn_header_version_major 0
#define burn_header_version_minor 5
#define burn_header_version_micro 3
#define burn_header_version_minor 6
#define burn_header_version_micro 0
/** Note:
Above version numbers are also recorded in configure.ac because libtool
wants them as parameters at build time.
@ -2403,6 +2440,21 @@ int burn_random_access_write(struct burn_drive *d, off_t byte_address,
char *data, off_t data_count, int flag);
/* ts A81215 */
/** Inquire the maximum amount of readable data.
It is supposed that all LBAs in the range from 0 to media_read_acpacity-1
can be read via burn_read_data() although some of them may never have been
recorded. If tracks are recognizable then it is better to only read
LBAs which are part of some track.
@param d The drive from which to read
@param capacity Will return the result if valid
@param flag Bitfield for control purposes: Unused yet, submit 0.
@return 1=sucessful , <=0 an error occured
@since 0.6.0
*/
int burn_get_read_capacity(struct burn_drive *d, int *capacity, int flag);
/* ts A70812 */
/** Read data in random access mode.
The drive must be grabbed successfully before calling this function.
@ -2412,7 +2464,7 @@ int burn_random_access_write(struct burn_drive *d, off_t byte_address,
This is a synchronous call which returns only after the full read job
has ended (sucessfully or not). So it is wise not to read giant amounts
of data in a single call.
@param d The drive to which to write
@param d The drive from which to read
@param byte_address The start address of the read in byte (aligned to 2048)
@param data A memory buffer capable of taking data_size bytes
@param data_size The amount of data to be read. This does not have to

View File

@ -1,7 +1,7 @@
/* libdax_msgs
Message handling facility of libdax.
Copyright (C) 2006 - 2008 Thomas Schmitt <scdbackup@gmx.net>,
Copyright (C) 2006 - 2009 Thomas Schmitt <scdbackup@gmx.net>,
provided under GPL version 2
*/

View File

@ -1,7 +1,7 @@
/* libdax_msgs
Message handling facility of libdax.
Copyright (C) 2006-2008 Thomas Schmitt <scdbackup@gmx.net>,
Copyright (C) 2006-2009 Thomas Schmitt <scdbackup@gmx.net>,
provided under GPL version 2
*/
@ -531,6 +531,15 @@ Range "scdbackup" : 0x00020000 to 0x0002ffff
0x0002015c (FAILURE,HIGH) = Fifo size is smaller than desired peek buffer
0x0002015d (FAILURE,HIGH) = Fifo input ended short of desired peek buffer size
0x0002015e (FATAL,HIGH) = Fifo is already under consumption when peeking
0x0002015f (MISHAP,HIGH) = Damaged CD table-of-content detected and truncated
0x00020160 (WARNING,HIGH) = Session without leadout encountered
0x00020161 (WARNING,HIGH) = Empty session deleted
0x00020162 (SORRY,HIGH) = BD-R not unformatted blank any more. Cannot format
0x00020163 (NOTE,HIGH) = Blank BD-R left unformatted for zero spare capacity
0x00020164 (SORRY,HIGH) = Drive does not format BD-RE without spares
0x00020165 (WARNING,HIGH) = Drive does not support fast formatting
0x00020166 (WARNING,HIGH) = Drive does not support full formatting
0x00020167 (SORRY,HIGH) = Drive does not support non-default formatting
libdax_audioxtr:
0x00020200 (SORRY,HIGH) = Cannot open audio source file

View File

@ -58,6 +58,9 @@ extern struct libdax_msgs *libdax_messenger;
/* ts A70509 : handling 0x41 and 0x42 as read-only types */
#define Libburn_support_bd_r_readonlY 1
/* >>> ts A81208 */
#define Libburn_support_bd_plus_r_srM 1
/* ts A80410 : <<< Dangerous experiment: Pretend that DVD-RAM is BD-RE
# define Libburn_dvd_ram_as_bd_rE yes
@ -119,6 +122,8 @@ extern struct libdax_msgs *libdax_messenger;
drive->do_stream_recording it does full nominal speed.
ts A80506 : Giulio Orsero reports success with BD-RE formatting.
BD-RE is now an officially supported profile.
ts A81209 : The first two sessions have been written to BD-R SRM
(auto formatted without Defect Management).
*/
/* ts A70519 : With MMC commands of data direction FROM_DRIVE:
@ -198,6 +203,10 @@ static unsigned char MMC_RESERVE_TRACK[] =
static unsigned char MMC_READ_10[] =
{ 0x28, 0, 0, 0, 0, 0, 0, 0, 0, 0};
/* ts A81210 : Determine the upper limit of readable data size */
static unsigned char MMC_READ_CAPACITY[] =
{ 0x25, 0, 0, 0, 0, 0, 0, 0, 0, 0};
static int mmc_function_spy_do_tell = 0;
@ -1143,8 +1152,9 @@ static int mmc_read_toc_al(struct burn_drive *d, int *alloc_len)
struct buffer buf;
struct command c;
int dlen;
int i, bpl= 12, old_alloc_len;
int i, bpl= 12, old_alloc_len, t_idx;
unsigned char *tdata;
char msg[321];
if (*alloc_len < 4)
return 0;
@ -1220,7 +1230,9 @@ static int mmc_read_toc_al(struct burn_drive *d, int *alloc_len)
ts A61007 : if re-enabled then not via Assert.
a ssert(((dlen - 2) % 11) == 0);
*/
d->toc_entry = calloc(d->toc_entries, sizeof(struct burn_toc_entry));
/* ts A81202: plus number of sessions as reserve for leadout default */
d->toc_entry = calloc(d->toc_entries + (unsigned char) c.page->data[3],
sizeof(struct burn_toc_entry));
if(d->toc_entry == NULL) /* ts A70825 */
return 0;
tdata = c.page->data + 4;
@ -1307,6 +1319,42 @@ static int mmc_read_toc_al(struct burn_drive *d, int *alloc_len)
d->status = BURN_DISC_FULL;
toc_find_modes(d);
/* ts A81202 ticket 146 : a drive reported a session with no leadout */
for (i = 0; i < d->disc->sessions; i++) {
if (d->disc->session[i]->leadout_entry != NULL)
continue;
sprintf(msg, "Session %d of %d encountered without leadout",
i + 1, d->disc->sessions);
libdax_msgs_submit(libdax_messenger, d->global_index,
0x00020160,
LIBDAX_MSGS_SEV_WARNING, LIBDAX_MSGS_PRIO_HIGH,
msg, 0, 0);
/* Produce default leadout entry from last track of session
which will thus get its size set to 0 */;
if (d->disc->session[i]->track != NULL &&
d->disc->session[i]->tracks > 0) {
t_idx = d->toc_entries++;
memcpy(d->toc_entry + t_idx,
d->disc->session[i]->track[
d->disc->session[i]->tracks - 1]->entry,
sizeof(struct burn_toc_entry));
d->toc_entry[t_idx].point = 0xA2;
d->disc->session[i]->leadout_entry =
d->toc_entry + t_idx;
} else {
burn_disc_remove_session(d->disc, d->disc->session[i]);
sprintf(msg,
"Empty session %d deleted. Now %d sessions.",
i + 1, d->disc->sessions);
libdax_msgs_submit(libdax_messenger, d->global_index,
0x00020161,
LIBDAX_MSGS_SEV_WARNING, LIBDAX_MSGS_PRIO_HIGH,
msg, 0, 0);
i--;
}
}
/* A80808 */
burn_disc_cd_toc_extensions(d->disc, 0);
@ -1419,6 +1467,7 @@ static int mmc_read_disc_info_al(struct burn_drive *d, int *alloc_len)
char msg[160];
/* ts A70131 : had to move mmc_read_toc() to end of function */
int do_read_toc = 0, session_state, disc_status, len, old_alloc_len;
int ret;
/* ts A61020 */
d->start_lba = d->end_lba = -2000000000;
@ -1429,6 +1478,9 @@ static int mmc_read_disc_info_al(struct burn_drive *d, int *alloc_len)
d->media_capacity_remaining = 0;
d->media_lba_limit = 0;
/* ts A81210 */
d->media_read_capacity = 0x7fffffff;
/* ts A61202 */
d->toc_entries = 0;
if (d->status == BURN_DISC_EMPTY)
@ -1489,8 +1541,15 @@ static int mmc_read_disc_info_al(struct burn_drive *d, int *alloc_len)
#ifdef Libburn_support_bd_r_readonlY
/* <<< For now: declaring BD-R read-only
*/
if (d->current_profile == 0x41 || d->current_profile == 0x42) {
/* BD-R seq, BD-R rnd */
#ifndef Libburn_support_bd_plus_r_srM
if (d->current_profile == 0x41) {
/* BD-R seq as readonly dummy */
disc_status = 2; /* always full and finalized */
d->erasable = 0; /* never erasable */
}
#endif
if (d->current_profile == 0x42) {
/* BD-R rnd */
disc_status = 2; /* always full and finalized */
d->erasable = 0; /* never erasable */
}
@ -1498,6 +1557,7 @@ static int mmc_read_disc_info_al(struct burn_drive *d, int *alloc_len)
switch (disc_status) {
case 0:
regard_as_blank:;
d->toc_entries = 0;
d->start_lba = burn_msf_to_lba(data[17], data[18], data[19]);
d->end_lba = burn_msf_to_lba(data[21], data[22], data[23]);
@ -1512,28 +1572,25 @@ static int mmc_read_disc_info_al(struct burn_drive *d, int *alloc_len)
break;
case 1:
d->status = BURN_DISC_APPENDABLE;
case 2:
if (disc_status == 2)
d->status = BURN_DISC_FULL;
/* ts A81210 */
ret = mmc_read_capacity(d);
/* Freshly formatted, unwritten BD-R pretend to be appendable
but in our model they need to be regarded as blank.
*/
if (d->current_profile == 0x41 && ret > 0 &&
d->status == BURN_DISC_APPENDABLE &&
d->media_read_capacity == 0)
goto regard_as_blank;
do_read_toc = 1;
break;
}
#ifdef NIX
/* <<< on its way out. DVD-R DL are current_is_supported_profile
unconditionally. Writeability is handled above now.
*/
/* ts A80207 : DVD - R DL can normally be read but not be written */
if(d->current_profile == 0x15 && !d->current_is_supported_profile) {
if(d->status == BURN_DISC_APPENDABLE)
d->status = BURN_DISC_FULL;
d->erasable = 0; /* never erasable */
d->current_is_supported_profile = 1;
}
#endif /* NIX */
if ((d->current_profile != 0 || d->status != BURN_DISC_UNREADY)
&& ! d->current_is_supported_profile) {
if (!d->silent_on_scsi_error) {
@ -2154,6 +2211,8 @@ static int mmc_get_configuration_al(struct burn_drive *d, int *alloc_len)
d->current_is_supported_profile = 0;
d->current_has_feat21h = 0;
d->current_feat21h_link_size = -1;
d->current_feat23h_byte4 = 0;
d->current_feat23h_byte8 = 0;
d->current_feat2fh_byte4 = -1;
scsi_init_command(&c, MMC_GET_CONFIGURATION,
@ -2200,7 +2259,11 @@ static int mmc_get_configuration_al(struct burn_drive *d, int *alloc_len)
d->current_is_supported_profile = 1;
#ifdef Libburn_support_bd_r_readonlY
if (cp == 0x41 || cp == 0x42) /* BD-R sequential, BD-R random */
#ifndef Libburn_support_bd_plus_r_srM
if (cp == 0x41) /* BD-R sequential (here as read-only dummy) */
d->current_is_supported_profile = 1;
#endif
if (cp == 0x42) /* BD-R random recording */
d->current_is_supported_profile = 1;
#endif
@ -2241,6 +2304,10 @@ static int mmc_get_configuration_al(struct burn_drive *d, int *alloc_len)
if (cp == 0x1b || cp == 0x2b) /* DVD+R , DVD+R/DL */
d->current_is_supported_profile = 1;
#endif
#ifdef Libburn_support_bd_plus_r_srM
if (cp == 0x41) /* BD-R SRM */
d->current_is_supported_profile = 1;
#endif
/* Enable this to get loud and repeated reports about the feature set :
#define Libburn_print_feature_descriptorS 1
@ -2307,6 +2374,20 @@ static int mmc_get_configuration_al(struct burn_drive *d, int *alloc_len)
}
} else if (feature_code == 0x23) {
d->current_feat23h_byte4 = descr[4];
d->current_feat23h_byte8 = descr[8];
#ifdef Libburn_print_feature_descriptorS
if (cp >= 0x41 && cp <= 0x43)
fprintf(stderr,
"LIBBURN_EXPERIMENTAL : BD formats: %s%s%s%s%s\n",
descr[4] & 1 ? " Cert" : "",
descr[4] & 2 ? " QCert" : "",
descr[4] & 4 ? " Expand" : "",
descr[4] & 8 ? " RENoSA" : "",
descr[8] & 1 ? " RRM" : "");
#endif /* Libburn_print_feature_descriptorS */
} else if (feature_code == 0x2F) {
if (descr[2] & 1)
d->current_feat2fh_byte4 = descr[4];
@ -2714,6 +2795,7 @@ int mmc_read_buffer_capacity(struct burn_drive *d)
bit6= try to avoid lengthy media certification
bit7= bit8 to bit15 contain the index of the format to use
bit8-bit15 = see bit7
bit16= enable POW on blank BD-R
*/
int mmc_format_unit(struct burn_drive *d, off_t size, int flag)
{
@ -2723,6 +2805,7 @@ int mmc_format_unit(struct burn_drive *d, off_t size, int flag)
int index, format_sub_type = 0, format_00_index, size_mode;
int accept_count = 0;
off_t num_of_blocks = 0, diff, format_size, i_size, format_00_max_size;
off_t min_size = -1, max_size = -1;
char msg[256],descr[80];
int key, asc, ascq;
int full_format_type = 0x00; /* Full Format (or 0x10 for DVD-RW ?) */
@ -3005,6 +3088,116 @@ no_suitable_formatting_type:;
c.opcode[1] |= 0x08;
}
} else if (d->current_profile == 0x41) {
/* BD-R SRM */
index = -1;
format_size = -1;
if (d->num_format_descr <= 0)
goto no_suitable_formatting_type;
if (d->format_descriptors[0].type != 0)
goto no_suitable_formatting_type;
for (i = 0; i < d->num_format_descr; i++) {
format_type = d->format_descriptors[i].type;
i_size = d->format_descriptors[i].size;
if (format_type != 0x00 && format_type != 0x32)
continue;
if (flag & 32) { /* No defect mgt */
/* ts A81211 : MMC-5 6.5.4.2.17.1
When formatted with Format Type 32h,
the BD-R disc is required to allocate
a non-zero number of spares.
*/
goto no_suitable_formatting_type;
} else if(size_mode == 2) { /* max payload size */
/* search largest 0x32 format descriptor */
if(format_type != 0x32)
continue;
} else if(size_mode == 3) { /* default payload size */
if (format_type == 0x00) {
index = i;
break;
}
continue;
} else { /* defect managed format with size wish */
#ifdef Libburn_bd_r_format_olD
/* search for smallest 0x32 >= size */
if(format_type != 0x32)
continue;
if (i_size < size)
continue;
if (format_size >= 0 && i_size >= format_size)
continue;
index = i;
format_size = i_size;
continue;
#else /* Libburn_bd_r_format_olD */
/* search largest and smallest 0x32 */
if(format_type != 0x32)
continue;
if (i_size < min_size || min_size < 0)
min_size = i_size;
if (i_size > max_size)
max_size = i_size;
#endif /* ! Libburn_bd_r_format_olD */
}
/* common for all cases which search largest
descriptors */
if (i_size > format_size) {
format_size = i_size;
index = i;
}
}
if (size_mode == 2 && index < 0 && !(flag & 32))
index = 0;
if (index < 0)
goto no_suitable_formatting_type;
format_type = d->format_descriptors[index].type;
if (flag & (1 << 16))
format_sub_type = 0; /* SRM + POW */
else
format_sub_type = 1; /* SRM (- POW) */
#ifdef Libburn_bd_r_format_olD
if (0) {
#else
if (size_mode == 0 || size_mode == 1) {
#endif /* ! Libburn_bd_r_format_olD */
if (min_size < 0 || max_size < 0)
goto no_suitable_formatting_type;
if (size <= 0)
size = min_size;
if (size % 0x10000)
size += 0x10000 - (size % 0x10000);
if (size < min_size)
goto no_suitable_formatting_type;
else if(size > max_size)
goto no_suitable_formatting_type;
num_of_blocks = size / 2048;
mmc_int_to_four_char(c.page->data + 4, num_of_blocks);
for (i = 0; i < 3; i++)
c.page->data[9 + i] = 0;
} else {
num_of_blocks =
d->format_descriptors[index].size / 2048;
mmc_int_to_four_char(c.page->data + 4, num_of_blocks);
for (i = 0; i < 3; i++)
c.page->data[9 + i] =
( d->format_descriptors[index].tdp >>
(16 - 8 * i)) & 0xff;
}
sprintf(descr, "%s", d->current_profile_text);
return_immediately = 1; /* caller must do the waiting */
c.page->data[1] |= 0x80; /* FOV = this flag vector is valid */
} else if (d->current_profile == 0x43) {
/* BD-RE */
index = -1;
@ -3030,6 +3223,17 @@ no_suitable_formatting_type:;
} else if(size_mode == 3) { /* default payload size */
if (accept_count < 1)
index = 0; /* this cannot certify */
/* ts A81129
LG GGW-H20L YL03 refuses on 0x30 with
"Quick certification". dvd+rw-format
does 0x00 by default and succeeds quickly.
*/
if ((flag & 64) && format_type == 0x00) {
index = i;
break;
}
if(format_type != 0x30)
continue;
accept_count++;
@ -3037,6 +3241,9 @@ no_suitable_formatting_type:;
index = i;
continue;
} else { /* defect managed format with size wish */
#ifdef Libburn_bd_re_format_olD
/* search for smallest 0x30 >= size */
if(format_type != 0x30)
continue;
@ -3047,6 +3254,19 @@ no_suitable_formatting_type:;
index = i;
format_size = i_size;
continue;
#else /* Libburn_bd_re_format_olD */
/* search largest and smallest 0x30 */
if(format_type != 0x30)
continue;
if (i_size < min_size || min_size < 0)
min_size = i_size;
if (i_size > max_size)
max_size = i_size;
#endif /* ! Libburn_bd_re_format_olD */
}
/* common for all cases which search largest
descriptors */
@ -3055,6 +3275,7 @@ no_suitable_formatting_type:;
index = i;
}
}
if (size_mode == 2 && index < 0 && !(flag & 32))
index = 0;
if (index < 0)
@ -3066,12 +3287,36 @@ no_suitable_formatting_type:;
else
format_sub_type = 2; /* Full certification */
}
num_of_blocks = d->format_descriptors[index].size / 2048;
mmc_int_to_four_char(c.page->data + 4, num_of_blocks);
for (i = 0; i < 3; i++)
c.page->data[9 + i] =
( d->format_descriptors[index].tdp >>
(16 - 8 * i)) & 0xff;
#ifdef Libburn_bd_re_format_olD
if (0) {
#else
if (size_mode == 0 || size_mode == 1) {
#endif /* ! Libburn_bd_re_format_olD */
if (min_size < 0 || max_size < 0)
goto no_suitable_formatting_type;
if (size <= 0)
size = min_size;
if (size % 0x10000)
size += 0x10000 - (size % 0x10000);
if (size < min_size)
goto no_suitable_formatting_type;
else if(size > max_size)
goto no_suitable_formatting_type;
num_of_blocks = size / 2048;
mmc_int_to_four_char(c.page->data + 4, num_of_blocks);
for (i = 0; i < 3; i++)
c.page->data[9 + i] = 0;
} else {
num_of_blocks =
d->format_descriptors[index].size / 2048;
mmc_int_to_four_char(c.page->data + 4, num_of_blocks);
for (i = 0; i < 3; i++)
c.page->data[9 + i] =
( d->format_descriptors[index].tdp >>
(16 - 8 * i)) & 0xff;
}
sprintf(descr, "%s", d->current_profile_text);
return_immediately = 1; /* caller must do the waiting */
c.page->data[1] |= 0x80; /* FOV = this flag vector is valid */
@ -3390,8 +3635,9 @@ int mmc_compose_mode_page_5(struct burn_drive *d,
} else if (d->current_profile == 0x1a || d->current_profile == 0x1b ||
d->current_profile == 0x2b || d->current_profile == 0x12 ||
d->current_profile == 0x41 || d->current_profile == 0x42 ||
d->current_profile == 0x43) {
/* not with DVD+R[W][/DL] or DVD-RAM or BD-RE */;
/* not with DVD+R[W][/DL] or DVD-RAM or BD-R[E] */;
return 0;
} else {
/* Traditional setup for CD */
@ -3476,6 +3722,34 @@ int mmc_read_10(struct burn_drive *d, int start,int amount, struct buffer *buf)
}
/* ts A81210 : Determine the upper limit of readable data size */
int mmc_read_capacity(struct burn_drive *d)
{
struct buffer buf;
struct command c;
int alloc_len= 8;
d->media_read_capacity = 0x7fffffff;
if (mmc_function_spy(d, "mmc_read_capacity") <= 0)
return 0;
scsi_init_command(&c, MMC_READ_CAPACITY, sizeof(MMC_READ_CAPACITY));
c.dxfer_len = alloc_len;
c.retry = 1;
c.page = &buf;
c.page->bytes = 0;
c.page->sectors = 0;
c.dir = FROM_DRIVE;
d->issue_command(d, &c);
d->media_read_capacity = mmc_four_char_to_int(c.page->data);
if (d->media_read_capacity < 0) {
d->media_read_capacity = 0x7fffffff;
return 0;
}
return 1;
}
/* ts A61021 : the mmc specific part of sg.c:enumerate_common()
*/
int mmc_setup_drive(struct burn_drive *d)
@ -3517,6 +3791,8 @@ int mmc_setup_drive(struct burn_drive *d)
d->current_is_supported_profile = 0;
d->current_has_feat21h = 0;
d->current_feat21h_link_size = -1;
d->current_feat23h_byte4 = 0;
d->current_feat23h_byte8 = 0;
d->current_feat2fh_byte4 = -1;
d->needs_close_session = 0;
d->needs_sync_cache = 0;
@ -3526,6 +3802,7 @@ int mmc_setup_drive(struct burn_drive *d)
d->last_track_no = 1;
d->media_capacity_remaining = 0;
d->media_lba_limit = 0;
d->media_read_capacity = 0x7fffffff;
d->pessimistic_buffer_free = 0;
d->pbf_altered = 0;
d->wait_for_buffer_free = Libburn_wait_for_buffer_freE;

View File

@ -72,6 +72,8 @@ int mmc_compose_mode_page_5(struct burn_drive *d,
int mmc_read_10(struct burn_drive *d, int start, int amount,
struct buffer *buf);
/* ts A81210 : Determine the upper limit of readable data size */
int mmc_read_capacity(struct burn_drive *d);
/* mmc5r03c.pdf 4.3.4.4.1 d) "The maximum number of RZones is 2 302." */

View File

@ -76,7 +76,7 @@ Send feedback to libburn-hackers@pykix.org .
#include <err.h> /* XXX */
/* ts A70909 : >>> untestet yet wether this compiles */
/* ts A70909 */
#include <sys/statvfs.h>

View File

@ -18,7 +18,7 @@
#include <err.h> /* XXX */
/* ts A70909 : >>> untestet yet wether this compiles */
/* ts A70909 */
#include <sys/statvfs.h>
@ -622,7 +622,6 @@ int burn_os_stdio_capacity(char *path, off_t *bytes)
struct statvfs vfsbuf;
char testpath[4096], *cpt;
long blocks;
int open_mode = O_RDWR, fd, ret;
off_t add_size = 0;
testpath[0] = 0;
@ -642,6 +641,8 @@ int burn_os_stdio_capacity(char *path, off_t *bytes)
#ifdef Libburn_if_this_was_linuX
} else if(S_ISBLK(stbuf.st_mode)) {
int open_mode = O_RDWR, fd, ret;
if(burn_sg_open_o_excl)
open_mode |= O_EXCL;
fd = open(path, open_mode);

View File

@ -1065,6 +1065,14 @@ enum response scsi_error_msg(struct burn_drive *d, unsigned char *sense,
else
sprintf(msg, "Incompatible medium installed");
return FAIL;
case 0x31:
if (*key != 3)
break;
if (*ascq == 0)
sprintf(msg, "Medium unformatted or format corrupted");
else if (*ascq == 1)
sprintf(msg, "Format command failed");
return FAIL;
case 0x3A:
if (*key != 2)
break;
@ -1140,6 +1148,68 @@ enum response scsi_error(struct burn_drive *d, unsigned char *sense,
}
static char *scsi_command_name(unsigned int c, int flag)
{
switch (c) {
case 0x00:
return "TEST UNIT READY";
case 0x03:
return "REQUEST SENSE";
case 0x04:
return "FORMAT UNIT";
case 0x1b:
return "START/STOP UNIT";
case 0x1e:
return "PREVENT/ALLOW MEDIA REMOVAL";
case 0x23:
return "READ FORMAT CAPACITIES";
case 0x28:
return "READ(10)";
case 0x2a:
return "WRITE(10)";
case 0x35:
return "SYNCHRONIZE CACHE";
case 0x43:
return "READ TOC/PMA/ATIP";
case 0x46:
return "GET CONFIGURATION";
case 0x4a:
return "GET EVENT STATUS NOTIFICATION";
case 0x51:
return "READ DISC INFORMATION";
case 0x52:
return "READ TRACK INFORMATION";
case 0x53:
return "RESERVE TRACK";
case 0x54:
return "SEND OPC INFORMATION";
case 0x55:
return "MODE SELECT";
case 0x5a:
return "SEND OPC INFORMATION";
case 0x5b:
return "CLOSE TRACK/SESSION";
case 0x5c:
return "READ BUFFER CAPACITY";
case 0x5d:
return "SEND CUE SHEET";
case 0xa1:
return "BLANK";
case 0xaa:
return "WRITE(12)";
case 0xac:
return "GET PERFORMANCE";
case 0xb6:
return "SET STREAMING";
case 0xbb:
return "SET CD SPEED";
case 0xbe:
return "READ CD";
}
return "(NOT IN COMMAND LIST)";
}
/* ts A61030 - A61115 */
/* @param flag bit0=do report conditions which are considered not an error */
int scsi_notify_error(struct burn_drive *d, struct command *c,
@ -1164,7 +1234,9 @@ int scsi_notify_error(struct burn_drive *d, struct command *c,
return 1;
}
sprintf(msg,"SCSI error condition on command %2.2Xh : ", c->opcode[0]);
sprintf(msg, "SCSI error condition on command %2.2Xh %s: ",
c->opcode[0],
scsi_command_name((unsigned int) c->opcode[0], 0));
#ifdef NIX
if (key>=0)

View File

@ -104,6 +104,30 @@ int burn_disc_add_session(struct burn_disc *d, struct burn_session *s,
return 1;
}
/* ts A81202: this function was in the API but not implemented.
*/
int burn_disc_remove_session(struct burn_disc *d, struct burn_session *s)
{
int i, skip = 0;
if (d->session == NULL)
return 0;
for (i = 0; i < d->sessions; i++) {
if (s == d->session[i]) {
skip++;
continue;
}
d->session[i - skip] = d->session[i];
}
if (!skip)
return 0;
burn_session_free(s);
d->sessions--;
return 1;
}
struct burn_track *burn_track_create(void)
{
struct burn_track *t;
@ -529,14 +553,53 @@ int burn_session_get_hidefirst(struct burn_session *session)
/* ts A80808 : Enhance CD toc to DVD toc */
int burn_disc_cd_toc_extensions(struct burn_disc *d, int flag)
{
int sidx, tidx;
int sidx= 0, tidx= 0;
struct burn_toc_entry *entry, *prev_entry= NULL;
/* ts A81126 : ticket 146 : There was a SIGSEGV in here */
char msg_data[321], *msg;
strcpy(msg_data,
"Damaged CD table-of-content detected and truncated.");
strcat(msg_data, " In burn_disc_cd_toc_extensions: ");
msg = msg_data + strlen(msg_data);
if (d->session == NULL) {
strcpy(msg, "d->session == NULL");
goto failure;
}
for (sidx = 0; sidx < d->sessions; sidx++) {
if (d->session[sidx] == NULL) {
sprintf(msg, "d->session[%d of %d] == NULL",
sidx, d->sessions);
goto failure;
}
if (d->session[sidx]->track == NULL) {
sprintf(msg, "d->session[%d of %d]->track == NULL",
sidx, d->sessions);
goto failure;
}
if (d->session[sidx]->leadout_entry == NULL) {
sprintf(msg,
" Session %d of %d: Leadout entry missing.",
sidx, d->sessions);
goto failure;
}
for (tidx = 0; tidx < d->session[sidx]->tracks + 1; tidx++) {
if (tidx < d->session[sidx]->tracks)
if (tidx < d->session[sidx]->tracks) {
if (d->session[sidx]->track[tidx] == NULL) {
sprintf(msg,
"d->session[%d of %d]->track[%d of %d] == NULL",
sidx, d->sessions, tidx, d->session[sidx]->tracks);
goto failure;
}
entry = d->session[sidx]->track[tidx]->entry;
else
if (entry == NULL) {
sprintf(msg,
"session %d of %d, track %d of %d, entry == NULL",
sidx, d->sessions, tidx,
d->session[sidx]->tracks);
goto failure;
}
} else
entry = d->session[sidx]->leadout_entry;
entry->session_msb = 0;
entry->point_msb = 0;
@ -558,6 +621,11 @@ int burn_disc_cd_toc_extensions(struct burn_disc *d, int flag)
}
}
return 1;
failure:
libdax_msgs_submit(libdax_messenger, -1, 0x0002015f,
LIBDAX_MSGS_SEV_MISHAP, LIBDAX_MSGS_PRIO_HIGH, msg_data, 0, 0);
d->sessions= sidx;
return 0;
}

View File

@ -171,6 +171,19 @@ struct burn_drive
/* Link Size item number 0 from feature 0021h descriptor */
int current_feat21h_link_size;
/* Flags from feature 0023h for formatting BD mmc5r03c.pdf 5.3.13
Byte 4 BD-RE:
bit0= Cert format 30h sub-type 10b
bit1= QCert format 30h sub-type 11b
bit2= Expand format 01h
bit3= RENoSA format 31h
Byte 8 BD-R:
bit0= RRM format 32h sub-type 10b
*/
int current_feat23h_byte4;
int current_feat23h_byte8;
/* Flags from feature 002Fh feature descriptor mmc5r03c.pdf 5.3.25 :
bit1= DVD-RW supported
bit2= Test Write available
@ -235,6 +248,9 @@ struct burn_drive
/* ts A70215 : if > 0 : first lba on media that is too high for write*/
int media_lba_limit;
/* ts A81210 : Upper limit of readable data size,
0x7fffffff = unknown */
int media_read_capacity;
int toc_temp;
struct burn_disc *disc; /* disc structure */

View File

@ -1005,8 +1005,10 @@ int burn_precheck_write(struct burn_write_opts *o, struct burn_disc *disc,
} else if (d->drive_role == 3 ||
d->current_profile == 0x11 || d->current_profile == 0x14 ||
d->current_profile == 0x15 ||
d->current_profile == 0x1b || d->current_profile == 0x2b ) {
/* DVD-R* Sequential , DVD+R[/DL] , sequential stdio "drive" */
d->current_profile == 0x1b || d->current_profile == 0x2b ||
d->current_profile == 0x41) {
/* DVD-R* Sequential , DVD+R[/DL] , BD-R,
sequential stdio "drive" */
if (o->start_byte >= 0)
strcat(reasons, "write start address not supported, ");
} else {
@ -1106,6 +1108,10 @@ int burn_disc_open_track_dvd_plus_r(struct burn_write_opts *o,
if (o->write_type == BURN_WRITE_SAO &&
! burn_track_is_open_ended(s->track[tnum])) {
/* Round track size up to 32 KiB and reserve track */
/* ts A81208 */
/* >>> ??? round to 64 KiB for BD-R ? (It is not mandatory) */
size = ((off_t) burn_track_get_sectors(s->track[tnum]))
* (off_t) 2048;
size = (size + (off_t) 0x7fff) & ~((off_t) 0x7fff);
@ -1200,7 +1206,7 @@ int burn_disc_close_track_dvd_plus_r(struct burn_write_opts *o,
}
/* ts A61218 - A70129 */
/* ts A61218 - A81208 */
int burn_dvd_write_track(struct burn_write_opts *o,
struct burn_session *s, int tnum, int is_last_track)
{
@ -1224,6 +1230,11 @@ int burn_dvd_write_track(struct burn_write_opts *o,
ret = burn_disc_open_track_dvd_plus_r(o, s, tnum);
if (ret <= 0)
goto ex;
} else if (d->current_profile == 0x41) {
/* BD-R SRM */
ret = burn_disc_open_track_dvd_plus_r(o, s, tnum);
if (ret <= 0)
goto ex;
}
sectors = burn_track_get_sectors(t);
@ -1292,6 +1303,12 @@ int burn_dvd_write_track(struct burn_write_opts *o,
is_last_track);
if (ret <= 0)
goto ex;
} else if (d->current_profile == 0x41) {
/* BD-R SRM */
ret = burn_disc_close_track_dvd_plus_r(o, s, tnum,
is_last_track);
if (ret <= 0)
goto ex;
}
ret = 1;
ex:;
@ -1408,6 +1425,8 @@ int burn_dvd_write_session(struct burn_write_opts *o,
}
} else if (d->current_profile == 0x1b || d->current_profile == 0x2b) {
/* DVD+R , DVD+R/DL do each track as an own session */;
} else if (d->current_profile == 0x41) {
/* BD-R SRM do each track as an own session */;
}
return 1;
}
@ -1611,8 +1630,12 @@ int burn_dvd_write_sync(struct burn_write_opts *o,
/* ??? padding needed ??? cowardly doing it for now */
o->obs_pad = 1; /* fill-up track's last 32k buffer */
} else if (d->current_profile == 0x1b || d->current_profile == 0x2b) {
/* DVD+R , DVD+R/DL */
} else if (d->current_profile == 0x1b || d->current_profile == 0x2b ||
d->current_profile == 0x41) {
/* DVD+R , DVD+R/DL , BD-R SRM */
/* >>> ts A81208 : with BD-R set o->obs to 64 kB ? */
t = disc->session[0]->track[0];
o_end = ( burn_track_is_open_ended(t) && !o->fill_up_media );
default_size = burn_track_get_default_size(t);
@ -1627,8 +1650,8 @@ int burn_dvd_write_sync(struct burn_write_opts *o,
}
ret = burn_disc_setup_dvd_plus_r(o, disc);
if (ret <= 0) {
sprintf(msg,
"Write preparation setup failed for DVD+R");
sprintf(msg, "Write preparation setup failed for %s",
d->current_profile == 0x41 ? "BD-R" : "DVD+R");
libdax_msgs_submit(libdax_messenger, d->global_index,
0x00020121,
LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH,

View File

@ -1,6 +1,6 @@
/* test/libburner.c , API illustration of burning data or audio tracks to CD */
/* Copyright (C) 2005 - 2007 Thomas Schmitt <scdbackup@gmx.net> */
/* Copyright (C) 2005 - 2009 Thomas Schmitt <scdbackup@gmx.net> */
/* Provided under GPLv2,see also "License and copyright aspects" at file end */
@ -8,9 +8,9 @@
libburner is a minimal demo application for the library libburn as provided
on http://libburnia-project.org . It can list the available devices, can
blank a CD-RW or DVD-RW, can format DVD-RW and BD-RE, can burn to CD-R,
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.
blank a CD-RW or DVD-RW, can format DVD-RW and BD, can burn to CD-R,
CD-RW, DVD-R, DVD+R, DVD+R/DL, DVD+RW, DVD-RW, DVD-RAM, BD-R, BD-RE.
Not supported yet: DVD-R/DL.
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
@ -29,9 +29,9 @@
With that aquired drive you can blank a CD-RW
libburner_blank_disc()
or you can format a DVD-RW to profile "Restricted Overwrite" (needed once)
or an unused BD-RE to default size
libburner_format_owrt()
With the aquired drive you can burn to CD or DVD
or an unused BD to default size with spare blocks
libburner_format()
With the aquired drive you can burn to CD, DVD, BD
libburner_payload()
When everything is done, main() releases the drive and shuts down libburn:
burn_drive_release();
@ -260,7 +260,8 @@ int libburner_aquire_by_driveno(int *driveno)
}
/** Makes a previously used CD-RW ready for thorough re-usal.
/** Makes a previously used CD-RW or unformatted DVD-RW ready for thorough
re-usal.
To our knowledge it is hardly possible to abort an ongoing blank operation
because after start it is entirely handled by the drive.
@ -322,24 +323,35 @@ int libburner_blank_disc(struct burn_drive *drive, int blank_fast)
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.
Formats unformatted blank BD-R to hold a default amount of spare blocks
for eventual mishaps during writing. If BD-R get written without being
formatted, then they get no such reserve and will burn at full speed.
*/
int libburner_format_owrt(struct burn_drive *drive)
int libburner_format(struct burn_drive *drive)
{
struct burn_progress p;
double percent = 1.0;
int ret, status, num_formats, format_flag= 0;
off_t size = 0;
unsigned dummy;
enum burn_disc_status disc_state;
if (current_profile == 0x13) {
fprintf(stderr, "IDLE: DVD-RW media is already formatted\n");
return 2;
} else if (current_profile == 0x43) {
} else if (current_profile == 0x41 || current_profile == 0x43) {
disc_state = burn_disc_get_status(drive);
if (disc_state != BURN_DISC_BLANK && current_profile == 0x41) {
fprintf(stderr,
"FATAL: BD-R is not blank. Cannot format.\n");
return 0;
}
ret = burn_disc_get_formats(drive, &status, &size, &dummy,
&num_formats);
if (ret > 0 && status == BURN_FORMAT_IS_FORMATTED) {
if (ret > 0 && status != BURN_FORMAT_IS_UNFORMATTED) {
fprintf(stderr,
"IDLE: BD-RE media is already formatted\n");
"IDLE: BD media is already formatted\n");
return 2;
}
size = 0; /* does not really matter */
@ -348,7 +360,7 @@ int libburner_format_owrt(struct burn_drive *drive)
size = 128 * 1024 * 1024;
format_flag = 1; /* write initial 128 MiB */
} else {
fprintf(stderr, "FATAL: Can only format DVD-RW or BD-RE\n");
fprintf(stderr, "FATAL: Can only format DVD-RW or BD\n");
return 0;
}
@ -476,7 +488,7 @@ int libburner_payload(struct burn_drive *drive,
/* Give up local reference to the data burn_source object */
burn_source_free(data_src);
} /* trackno loop end */
} /* trackno loop end */
/* Evaluate drive and media */
disc_state = burn_disc_get_status(drive);
@ -614,7 +626,8 @@ int libburner_setup(int argc, char **argv)
}
strcpy(drive_adr, argv[i]);
}
} else if (!strcmp(argv[i], "--format_overwrite")) {
} else if ((!strcmp(argv[i], "--format_overwrite")) ||
(!strcmp(argv[i], "--format"))) {
do_blank = 101;
} else if (!strcmp(argv[i], "--multi")) {
@ -655,8 +668,7 @@ int libburner_setup(int argc, char **argv)
if (print_help || insuffient_parameters ) {
printf("Usage: %s\n", argv[0]);
printf(" [--drive <address>|<driveno>|\"-\"] [--audio]\n");
printf(" [--blank_fast|--blank_full|--format_overwrite]\n");
printf(" [--try_to_simulate]\n");
printf(" [--blank_fast|--blank_full|--format] [--try_to_simulate]\n");
printf(" [--multi] [<one or more imagefiles>|\"-\"]\n");
printf("Examples\n");
printf("A bus scan (needs rw-permissions to see a drive):\n");
@ -669,8 +681,8 @@ int libburner_setup(int argc, char **argv)
printf(" %s --drive /dev/hdc --blank_fast\n",argv[0]);
printf("Blank a used DVD-RW (is combinable with burning in one run):\n");
printf(" %s --drive /dev/hdc --blank_full\n",argv[0]);
printf("Format a DVD-RW to avoid need for blanking before re-use:\n");
printf(" %s --drive /dev/hdc --format_overwrite\n", argv[0]);
printf("Format a DVD-RW, BD-RE or BD-R:\n");
printf(" %s --drive /dev/hdc --format\n", argv[0]);
printf("Burn two audio tracks (to CD only):\n");
printf(" lame --decode -t /path/to/track1.mp3 track1.cd\n");
printf(" test/dewav /path/to/track2.wav -o track2.cd\n");
@ -720,7 +732,7 @@ int main(int argc, char **argv)
{ ret = 0; goto release_drive; }
if (do_blank) {
if (do_blank > 100)
ret = libburner_format_owrt(drive_list[driveno].drive);
ret = libburner_format(drive_list[driveno].drive);
else
ret = libburner_blank_disc(drive_list[driveno].drive,
do_blank == 1);