Compare commits
21 Commits
ZeroSixZer
...
ZeroSixTwo
Author | SHA1 | Date | |
---|---|---|---|
eaf9048cd3 | |||
7e06575993 | |||
f9053bcfb3 | |||
350ac05bfd | |||
5f55a436e8 | |||
3baaa886be | |||
d4147e72f0 | |||
116798e081 | |||
7cc43c44e9 | |||
de0b3dd469 | |||
596d5bc5b0 | |||
867093d7d4 | |||
47dd4d8c09 | |||
01a825310e | |||
96043eddf5 | |||
5a65d6fa07 | |||
aca01b88f3 | |||
6d667880e5 | |||
1a667c86bc | |||
7c64d4bc13 | |||
6fea3d0a9b |
20
Makefile.am
20
Makefile.am
@ -82,32 +82,34 @@ noinst_PROGRAMS = \
|
|||||||
bin_PROGRAMS = \
|
bin_PROGRAMS = \
|
||||||
cdrskin/cdrskin
|
cdrskin/cdrskin
|
||||||
|
|
||||||
|
LIBBURN_EXTRALIBS = $(LIBBURN_ARCH_LIBS) $(THREAD_LIBS)
|
||||||
|
|
||||||
test_libburner_CPPFLAGS = -Ilibburn
|
test_libburner_CPPFLAGS = -Ilibburn
|
||||||
test_libburner_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
|
test_libburner_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
|
||||||
test_libburner_SOURCES = test/libburner.c
|
test_libburner_SOURCES = test/libburner.c
|
||||||
test_telltoc_CPPFLAGS = -Ilibburn
|
test_telltoc_CPPFLAGS = -Ilibburn
|
||||||
test_telltoc_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
|
test_telltoc_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
|
||||||
test_telltoc_SOURCES = test/telltoc.c
|
test_telltoc_SOURCES = test/telltoc.c
|
||||||
test_dewav_CPPFLAGS = -Ilibburn
|
test_dewav_CPPFLAGS = -Ilibburn
|
||||||
test_dewav_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
|
test_dewav_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
|
||||||
test_dewav_SOURCES = test/dewav.c
|
test_dewav_SOURCES = test/dewav.c
|
||||||
test_fake_au_CPPFLAGS =
|
test_fake_au_CPPFLAGS =
|
||||||
test_fake_au_LDADD =
|
test_fake_au_LDADD =
|
||||||
test_fake_au_SOURCES = test/fake_au.c
|
test_fake_au_SOURCES = test/fake_au.c
|
||||||
test_poll_CPPFLAGS = -Ilibburn
|
test_poll_CPPFLAGS = -Ilibburn
|
||||||
test_poll_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
|
test_poll_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
|
||||||
test_poll_SOURCES = test/poll.c
|
test_poll_SOURCES = test/poll.c
|
||||||
test_structest_CPPFLAGS = -Ilibburn
|
test_structest_CPPFLAGS = -Ilibburn
|
||||||
test_structest_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
|
test_structest_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
|
||||||
test_structest_SOURCES = test/structest.c
|
test_structest_SOURCES = test/structest.c
|
||||||
|
|
||||||
## cdrskin construction site - ts A60816 - A90102
|
## cdrskin construction site - ts A60816 - A90220
|
||||||
cdrskin_cdrskin_CPPFLAGS = -Ilibburn
|
cdrskin_cdrskin_CPPFLAGS = -Ilibburn
|
||||||
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_6_0
|
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_6_2
|
||||||
|
|
||||||
# cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
|
# cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
|
||||||
# ts A80123, change proposed by Simon Huggins to cause dynamic libburn linking
|
# ts A80123, change proposed by Simon Huggins to cause dynamic libburn linking
|
||||||
cdrskin_cdrskin_LDADD = libburn/libburn.la $(THREAD_LIBS)
|
cdrskin_cdrskin_LDADD = libburn/libburn.la $(LIBBURN_EXTRALIBS)
|
||||||
|
|
||||||
cdrskin_cdrskin_SOURCES = cdrskin/cdrskin.c cdrskin/cdrfifo.c cdrskin/cdrfifo.h cdrskin/cdrskin_timestamp.h
|
cdrskin_cdrskin_SOURCES = cdrskin/cdrskin.c cdrskin/cdrfifo.c cdrskin/cdrfifo.h cdrskin/cdrskin_timestamp.h
|
||||||
##
|
##
|
||||||
|
31
README
31
README
@ -11,7 +11,7 @@ Still containing parts of Libburn. By Derek Foreman <derek@signalmarketing.com>
|
|||||||
and Ben Jansens <xor@orodu.net>
|
and Ben Jansens <xor@orodu.net>
|
||||||
Copyright (C) 2002-2006 Derek Foreman and Ben Jansens
|
Copyright (C) 2002-2006 Derek Foreman and Ben Jansens
|
||||||
|
|
||||||
http://files.libburnia-project.org/releases/libburn-0.6.0.pl01.tar.gz
|
http://files.libburnia-project.org/releases/libburn-0.6.2.pl00.tar.gz
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -19,10 +19,10 @@ Copyright (C) 2002-2006 Derek Foreman and Ben Jansens
|
|||||||
|
|
||||||
From tarball
|
From tarball
|
||||||
|
|
||||||
Obtain libburn-0.6.0.pl01.tar.gz, take it to a directory of your choice and do:
|
Obtain libburn-0.6.2.pl00.tar.gz, take it to a directory of your choice and do:
|
||||||
|
|
||||||
tar xzf libburn-0.6.0.pl01.tar.gz
|
tar xzf libburn-0.6.2.pl00.tar.gz
|
||||||
cd libburn-0.6.0
|
cd libburn-0.6.2
|
||||||
./configure --prefix=/usr
|
./configure --prefix=/usr
|
||||||
make
|
make
|
||||||
|
|
||||||
@ -35,6 +35,11 @@ and to install the cdrecord compatibility binary cdrskin, do
|
|||||||
This procedure installs libburn.so.4 and cdrskin depending on it.
|
This procedure installs libburn.so.4 and cdrskin depending on it.
|
||||||
For a standalone cdrskin binary, see cdrskin/README.
|
For a standalone cdrskin binary, see cdrskin/README.
|
||||||
|
|
||||||
|
A behavioral conflict is known between any burn software and demons like hald
|
||||||
|
which probe CD drives. This can spoil burn runs for CD-R or CD-RW.
|
||||||
|
You may have to keep your hald away from the drive. See for example
|
||||||
|
http://www.freebsd.org/gnome/docs/halfaq.html
|
||||||
|
|
||||||
|
|
||||||
From SVN
|
From SVN
|
||||||
|
|
||||||
@ -42,8 +47,8 @@ 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.
|
snapshot you will need autotools of at least version 1.7.
|
||||||
Do in a directory of your choice:
|
Do in a directory of your choice:
|
||||||
|
|
||||||
svn co http://svn.libburnia-project.org/libburn/trunk libburn-0.5.9
|
svn co http://svn.libburnia-project.org/libburn/trunk libburn-0.6.3
|
||||||
cd libburn-0.5.9
|
cd libburn-0.6.3
|
||||||
./bootstrap
|
./bootstrap
|
||||||
./configure --prefix=/usr
|
./configure --prefix=/usr
|
||||||
make
|
make
|
||||||
@ -153,6 +158,13 @@ libburn.so.4 (since 0.3.4, March 2007),
|
|||||||
libisofs.so.6 (since 0.6.2, February 2008),
|
libisofs.so.6 (since 0.6.2, February 2008),
|
||||||
libisoburn.so.1 (since 0.1.0, February 2008).
|
libisoburn.so.1 (since 0.1.0, February 2008).
|
||||||
|
|
||||||
|
Applications must use 64 bit off_t. E.g. by defining
|
||||||
|
#define _LARGEFILE_SOURCE
|
||||||
|
#define _FILE_OFFSET_BITS 64
|
||||||
|
or take special precautions to interface with the libraries by 64 bit integers
|
||||||
|
where the .h files prescribe off_t. Not to use 64 bit file i/o will keep the
|
||||||
|
application from producing and processing ISO images of more than 2 GB size.
|
||||||
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
Project history as far as known to me:
|
Project history as far as known to me:
|
||||||
@ -351,6 +363,13 @@ Project history as far as known to me:
|
|||||||
- 2nd Jan 2009 libburn-0.6.0 allows to format BD-R and to write to either
|
- 2nd Jan 2009 libburn-0.6.0 allows to format BD-R and to write to either
|
||||||
formatted or unformatted BD-R.
|
formatted or unformatted BD-R.
|
||||||
|
|
||||||
|
- 6th Jan 2009 libisoburn-0.3.2 can produce and execute commands for mounting
|
||||||
|
older sessions from all kinds of media. Pseudo-drives outside the /dev/ tree
|
||||||
|
can be addressed without prefix "stdio:".
|
||||||
|
|
||||||
|
- 20th Feb 2009 libburn-0.6.2 source release now compiles out of the box
|
||||||
|
on FreeBSD.
|
||||||
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
cdrskin. By Thomas Schmitt <scdbackup@gmx.net>
|
cdrskin. By Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Integrated sub project of libburnia-project.org but also published via:
|
Integrated sub project of libburnia-project.org but also published via:
|
||||||
http://scdbackup.sourceforge.net/cdrskin_eng.html
|
http://scdbackup.sourceforge.net/cdrskin_eng.html
|
||||||
http://scdbackup.sourceforge.net/cdrskin-0.6.0.pl01.tar.gz
|
http://scdbackup.sourceforge.net/cdrskin-0.6.2.pl00.tar.gz
|
||||||
Copyright (C) 2006-2009 Thomas Schmitt, provided under GPL version 2.
|
Copyright (C) 2006-2009 Thomas Schmitt, provided under GPL version 2.
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -21,10 +21,10 @@ By using this software you agree to the disclaimer at the end of this text
|
|||||||
|
|
||||||
Compilation, First Glimpse, Installation
|
Compilation, First Glimpse, Installation
|
||||||
|
|
||||||
Obtain cdrskin-0.6.0.pl01.tar.gz, take it to a directory of your choice and do:
|
Obtain cdrskin-0.6.2.pl00.tar.gz, take it to a directory of your choice and do:
|
||||||
|
|
||||||
tar xzf cdrskin-0.6.0.pl01.tar.gz
|
tar xzf cdrskin-0.6.2.pl00.tar.gz
|
||||||
cd cdrskin-0.6.0
|
cd cdrskin-0.6.2
|
||||||
|
|
||||||
Within that directory execute:
|
Within that directory execute:
|
||||||
|
|
||||||
@ -119,6 +119,11 @@ as listed device files. This addressing via e.g. /dev/sr0 or /dev/scd1 is
|
|||||||
compatible with generic read programs like dd and with write program growisofs.
|
compatible with generic read programs like dd and with write program growisofs.
|
||||||
For finding /dev/sg1 from /dev/sr0, the program needs rw-access to both files.
|
For finding /dev/sg1 from /dev/sr0, the program needs rw-access to both files.
|
||||||
|
|
||||||
|
A behavioral conflict is known between any burn software and demons like hald
|
||||||
|
which probe CD drives. This can spoil burn runs for CD-R or CD-RW.
|
||||||
|
You may have to keep your hald away from the drive. See for example
|
||||||
|
http://www.freebsd.org/gnome/docs/halfaq.html
|
||||||
|
|
||||||
|
|
||||||
Usage examples
|
Usage examples
|
||||||
|
|
||||||
@ -418,7 +423,7 @@ are the cause. Any mistake of the burn program is supposed to be caught
|
|||||||
by the drive's firmware and to lead to mere misburns.
|
by the drive's firmware and to lead to mere misburns.
|
||||||
The worst mishaps which hit the author imposed the need to reboot the
|
The worst mishaps which hit the author imposed the need to reboot the
|
||||||
system because of drives gnawing endlessly on ill media. Permanent hardware
|
system because of drives gnawing endlessly on ill media. Permanent hardware
|
||||||
damage did not occur in 2.5 years of development. But one never knows ...
|
damage did not occur in 3.5 years of development. But one never knows ...
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ original="./libburn_svn_release.tgz"
|
|||||||
# My changes are in $changes , mainly in $changes/cdrskin
|
# My changes are in $changes , mainly in $changes/cdrskin
|
||||||
changes="./libburn-release"
|
changes="./libburn-release"
|
||||||
|
|
||||||
skin_release="0.6.0"
|
skin_release="0.6.2"
|
||||||
patch_level=".pl00"
|
patch_level=".pl00"
|
||||||
skin_rev="$skin_release""$patch_level"
|
skin_rev="$skin_release""$patch_level"
|
||||||
|
|
@ -38,7 +38,7 @@ original="./libburn_svn.tgz"
|
|||||||
# My changes are in $changes , mainly in $changes/cdrskin
|
# My changes are in $changes , mainly in $changes/cdrskin
|
||||||
changes="./libburn-develop"
|
changes="./libburn-develop"
|
||||||
|
|
||||||
skin_release="0.6.1"
|
skin_release="0.6.3"
|
||||||
patch_level=""
|
patch_level=""
|
||||||
skin_rev="$skin_release""$patch_level"
|
skin_rev="$skin_release""$patch_level"
|
||||||
|
|
@ -2,7 +2,7 @@
|
|||||||
.\" First parameter, NAME, should be all caps
|
.\" First parameter, NAME, should be all caps
|
||||||
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
||||||
.\" other parameters are allowed: see man(7), man(1)
|
.\" other parameters are allowed: see man(7), man(1)
|
||||||
.TH CDRSKIN 1 "Dec 10, 2008"
|
.TH CDRSKIN 1 "Jan 07, 2009"
|
||||||
.\" Please adjust this date whenever revising the manpage.
|
.\" Please adjust this date whenever revising the manpage.
|
||||||
.\"
|
.\"
|
||||||
.\" Some roff macros, for reference:
|
.\" Some roff macros, for reference:
|
||||||
@ -167,9 +167,10 @@ needed.
|
|||||||
.B Sequentially Recordable DVD or BD Media:
|
.B Sequentially Recordable DVD or BD Media:
|
||||||
.br
|
.br
|
||||||
Currently DVD-RW, DVD-R , DVD+R[/DL], and BD-R can be used for the Sequential
|
Currently DVD-RW, DVD-R , DVD+R[/DL], and BD-R can be used for the Sequential
|
||||||
recording model.
|
recording model. It resembles the model of CD media. Only DVD-RW can be
|
||||||
|
blanked and re-used from scratch.
|
||||||
.br
|
.br
|
||||||
This applies to DVD-RW only if they are in state "Sequential Recording".
|
DVD-RW are sequential media if they are in state "Sequential Recording".
|
||||||
The media must be either blank or appendable.
|
The media must be either blank or appendable.
|
||||||
Newly purchased DVD-RW and DVD-R media are in this state.
|
Newly purchased DVD-RW and DVD-R media are in this state.
|
||||||
Used DVD-RW get into blank sequential state by option
|
Used DVD-RW get into blank sequential state by option
|
||||||
|
@ -88,7 +88,7 @@ or
|
|||||||
|
|
||||||
/** The official program version */
|
/** The official program version */
|
||||||
#ifndef Cdrskin_prog_versioN
|
#ifndef Cdrskin_prog_versioN
|
||||||
#define Cdrskin_prog_versioN "0.6.0"
|
#define Cdrskin_prog_versioN "0.6.2"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** The official libburn interface revision to use.
|
/** The official libburn interface revision to use.
|
||||||
@ -101,7 +101,7 @@ or
|
|||||||
#define Cdrskin_libburn_minoR 6
|
#define Cdrskin_libburn_minoR 6
|
||||||
#endif
|
#endif
|
||||||
#ifndef Cdrskin_libburn_micrO
|
#ifndef Cdrskin_libburn_micrO
|
||||||
#define Cdrskin_libburn_micrO 0
|
#define Cdrskin_libburn_micrO 2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -135,44 +135,44 @@ or
|
|||||||
#endif /* Cdrskin_libburn_cvs_A60220_tS */
|
#endif /* Cdrskin_libburn_cvs_A60220_tS */
|
||||||
|
|
||||||
|
|
||||||
#ifdef Cdrskin_libburn_0_6_0
|
#ifdef Cdrskin_libburn_0_6_2
|
||||||
#define Cdrskin_libburn_versioN "0.6.0"
|
#define Cdrskin_libburn_versioN "0.6.2"
|
||||||
#define Cdrskin_libburn_from_pykix_svN 1
|
#define Cdrskin_libburn_from_pykix_svN 1
|
||||||
#endif /* Cdrskin_libburn_0_6_0 */
|
#endif /* Cdrskin_libburn_0_6_2 */
|
||||||
|
|
||||||
#ifdef Cdrskin_libburn_0_6_1
|
#ifdef Cdrskin_libburn_0_6_3
|
||||||
#define Cdrskin_libburn_versioN "0.6.1"
|
#define Cdrskin_libburn_versioN "0.6.3"
|
||||||
#define Cdrskin_libburn_from_pykix_svN 1
|
#define Cdrskin_libburn_from_pykix_svN 1
|
||||||
|
|
||||||
/* Place novelty switch macros here.
|
/* Place novelty switch macros here.
|
||||||
Move them down to Cdrskin_libburn_from_pykix_svN on version leap
|
Move them down to Cdrskin_libburn_from_pykix_svN on version leap
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* there are no libburn novelties in 0.6.1 yet */
|
/* there are no libburn novelties in 0.6.3 yet */
|
||||||
|
|
||||||
#endif /* Cdrskin_libburn_0_6_1 */
|
#endif /* Cdrskin_libburn_0_6_3 */
|
||||||
|
|
||||||
#ifndef Cdrskin_libburn_versioN
|
#ifndef Cdrskin_libburn_versioN
|
||||||
#define Cdrskin_libburn_0_6_0
|
#define Cdrskin_libburn_0_6_2
|
||||||
#define Cdrskin_libburn_versioN "0.6.0"
|
#define Cdrskin_libburn_versioN "0.6.2"
|
||||||
#define Cdrskin_libburn_from_pykix_svN 1
|
#define Cdrskin_libburn_from_pykix_svN 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef Cdrskin_libburn_0_6_0
|
#ifdef Cdrskin_libburn_0_6_2
|
||||||
#undef Cdrskin_libburn_majoR
|
#undef Cdrskin_libburn_majoR
|
||||||
#undef Cdrskin_libburn_minoR
|
#undef Cdrskin_libburn_minoR
|
||||||
#undef Cdrskin_libburn_micrO
|
#undef Cdrskin_libburn_micrO
|
||||||
#define Cdrskin_libburn_majoR 0
|
#define Cdrskin_libburn_majoR 0
|
||||||
#define Cdrskin_libburn_minoR 6
|
#define Cdrskin_libburn_minoR 6
|
||||||
#define Cdrskin_libburn_micrO 0
|
#define Cdrskin_libburn_micrO 2
|
||||||
#endif
|
#endif
|
||||||
#ifdef Cdrskin_libburn_0_6_1
|
#ifdef Cdrskin_libburn_0_6_3
|
||||||
#undef Cdrskin_libburn_majoR
|
#undef Cdrskin_libburn_majoR
|
||||||
#undef Cdrskin_libburn_minoR
|
#undef Cdrskin_libburn_minoR
|
||||||
#undef Cdrskin_libburn_micrO
|
#undef Cdrskin_libburn_micrO
|
||||||
#define Cdrskin_libburn_majoR 0
|
#define Cdrskin_libburn_majoR 0
|
||||||
#define Cdrskin_libburn_minoR 6
|
#define Cdrskin_libburn_minoR 6
|
||||||
#define Cdrskin_libburn_micrO 1
|
#define Cdrskin_libburn_micrO 3
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -251,7 +251,7 @@ or
|
|||||||
/* 0.4.8 */
|
/* 0.4.8 */
|
||||||
/* Bug fix release for write_start_address=... on DVD-RAM and BD-RE */
|
/* Bug fix release for write_start_address=... on DVD-RAM and BD-RE */
|
||||||
|
|
||||||
/* 0.5.0 , 0.5.2 , 0.5.4 , 0.5.6 , 0.5.8 , 0.6.0 */
|
/* 0.5.0 , 0.5.2 , 0.5.4 , 0.5.6 , 0.5.8 , 0.6.0 , 0.6.2 */
|
||||||
/* novel libburn features are transparent to cdrskin */
|
/* novel libburn features are transparent to cdrskin */
|
||||||
|
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ and to MMC-5 for DVD or BD).
|
|||||||
GPL software included:<BR>
|
GPL software included:<BR>
|
||||||
</H2>
|
</H2>
|
||||||
<DL>
|
<DL>
|
||||||
<DT>libburn-0.6.0</DT>
|
<DT>libburn-0.6.2</DT>
|
||||||
<DD>(founded by Derek Foreman and Ben Jansens,
|
<DD>(founded by Derek Foreman and Ben Jansens,
|
||||||
developed and maintained since August 2006 by
|
developed and maintained since August 2006 by
|
||||||
Thomas Schmitt from team of libburnia-project.org)
|
Thomas Schmitt from team of libburnia-project.org)
|
||||||
@ -191,8 +191,8 @@ or to do experiments on BD-R media.
|
|||||||
<P>
|
<P>
|
||||||
<DL>
|
<DL>
|
||||||
<DT>Download as source code (see README):</DT>
|
<DT>Download as source code (see README):</DT>
|
||||||
<DD><A HREF="cdrskin-0.6.0.pl01.tar.gz">cdrskin-0.6.0.pl01.tar.gz</A>
|
<DD><A HREF="cdrskin-0.6.2.pl00.tar.gz">cdrskin-0.6.2.pl00.tar.gz</A>
|
||||||
(745 KB).
|
(750 KB).
|
||||||
</DD>
|
</DD>
|
||||||
<DD>
|
<DD>
|
||||||
The cdrskin tarballs are source code identical with libburn releases
|
The cdrskin tarballs are source code identical with libburn releases
|
||||||
@ -241,36 +241,28 @@ cdrskin_0.4.2.pl00-x86-suse9_0-static.tar.gz</A>, (310 KB), -static compiled,
|
|||||||
<HR>
|
<HR>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
Enhancements towards previous stable version cdrskin-0.5.8.pl00:
|
Enhancements towards previous stable version cdrskin-0.6.0.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>Formatting and writing of BD-R media</LI>
|
<LI>Improvements with build system for FreeBSD</LI>
|
||||||
<!--
|
<!--
|
||||||
<LI>none</LI>
|
<LI>none</LI>
|
||||||
-->
|
-->
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
Bug fixes towards cdrskin-0.5.8.pl00:
|
|
||||||
<UL>
|
|
||||||
<LI>none</LI>
|
|
||||||
<!--
|
|
||||||
-->
|
|
||||||
</UL>
|
|
||||||
|
|
||||||
Bug fixes towards cdrskin-0.6.0.pl00:
|
Bug fixes towards cdrskin-0.6.0.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>BD-R media were not closed properly.
|
<LI>BD-R media were not closed properly.
|
||||||
The last session staid open and unreadable.</LI>
|
The last session staid open and unreadable.</LI>
|
||||||
<!--
|
<!--
|
||||||
|
<LI>none</LI>
|
||||||
-->
|
-->
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
</P>
|
|
||||||
|
|
||||||
<HR>
|
<HR>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
<DL>
|
<DL>
|
||||||
<DT><H3>Development snapshot, version 0.6.1 :</H3></DT>
|
<DT><H3>Development snapshot, version 0.6.3 :</H3></DT>
|
||||||
<DD>Enhancements towards current stable version 0.6.0.pl00:
|
<DD>Enhancements towards current stable version 0.6.0.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>none yet</LI>
|
<LI>none yet</LI>
|
||||||
@ -280,10 +272,10 @@ Bug fixes towards cdrskin-0.6.0.pl00:
|
|||||||
</UL>
|
</UL>
|
||||||
</DD>
|
</DD>
|
||||||
<DD> </DD>
|
<DD> </DD>
|
||||||
<DD><A HREF="README_cdrskin_devel">README 0.6.1</A>
|
<DD><A HREF="README_cdrskin_devel">README 0.6.3</A>
|
||||||
<DD><A HREF="cdrskin__help_devel">cdrskin_0.6.1 --help</A></DD>
|
<DD><A HREF="cdrskin__help_devel">cdrskin_0.6.3 --help</A></DD>
|
||||||
<DD><A HREF="cdrskin_help_devel">cdrskin_0.6.1 -help</A></DD>
|
<DD><A HREF="cdrskin_help_devel">cdrskin_0.6.3 -help</A></DD>
|
||||||
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.6.1)</A></DD>
|
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.6.3)</A></DD>
|
||||||
<DD> </DD>
|
<DD> </DD>
|
||||||
<DT>Maintainers of cdrskin unstable packages please use SVN of
|
<DT>Maintainers of cdrskin unstable packages please use SVN of
|
||||||
<A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT>
|
<A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT>
|
||||||
@ -303,8 +295,8 @@ admins with full system souvereignty.</DT>
|
|||||||
<A HREF="README_cdrskin_devel">upcoming README</A> ):
|
<A HREF="README_cdrskin_devel">upcoming README</A> ):
|
||||||
</DD>
|
</DD>
|
||||||
<DD>
|
<DD>
|
||||||
<A HREF="cdrskin-0.6.1.tar.gz">cdrskin-0.6.1.tar.gz</A>
|
<A HREF="cdrskin-0.6.3.tar.gz">cdrskin-0.6.3.tar.gz</A>
|
||||||
(740 KB).
|
(750 KB).
|
||||||
</DD>
|
</DD>
|
||||||
|
|
||||||
<!-- This is not offered any more since spring 2008
|
<!-- This is not offered any more since spring 2008
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Cdrskin_timestamP "2009.01.07.140001"
|
#define Cdrskin_timestamP "2009.02.20.090001"
|
||||||
|
@ -6217,7 +6217,7 @@ libburn/libdax_msgs.h
|
|||||||
test/libburner.c
|
test/libburner.c
|
||||||
Updated copyright claims to year 2009
|
Updated copyright claims to year 2009
|
||||||
|
|
||||||
2009.01.02.160001 [i2348]
|
2009.01.02.160001 [2348]
|
||||||
Makefile.am
|
Makefile.am
|
||||||
configure.ac
|
configure.ac
|
||||||
README
|
README
|
||||||
@ -6236,7 +6236,7 @@ Made number transition to 0.6.0
|
|||||||
+ cdrskin/add_ts_changes_to_libburn_0_6_1
|
+ cdrskin/add_ts_changes_to_libburn_0_6_1
|
||||||
Updated cdrskin tarball generator
|
Updated cdrskin tarball generator
|
||||||
|
|
||||||
[]
|
02 Jan 2009 [2350]
|
||||||
cdrskin/changelog.txt
|
cdrskin/changelog.txt
|
||||||
Documented changes and release timestamp
|
Documented changes and release timestamp
|
||||||
|
|
||||||
@ -6244,10 +6244,46 @@ Documented changes and release timestamp
|
|||||||
* Formatting and writing of BD-R media
|
* Formatting and writing of BD-R media
|
||||||
* New API function burn_get_read_capacity()
|
* New API function burn_get_read_capacity()
|
||||||
|
|
||||||
|
03 Jan 2009 []
|
||||||
|
COPYRIGHT
|
||||||
|
libburn/libdax_msgs.c
|
||||||
|
libburn/libdax_msgs.h
|
||||||
|
test/libburner.c
|
||||||
|
Updated copyright claims to year 2009
|
||||||
|
|
||||||
|
[]
|
||||||
|
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
|
||||||
|
|
||||||
|
03 Jan 2009 []
|
||||||
|
- 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
|
||||||
|
|
||||||
|
03 Jan 2009 []
|
||||||
|
cdrskin/changelog.txt
|
||||||
|
Documented changes and release timestamp
|
||||||
|
|
||||||
|
|
||||||
------------------------------------ cycle - cdrskin-0.6.1 -
|
------------------------------------ cycle - cdrskin-0.6.1 -
|
||||||
------------------------------------ cycle - cdrskin-0.6.1 -
|
------------------------------------ cycle - cdrskin-0.6.1 -
|
||||||
|
|
||||||
|
|
||||||
|
[]
|
||||||
|
libburn/spc.c
|
||||||
|
Error texts for ASC 73 : power calibration and program memory
|
||||||
|
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
TODO
|
TODO
|
||||||
===============================================================================
|
===============================================================================
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
debug_opts="-O2"
|
debug_opts="-O2"
|
||||||
def_opts=
|
def_opts=
|
||||||
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
|
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
|
||||||
libvers="-DCdrskin_libburn_0_6_0"
|
libvers="-DCdrskin_libburn_0_6_2"
|
||||||
cleanup_src_or_obj="libburn/cleanup.o"
|
cleanup_src_or_obj="libburn/cleanup.o"
|
||||||
libdax_msgs_o="libburn/libdax_msgs.o"
|
libdax_msgs_o="libburn/libdax_msgs.o"
|
||||||
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
||||||
@ -33,15 +33,15 @@ do
|
|||||||
libdax_audioxtr_o=
|
libdax_audioxtr_o=
|
||||||
libdax_msgs_o="libburn/message.o"
|
libdax_msgs_o="libburn/message.o"
|
||||||
cleanup_src_or_obj="-DCleanup_has_no_libburn_os_H cdrskin/cleanup.c"
|
cleanup_src_or_obj="-DCleanup_has_no_libburn_os_H cdrskin/cleanup.c"
|
||||||
elif test "$i" = "-libburn_0_6_0"
|
elif test "$i" = "-libburn_0_6_2"
|
||||||
then
|
then
|
||||||
libvers="-DCdrskin_libburn_0_6_0"
|
libvers="-DCdrskin_libburn_0_6_2"
|
||||||
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
||||||
libdax_msgs_o="libburn/libdax_msgs.o"
|
libdax_msgs_o="libburn/libdax_msgs.o"
|
||||||
cleanup_src_or_obj="libburn/cleanup.o"
|
cleanup_src_or_obj="libburn/cleanup.o"
|
||||||
elif test "$i" = "-libburn_svn"
|
elif test "$i" = "-libburn_svn"
|
||||||
then
|
then
|
||||||
libvers="-DCdrskin_libburn_0_6_1"
|
libvers="-DCdrskin_libburn_0_6_3"
|
||||||
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
||||||
libdax_msgs_o="libburn/libdax_msgs.o"
|
libdax_msgs_o="libburn/libdax_msgs.o"
|
||||||
cleanup_src_or_obj="libburn/cleanup.o"
|
cleanup_src_or_obj="libburn/cleanup.o"
|
||||||
@ -76,7 +76,7 @@ do
|
|||||||
echo " -compile_cdrfifo compile program cdrskin/cdrfifo."
|
echo " -compile_cdrfifo compile program cdrskin/cdrfifo."
|
||||||
echo " -compile_dewav compile program test/dewav without libburn."
|
echo " -compile_dewav compile program test/dewav without libburn."
|
||||||
echo " -cvs_A60220 set macro to match libburn-CVS of 20 Feb 2006."
|
echo " -cvs_A60220 set macro to match libburn-CVS of 20 Feb 2006."
|
||||||
echo " -libburn_0_6_0 set macro to match libburn-0.6.0"
|
echo " -libburn_0_6_2 set macro to match libburn-0.6.2"
|
||||||
echo " -libburn_svn set macro to match current libburn-SVN."
|
echo " -libburn_svn set macro to match current libburn-SVN."
|
||||||
echo " -no_largefile do not use 64 bit off_t (must match libburn)."
|
echo " -no_largefile do not use 64 bit off_t (must match libburn)."
|
||||||
echo " -do_not_compile_cdrskin omit compilation of cdrskin/cdrskin."
|
echo " -do_not_compile_cdrskin omit compilation of cdrskin/cdrskin."
|
||||||
|
15
configure.ac
15
configure.ac
@ -1,4 +1,4 @@
|
|||||||
AC_INIT([libburn], [0.6.0], [http://libburnia-project.org])
|
AC_INIT([libburn], [0.6.2], [http://libburnia-project.org])
|
||||||
AC_PREREQ([2.50])
|
AC_PREREQ([2.50])
|
||||||
dnl AC_CONFIG_HEADER([config.h])
|
dnl AC_CONFIG_HEADER([config.h])
|
||||||
|
|
||||||
@ -68,6 +68,7 @@ dnl 0.5.4 = libburn.so.4.19.0
|
|||||||
dnl 0.5.6 = libburn.so.4.21.0
|
dnl 0.5.6 = libburn.so.4.21.0
|
||||||
dnl 0.5.8 = libburn.so.4.23.0
|
dnl 0.5.8 = libburn.so.4.23.0
|
||||||
dnl 0.6.0 = libburn.so.4.25.0
|
dnl 0.6.0 = libburn.so.4.25.0
|
||||||
|
dnl 0.6.2 = libburn.so.4.27.0
|
||||||
dnl
|
dnl
|
||||||
dnl So LT_CURRENT, LT_REVISION and LT_AGE get set directly here.
|
dnl So LT_CURRENT, LT_REVISION and LT_AGE get set directly here.
|
||||||
dnl SONAME of the emerging library is LT_CURRENT - LT_AGE.
|
dnl SONAME of the emerging library is LT_CURRENT - LT_AGE.
|
||||||
@ -93,7 +94,7 @@ dnl
|
|||||||
dnl As said: Only copies. Original in libburn/libburn.h : burn_header_version_*
|
dnl As said: Only copies. Original in libburn/libburn.h : burn_header_version_*
|
||||||
BURN_MAJOR_VERSION=0
|
BURN_MAJOR_VERSION=0
|
||||||
BURN_MINOR_VERSION=6
|
BURN_MINOR_VERSION=6
|
||||||
BURN_MICRO_VERSION=0
|
BURN_MICRO_VERSION=2
|
||||||
BURN_VERSION=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
|
BURN_VERSION=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
|
||||||
|
|
||||||
AC_SUBST(BURN_MAJOR_VERSION)
|
AC_SUBST(BURN_MAJOR_VERSION)
|
||||||
@ -104,15 +105,15 @@ AC_SUBST(BURN_VERSION)
|
|||||||
dnl Libtool versioning
|
dnl Libtool versioning
|
||||||
LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
|
LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
|
||||||
dnl
|
dnl
|
||||||
dnl ts A90102
|
dnl ts A90220
|
||||||
dnl This is the release version libburn-0.6.0 = libburn.so.4.25.0
|
dnl This is the release version libburn-0.6.2 = libburn.so.4.27.0
|
||||||
dnl ### This is the development version after above release version
|
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 not yet happened.
|
||||||
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
|
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
|
||||||
dnl
|
dnl
|
||||||
dnl SONAME = 29 - 25 = 4 . Library name = libburn.so.4.25.0
|
dnl SONAME = 31 - 27 = 4 . Library name = libburn.so.4.27.0
|
||||||
LT_CURRENT=29
|
LT_CURRENT=31
|
||||||
LT_AGE=25
|
LT_AGE=27
|
||||||
LT_REVISION=0
|
LT_REVISION=0
|
||||||
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
||||||
|
|
||||||
|
141
doc/cookbook.txt
141
doc/cookbook.txt
@ -1,4 +1,4 @@
|
|||||||
libburnia-project.org Optical Media Rotisserie Recipes as of April 2008
|
libburnia-project.org Optical Media Rotisserie Recipes as of January 2009
|
||||||
|
|
||||||
Content:
|
Content:
|
||||||
- TAO Multi-Session CD Cookbook (CD-R, CD-RW)
|
- TAO Multi-Session CD Cookbook (CD-R, CD-RW)
|
||||||
@ -6,6 +6,7 @@ Content:
|
|||||||
- Overwriteable DVD Cookbook (DVD-RAM, DVD+RW, DVD-RW, BD-RE)
|
- Overwriteable DVD Cookbook (DVD-RAM, DVD+RW, DVD-RW, BD-RE)
|
||||||
- Sequential DVD-R[W] Cookbook
|
- Sequential DVD-R[W] Cookbook
|
||||||
- DVD+R[/DL] Cookbook
|
- DVD+R[/DL] Cookbook
|
||||||
|
- BD-R Cookbook
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
TAO Multi-Session CD Cookbook
|
TAO Multi-Session CD Cookbook
|
||||||
@ -404,7 +405,7 @@ correctness of Pre-gap and Post-gap would become evident.
|
|||||||
Inspired by Andy Polyakov's http://fy.chalmers.se/~appro/linux/DVD+RW/tools ,
|
Inspired by Andy Polyakov's http://fy.chalmers.se/~appro/linux/DVD+RW/tools ,
|
||||||
backed by reading mmc5r03c.pdf from http://www.t10.org/ftp/t10/drafts/mmc5/
|
backed by reading mmc5r03c.pdf from http://www.t10.org/ftp/t10/drafts/mmc5/
|
||||||
by own experiments with drives NEC ND-4570A, LG GSA-4082B, PHILIPS SPD3300L,
|
by own experiments with drives NEC ND-4570A, LG GSA-4082B, PHILIPS SPD3300L,
|
||||||
and by BD-RE experiments done by Giulio Orsero on LG BE06LU10.
|
LG GGW H20L, and by BD-RE experiments done by Giulio Orsero on LG BE06LU10.
|
||||||
|
|
||||||
For libburnia-project.org by Thomas Schmitt <scdbackup@gmx.net>
|
For libburnia-project.org by Thomas Schmitt <scdbackup@gmx.net>
|
||||||
|
|
||||||
@ -697,9 +698,14 @@ managment. There is no way to increase payload capacity by format 01h.
|
|||||||
(mmc5r03c.pdf 6.5.4.2.2.1)
|
(mmc5r03c.pdf 6.5.4.2.2.1)
|
||||||
|
|
||||||
With BD-RE there are three format types : 00h, 30h and 31h.
|
With BD-RE there are three format types : 00h, 30h and 31h.
|
||||||
00h offers the default size format.
|
00h offers the default size format. This may be the only fast formatting
|
||||||
|
mode that is offered by the drive.
|
||||||
|
Feature 0023h tells whether format 31h and certain 30h subtypes are available.
|
||||||
|
(mmc5r03c.pdf 5.3.13)
|
||||||
30h offers several sizes with defect management. Usually there are three
|
30h offers several sizes with defect management. Usually there are three
|
||||||
size to choose: #1: default size, #2: maximum spare area, #3: minimal spare.
|
sizes given: #1: default size, #2: maximum spare area, #3: minimal spare.
|
||||||
|
One may demand any spare size between maximum and minimum. There may be quick
|
||||||
|
certification and full certification. See feature 0023h.
|
||||||
31h offers a single size and disables defect management. This has the side
|
31h offers a single size and disables defect management. This has the side
|
||||||
effect to speed up writing to nominal speed.
|
effect to speed up writing to nominal speed.
|
||||||
(mmc5r03c.pdf 6.5.4.2.15, 6.24.3.3, Table 472)
|
(mmc5r03c.pdf 6.5.4.2.15, 6.24.3.3, Table 472)
|
||||||
@ -738,7 +744,7 @@ DVD-RAM and BD-RE tuning :
|
|||||||
|
|
||||||
A special aspect of DVD-RAM and BD-RE is their low speed with write operations,
|
A special aspect of DVD-RAM and BD-RE is their low speed with write operations,
|
||||||
which usually is only half than the nominal speed of media and drive.
|
which usually is only half than the nominal speed of media and drive.
|
||||||
This is blamed to the automatic checkreading which happens ifor managing
|
This is blamed to the automatic checkreading which happens for managing
|
||||||
eventual defects.
|
eventual defects.
|
||||||
|
|
||||||
Defect management of BD-RE can be disabled by format type 31h. See above.
|
Defect management of BD-RE can be disabled by format type 31h. See above.
|
||||||
@ -749,7 +755,7 @@ The only known way to get full speed from DVD-RAM or BD-RE with enabled defect
|
|||||||
management is the use of AAh WRITE12 with Streaming Bit set to 1.
|
management is the use of AAh WRITE12 with Streaming Bit set to 1.
|
||||||
(mmc5r03c.pdf 6.45)
|
(mmc5r03c.pdf 6.45)
|
||||||
With some DVD-RAM drives this fails if a write buffer is not full 32 kB.
|
With some DVD-RAM drives this fails if a write buffer is not full 32 kB.
|
||||||
With the tested BD-RE ione has to write write full 64 kB buffers.
|
With the tested BD-RE one has to write full 64 kB buffers.
|
||||||
|
|
||||||
Although it seems not optimal, this is specified not only to disable the
|
Although it seems not optimal, this is specified not only to disable the
|
||||||
cumbersome checkread but also to ignore known defects and to write data
|
cumbersome checkread but also to ignore known defects and to write data
|
||||||
@ -760,10 +766,10 @@ incorrectable errors.
|
|||||||
|
|
||||||
Caveat:
|
Caveat:
|
||||||
MMC-5 does not guarantee AAh WRITE12 to work on DVD-RAM or BD-RE at all.
|
MMC-5 does not guarantee AAh WRITE12 to work on DVD-RAM or BD-RE at all.
|
||||||
None of the features of profiles 0012h and 0043 promises the existence of
|
None of the features of profiles 0012h and 0043h promises the existence of
|
||||||
AAh WRITE12.
|
AAh WRITE12.
|
||||||
Nevertheless it worked on all tested drives is proper alignment was observed.
|
|
||||||
(mmc5r03c.pdf 5.4.13, 6.45)
|
(mmc5r03c.pdf 5.4.13, 6.45)
|
||||||
|
Nevertheless it worked on all tested drives if proper alignment was observed.
|
||||||
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
@ -790,9 +796,9 @@ The bytes 0 to 5 of a PVD block are
|
|||||||
0x01 'C' 'D' '0' '0' '1'
|
0x01 'C' 'D' '0' '0' '1'
|
||||||
The sector count can then be read from byte 80 to 83
|
The sector count can then be read from byte 80 to 83
|
||||||
sectors= pvd[80] | (pvd[81] << 8) | (pvd[82] << 16) | (pvd[83] << 24);
|
sectors= pvd[80] | (pvd[81] << 8) | (pvd[82] << 16) | (pvd[83] << 24);
|
||||||
|
(Ecma-119.pdf 8.4)
|
||||||
To support CD, DVD and BD media alike, it is advisable to round the NWA
|
To support CD, DVD and BD media alike, it is advisable to round the NWA
|
||||||
to the next multiple of 32 (= 64 KiB).
|
to the next multiple of 32 (= 64 KiB).
|
||||||
(Ecma-119.pdf 8.4)
|
|
||||||
|
|
||||||
So one can use 0 as MSC1 and prepare a new ISO session for the computed NWA.
|
So one can use 0 as MSC1 and prepare a new ISO session for the computed NWA.
|
||||||
After writing the session it is necessary to patch the PVD at LBA 16.
|
After writing the session it is necessary to patch the PVD at LBA 16.
|
||||||
@ -801,7 +807,7 @@ It is stored in both notations LSB and MSB:
|
|||||||
for(i= 0; i < 4; i++)
|
for(i= 0; i < 4; i++)
|
||||||
pvd[87 - i]= pvd[80 + i]= (sectors >> (8 * i)) & 0xff;
|
pvd[87 - i]= pvd[80 + i]= (sectors >> (8 * i)) & 0xff;
|
||||||
|
|
||||||
cdrskin --grow_overwriteable not only patches the sector fields of the
|
cdrskin --grow_overwriteable_iso not only patches the sector fields of the
|
||||||
PVD block but also the blocks up to LBA 31 which begin with
|
PVD block but also the blocks up to LBA 31 which begin with
|
||||||
0xff 'C' 'D' '0' '0' '1'
|
0xff 'C' 'D' '0' '0' '1'
|
||||||
libisoburn submits 64 KiB data buffer to libisofs before image generation and
|
libisoburn submits 64 KiB data buffer to libisofs before image generation and
|
||||||
@ -1273,3 +1279,118 @@ in http://libburnia-project.org/ticket/13 .
|
|||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
BD-R Cookbook
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
Inspired by reading mmc5r03c.pdf from http://www.t10.org/ftp/t10/drafts/mmc5/
|
||||||
|
backed by experiments iwith drive LG GGW H20L.
|
||||||
|
|
||||||
|
For libburnia-project.org by Thomas Schmitt <scdbackup@gmx.net>
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
Media type can be recognized by Current Profile from 46h GET CONFIGURATION.
|
||||||
|
(mmc5r03c.pdf 6.6.2.1)
|
||||||
|
BD-R 0042h
|
||||||
|
|
||||||
|
There are two basic recording modes defined: Sequential Recording Mode SRM and
|
||||||
|
Random Recording Mode RRM. The latter is optional and for now not topic of this
|
||||||
|
text.
|
||||||
|
(mmc5r03c.pdf 4.5.3.5)
|
||||||
|
|
||||||
|
|
||||||
|
- SRM Formatting
|
||||||
|
- Writing a session in SRM-POW
|
||||||
|
(- Pseudo-OverWrite SRM+POW)
|
||||||
|
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
SRM Formatting:
|
||||||
|
|
||||||
|
Despite being write-once media BD-R can optionally carry some formatting.
|
||||||
|
|
||||||
|
SRM has a disc structure model with tracks and sessions.
|
||||||
|
Several tracks may be open at the same time, each having its own NWA.
|
||||||
|
(mmc5r03c.pdf 4.5.3.5.2.2)
|
||||||
|
This structure is formatted onto blank media automatically as soon as the
|
||||||
|
first serious write attempt occurs.
|
||||||
|
(mmc5r03c.pdf 4.5.3.5)
|
||||||
|
Before such a write attempt, blank media may be explicitely formatted with
|
||||||
|
spares, which provide defect management.
|
||||||
|
(mmc5r03c.pdf 4.5.3.5.3)
|
||||||
|
Tracks get created from other tracks via RESERVE TRACK splitting.
|
||||||
|
(mmc5r03c.pdf 4.5.3.5.2.5)
|
||||||
|
|
||||||
|
On top of defect management there may be Pseudo-OverWrite SRM+POW, a costly
|
||||||
|
way to write several times to the same LBA. See below.
|
||||||
|
Fully sequential states are called SRM-POW.
|
||||||
|
(mmc5r03c.pdf 4.5.3.5.4)
|
||||||
|
|
||||||
|
Explicite formatting is done by 04h FORMAT UNIT. Its data payload consists
|
||||||
|
of a Format List Header and a Format Descriptor. It is advisable to set
|
||||||
|
the Immed bit and the FOV bit in header byte number 1. The descriptor should
|
||||||
|
be a copy of a descriptor from 23h READ FORMAT CAPACITIES but the size may be
|
||||||
|
adjusted within a certain range.
|
||||||
|
(mmc5r03c.pdf 6.5, 6.5.3.2, 6.5.3.3)
|
||||||
|
|
||||||
|
Format type 00h creates SRM layouts with a default number of spares (or
|
||||||
|
eventually RRM) chosen by the format sub-type:
|
||||||
|
00b = SRM with support for POW
|
||||||
|
01b = SRM without POW (but with some spares for defect management)
|
||||||
|
10b = (RRM)
|
||||||
|
(mmc5r03c.pdf 6.5.4.2.1.6)
|
||||||
|
|
||||||
|
Format type 32h uses the same sub-types but allows to allocate non-default
|
||||||
|
amounts of spares. Similar to BD-RE format 31h, three format descriptors are
|
||||||
|
offered: #1: default size, #2: maximum spare area, #3: minimal spare.
|
||||||
|
The size may be chosen within that range.
|
||||||
|
|
||||||
|
The sense behind the Type Dependent Parameters is obscure
|
||||||
|
to me. Best will be to set ISA_V and TDMA_V to 0.
|
||||||
|
(mmc5r03c.pdf 6.5.4.2.1.17)
|
||||||
|
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
Writing a session in SRM:
|
||||||
|
|
||||||
|
The procedure and constraints for writing BD-R SRM-POW are very similar to
|
||||||
|
DVD+R. libburn flatly re-uses its DVD+R code except the Close Function for
|
||||||
|
finalizing a disc.
|
||||||
|
|
||||||
|
In short:
|
||||||
|
If all written sessions are closed, then there is exactly one NWA.
|
||||||
|
In the beginning there is an empty session and track. A new track can be
|
||||||
|
written either with pre-announced size (by RESERVE TRACK) or open-end by
|
||||||
|
simply starting to write to the NWA. When done the track gets closed by
|
||||||
|
close function 001b. Then either session or disc gets closed depending on
|
||||||
|
the Close Function used:
|
||||||
|
- Close Function 010b closes the session and keeps the media appendable
|
||||||
|
(same as with DVD+R)
|
||||||
|
- Close Function 110b finalizes the media and makes it read-only.
|
||||||
|
(differs from libburn DVD+R procedure which uses 101b)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
Pseudo-OverWrite POW: (no used yet by libburn)
|
||||||
|
|
||||||
|
This enhancement of SRM emulates overwriting of existing data blocks.
|
||||||
|
(mmc5r03c.pdf 4.5.3.5.4)
|
||||||
|
|
||||||
|
POW establishes a virtual vLBA space on top of the real address space rLBA.
|
||||||
|
All read and write commands deal with vLBA. It seems that track NWAs are
|
||||||
|
assumed to be identical in vLBA space and in rLBA space.
|
||||||
|
It is not clear whether one may write to vLBA blocks which are neither written
|
||||||
|
yet nor at one of the track NWAs. Probably not, or else one could make NWAs run
|
||||||
|
into vLBAs which are associated with older rLBAs.
|
||||||
|
|
||||||
|
Replacing invalidated blocks consumes addresses in rLBA space at the NWA of
|
||||||
|
some track. I.e. no spares are consumed by POW. Nevertheless it is costly by
|
||||||
|
a special map called Orphanage. It covers rLBA which have been consumed
|
||||||
|
by differing vLBAs. It never shrinks and can grow with each write to remapped
|
||||||
|
addresses.
|
||||||
|
To avoid heavy Orphanage growth it is advised to write mostly to vLBA which
|
||||||
|
still coincide with their rLBA. E.g. those addresses which have neither been
|
||||||
|
written as rLBA nor as vLBA yet. So one should begin the vLBA of new sessions
|
||||||
|
at the NWA of a sufficiently sized track.
|
||||||
|
(mmc5r03c.pdf 4.5.3.5.4.2 , 4.5.3.6.9)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -527,12 +527,15 @@ void burn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
|
|||||||
{
|
{
|
||||||
struct write_opts o;
|
struct write_opts o;
|
||||||
char reasons[BURN_REASONS_LEN+80];
|
char reasons[BURN_REASONS_LEN+80];
|
||||||
|
struct burn_drive *d;
|
||||||
|
|
||||||
|
d = opts->drive;
|
||||||
|
|
||||||
/* ts A61006 */
|
/* ts A61006 */
|
||||||
/* a ssert(!SCAN_GOING()); */
|
/* a ssert(!SCAN_GOING()); */
|
||||||
/* a ssert(!find_worker(opts->drive)); */
|
/* a ssert(!find_worker(opts->drive)); */
|
||||||
if ((SCAN_GOING()) || find_worker(opts->drive) != NULL) {
|
if ((SCAN_GOING()) || find_worker(opts->drive) != NULL) {
|
||||||
libdax_msgs_submit(libdax_messenger, opts->drive->global_index,
|
libdax_msgs_submit(libdax_messenger, d->global_index,
|
||||||
0x00020102,
|
0x00020102,
|
||||||
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
"A drive operation is still going on (want to write)",
|
"A drive operation is still going on (want to write)",
|
||||||
@ -541,14 +544,14 @@ void burn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* For the next lines any return indicates failure */
|
/* For the next lines any return indicates failure */
|
||||||
opts->drive->cancel = 1;
|
d->cancel = 1;
|
||||||
|
|
||||||
/* ts A70203 : people have been warned in API specs */
|
/* ts A70203 : people have been warned in API specs */
|
||||||
if (opts->write_type == BURN_WRITE_NONE)
|
if (opts->write_type == BURN_WRITE_NONE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (opts->drive->drive_role == 0) {
|
if (d->drive_role == 0) {
|
||||||
libdax_msgs_submit(libdax_messenger, opts->drive->global_index,
|
libdax_msgs_submit(libdax_messenger, d->global_index,
|
||||||
0x00020146,
|
0x00020146,
|
||||||
LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH,
|
LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
"Drive is a virtual placeholder (null-drive)", 0, 0);
|
"Drive is a virtual placeholder (null-drive)", 0, 0);
|
||||||
@ -556,9 +559,9 @@ void burn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ts A61007 : obsolete Assert in spc_select_write_params() */
|
/* ts A61007 : obsolete Assert in spc_select_write_params() */
|
||||||
if (opts->drive->drive_role == 1 && !opts->drive->mdata->valid) {
|
if (d->drive_role == 1 && !d->mdata->valid) {
|
||||||
libdax_msgs_submit(libdax_messenger,
|
libdax_msgs_submit(libdax_messenger,
|
||||||
opts->drive->global_index, 0x00020113,
|
d->global_index, 0x00020113,
|
||||||
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
"Drive capabilities not inquired yet", 0, 0);
|
"Drive capabilities not inquired yet", 0, 0);
|
||||||
return;
|
return;
|
||||||
@ -571,21 +574,33 @@ void burn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
|
|||||||
if (burn_precheck_write(opts, disc, reasons + strlen(reasons), 1)
|
if (burn_precheck_write(opts, disc, reasons + strlen(reasons), 1)
|
||||||
<= 0) {
|
<= 0) {
|
||||||
libdax_msgs_submit(libdax_messenger,
|
libdax_msgs_submit(libdax_messenger,
|
||||||
opts->drive->global_index, 0x00020139,
|
d->global_index, 0x00020139,
|
||||||
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
reasons, 0, 0);
|
reasons, 0, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
opts->drive->cancel = 0; /* End of the return = failure area */
|
/* ts A90106 : early catching of unformatted BD-RE */
|
||||||
|
if (d->current_profile == 0x43)
|
||||||
|
if (d->read_format_capacities(d, 0x00) > 0 &&
|
||||||
|
d->format_descr_type != BURN_FORMAT_IS_FORMATTED) {
|
||||||
|
libdax_msgs_submit(libdax_messenger,
|
||||||
|
d->global_index, 0x00020168,
|
||||||
|
LIBDAX_MSGS_SEV_FAILURE, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
|
"Media not properly formatted. Cannot write.",
|
||||||
|
0, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
o.drive = opts->drive;
|
d->cancel = 0; /* End of the return = failure area */
|
||||||
|
|
||||||
|
o.drive = d;
|
||||||
o.opts = opts;
|
o.opts = opts;
|
||||||
o.disc = disc;
|
o.disc = disc;
|
||||||
|
|
||||||
opts->refcount++;
|
opts->refcount++;
|
||||||
|
|
||||||
add_worker(Burnworker_type_writE, opts->drive,
|
add_worker(Burnworker_type_writE, d,
|
||||||
(WorkerFunc) write_disc_worker_func, &o);
|
(WorkerFunc) write_disc_worker_func, &o);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,11 +3,15 @@
|
|||||||
#ifndef LIBBURN_H
|
#ifndef LIBBURN_H
|
||||||
#define LIBBURN_H
|
#define LIBBURN_H
|
||||||
|
|
||||||
/* Needed for off_t which is the (POSIX-ly) appropriate type for
|
/*
|
||||||
expressing a file or stream size.
|
|
||||||
|
Applications must use 64 bit off_t. E.g. by defining
|
||||||
|
#define _LARGEFILE_SOURCE
|
||||||
|
#define _FILE_OFFSET_BITS 64
|
||||||
|
or take special precautions to interface with the library by 64 bit integers
|
||||||
|
where this .h files prescribe off_t. Not to use 64 bit file i/o will keep the
|
||||||
|
application from producing and processing ISO images of more than 2 GB size.
|
||||||
|
|
||||||
XXX we should enforce 64-bitness for off_t
|
|
||||||
ts A61101 : this is usually done by the build system (if it is not broken)
|
|
||||||
*/
|
*/
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
@ -2231,7 +2235,7 @@ void burn_version(int *major, int *minor, int *micro);
|
|||||||
*/
|
*/
|
||||||
#define burn_header_version_major 0
|
#define burn_header_version_major 0
|
||||||
#define burn_header_version_minor 6
|
#define burn_header_version_minor 6
|
||||||
#define burn_header_version_micro 0
|
#define burn_header_version_micro 2
|
||||||
/** Note:
|
/** Note:
|
||||||
Above version numbers are also recorded in configure.ac because libtool
|
Above version numbers are also recorded in configure.ac because libtool
|
||||||
wants them as parameters at build time.
|
wants them as parameters at build time.
|
||||||
|
@ -540,6 +540,10 @@ Range "scdbackup" : 0x00020000 to 0x0002ffff
|
|||||||
0x00020165 (WARNING,HIGH) = Drive does not support fast formatting
|
0x00020165 (WARNING,HIGH) = Drive does not support fast formatting
|
||||||
0x00020166 (WARNING,HIGH) = Drive does not support full formatting
|
0x00020166 (WARNING,HIGH) = Drive does not support full formatting
|
||||||
0x00020167 (SORRY,HIGH) = Drive does not support non-default formatting
|
0x00020167 (SORRY,HIGH) = Drive does not support non-default formatting
|
||||||
|
0x00020168 (FAILURE,HIGH) = Media not properly formatted. Cannot write.
|
||||||
|
0x00020169 (WARNING,HIGH) = Last session on media is still open
|
||||||
|
0x00020170 (NOTE,HIGH) = Closing open session before writing new one
|
||||||
|
0x00020171 (NOTE,HIGH) = Closing BD-R with accidently open session
|
||||||
|
|
||||||
libdax_audioxtr:
|
libdax_audioxtr:
|
||||||
0x00020200 (SORRY,HIGH) = Cannot open audio source file
|
0x00020200 (SORRY,HIGH) = Cannot open audio source file
|
||||||
|
@ -1466,8 +1466,8 @@ static int mmc_read_disc_info_al(struct burn_drive *d, int *alloc_len)
|
|||||||
struct command c;
|
struct command c;
|
||||||
char msg[160];
|
char msg[160];
|
||||||
/* ts A70131 : had to move mmc_read_toc() to end of function */
|
/* 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 do_read_toc = 0, disc_status, len, old_alloc_len;
|
||||||
int ret;
|
int ret, number_of_sessions = -1;
|
||||||
|
|
||||||
/* ts A61020 */
|
/* ts A61020 */
|
||||||
d->start_lba = d->end_lba = -2000000000;
|
d->start_lba = d->end_lba = -2000000000;
|
||||||
@ -1526,6 +1526,9 @@ static int mmc_read_disc_info_al(struct burn_drive *d, int *alloc_len)
|
|||||||
d->erasable = !!(data[2] & 16);
|
d->erasable = !!(data[2] & 16);
|
||||||
|
|
||||||
disc_status = data[2] & 3;
|
disc_status = data[2] & 3;
|
||||||
|
d->state_of_last_session = (data[2] >> 2) & 3;
|
||||||
|
number_of_sessions = (data[9] << 8) | data[4];
|
||||||
|
|
||||||
if (d->current_profile == 0x10 || d->current_profile == 0x40) {
|
if (d->current_profile == 0x10 || d->current_profile == 0x40) {
|
||||||
/* DVD-ROM , BD-ROM */
|
/* DVD-ROM , BD-ROM */
|
||||||
disc_status = 2; /* always full and finalized */
|
disc_status = 2; /* always full and finalized */
|
||||||
@ -1581,12 +1584,27 @@ regard_as_blank:;
|
|||||||
ret = mmc_read_capacity(d);
|
ret = mmc_read_capacity(d);
|
||||||
/* Freshly formatted, unwritten BD-R pretend to be appendable
|
/* Freshly formatted, unwritten BD-R pretend to be appendable
|
||||||
but in our model they need to be regarded as blank.
|
but in our model they need to be regarded as blank.
|
||||||
|
Criterion: BD-R seq, read capacity known and 0,
|
||||||
|
declared appendable, single empty session
|
||||||
*/
|
*/
|
||||||
if (d->current_profile == 0x41 && ret > 0 &&
|
if (d->current_profile == 0x41 &&
|
||||||
d->status == BURN_DISC_APPENDABLE &&
|
d->status == BURN_DISC_APPENDABLE &&
|
||||||
d->media_read_capacity == 0)
|
ret > 0 && d->media_read_capacity == 0 &&
|
||||||
|
d->state_of_last_session == 0 && number_of_sessions == 1)
|
||||||
goto regard_as_blank;
|
goto regard_as_blank;
|
||||||
|
|
||||||
|
if (d->current_profile == 0x41 &&
|
||||||
|
d->status == BURN_DISC_APPENDABLE &&
|
||||||
|
d->state_of_last_session == 1) {
|
||||||
|
|
||||||
|
/* ??? apply this test to other media types ? */
|
||||||
|
|
||||||
|
libdax_msgs_submit(libdax_messenger, d->global_index,
|
||||||
|
0x00020169,
|
||||||
|
LIBDAX_MSGS_SEV_WARNING, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
|
"Last session on media is still open.", 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
do_read_toc = 1;
|
do_read_toc = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1634,10 +1652,9 @@ regard_as_blank:;
|
|||||||
d->complete_sessions = 0;
|
d->complete_sessions = 0;
|
||||||
} else {
|
} else {
|
||||||
/* ts A70131 : number of non-empty sessions */
|
/* ts A70131 : number of non-empty sessions */
|
||||||
d->complete_sessions = (data[9] << 8) | data[4];
|
d->complete_sessions = number_of_sessions;
|
||||||
session_state = (data[2] >> 2) & 3;
|
|
||||||
/* mmc5r03c.pdf 6.22.3.1.3 State of Last Session: 3=complete */
|
/* mmc5r03c.pdf 6.22.3.1.3 State of Last Session: 3=complete */
|
||||||
if (session_state != 3 && d->complete_sessions >= 1)
|
if (d->state_of_last_session != 3 && d->complete_sessions >= 1)
|
||||||
d->complete_sessions--;
|
d->complete_sessions--;
|
||||||
|
|
||||||
/* ts A70129 : mmc5r03c.pdf 6.22.3.1.7
|
/* ts A70129 : mmc5r03c.pdf 6.22.3.1.7
|
||||||
@ -2852,7 +2869,8 @@ selected_not_suitable:;
|
|||||||
d->current_profile == 0x14 ||
|
d->current_profile == 0x14 ||
|
||||||
d->current_profile == 0x1a ||
|
d->current_profile == 0x1a ||
|
||||||
d->current_profile == 0x12 ||
|
d->current_profile == 0x12 ||
|
||||||
d->current_profile == 0x43))
|
d->current_profile == 0x41 ||
|
||||||
|
d->current_profile == 0x43))
|
||||||
goto unsuitable_media;
|
goto unsuitable_media;
|
||||||
|
|
||||||
format_type = d->format_descriptors[index].type;
|
format_type = d->format_descriptors[index].type;
|
||||||
@ -2860,7 +2878,8 @@ selected_not_suitable:;
|
|||||||
format_type == 0x10 ||
|
format_type == 0x10 ||
|
||||||
format_type == 0x11 || format_type == 0x13 ||
|
format_type == 0x11 || format_type == 0x13 ||
|
||||||
format_type == 0x15 || format_type == 0x26 ||
|
format_type == 0x15 || format_type == 0x26 ||
|
||||||
format_type == 0x30 || format_type == 0x31 ))
|
format_type == 0x30 || format_type == 0x31 ||
|
||||||
|
format_type == 0x32))
|
||||||
goto selected_not_suitable;
|
goto selected_not_suitable;
|
||||||
if (flag & 4) {
|
if (flag & 4) {
|
||||||
num_of_blocks =
|
num_of_blocks =
|
||||||
@ -2872,7 +2891,8 @@ selected_not_suitable:;
|
|||||||
c.page->data[9 + i] =
|
c.page->data[9 + i] =
|
||||||
( d->format_descriptors[index].tdp >>
|
( d->format_descriptors[index].tdp >>
|
||||||
(16 - 8 * i)) & 0xff;
|
(16 - 8 * i)) & 0xff;
|
||||||
if (format_type == 0x30 || format_type == 0x31) {
|
if (format_type == 0x30 || format_type == 0x31 ||
|
||||||
|
format_type == 0x32) {
|
||||||
if (flag & 64)
|
if (flag & 64)
|
||||||
format_sub_type = 3; /* Quick certification */
|
format_sub_type = 3; /* Quick certification */
|
||||||
else
|
else
|
||||||
@ -3799,6 +3819,7 @@ int mmc_setup_drive(struct burn_drive *d)
|
|||||||
d->bg_format_status = -1;
|
d->bg_format_status = -1;
|
||||||
d->num_format_descr = 0;
|
d->num_format_descr = 0;
|
||||||
d->complete_sessions = 0;
|
d->complete_sessions = 0;
|
||||||
|
d->state_of_last_session = -1;
|
||||||
d->last_track_no = 1;
|
d->last_track_no = 1;
|
||||||
d->media_capacity_remaining = 0;
|
d->media_capacity_remaining = 0;
|
||||||
d->media_lba_limit = 0;
|
d->media_lba_limit = 0;
|
||||||
|
@ -104,7 +104,9 @@ int spc_wait_unit_attention(struct burn_drive *d, int max_sec, char *cmd_text,
|
|||||||
int flag)
|
int flag)
|
||||||
{
|
{
|
||||||
int i, ret = 1, key = 0, asc = 0, ascq = 0;
|
int i, ret = 1, key = 0, asc = 0, ascq = 0;
|
||||||
char msg[160];
|
char msg[320];
|
||||||
|
unsigned char sense[14];
|
||||||
|
enum response resp;
|
||||||
|
|
||||||
if (!(flag & 1))
|
if (!(flag & 1))
|
||||||
usleep(100000);
|
usleep(100000);
|
||||||
@ -138,10 +140,24 @@ int spc_wait_unit_attention(struct burn_drive *d, int max_sec, char *cmd_text,
|
|||||||
/* media change notice = try again */
|
/* media change notice = try again */
|
||||||
goto slumber;
|
goto slumber;
|
||||||
|
|
||||||
|
#ifdef NIX
|
||||||
sprintf(msg,
|
sprintf(msg,
|
||||||
"Asynchromous SCSI error on %s: key=%X asc=%2.2Xh ascq=%2.2Xh",
|
"Asynchromous SCSI error on %s: key=%X asc=%2.2Xh ascq=%2.2Xh",
|
||||||
cmd_text, (unsigned) key, (unsigned) asc,
|
cmd_text, (unsigned) key, (unsigned) asc,
|
||||||
(unsigned) ascq);
|
(unsigned) ascq);
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* ts A90213 */
|
||||||
|
sprintf(msg,
|
||||||
|
"Asynchromous SCSI error on %s: ", cmd_text);
|
||||||
|
sense[2] = key;
|
||||||
|
sense[12] = asc;
|
||||||
|
sense[13] = ascq;
|
||||||
|
resp = scsi_error_msg(d, sense, 14, msg + strlen(msg),
|
||||||
|
&key, &asc, &ascq);
|
||||||
|
|
||||||
|
#endif /* ! NIX */
|
||||||
|
|
||||||
libdax_msgs_submit(libdax_messenger, d->global_index,
|
libdax_msgs_submit(libdax_messenger, d->global_index,
|
||||||
0x0002014d,
|
0x0002014d,
|
||||||
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
@ -1122,6 +1138,20 @@ enum response scsi_error_msg(struct burn_drive *d, unsigned char *sense,
|
|||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
return FAIL;
|
return FAIL;
|
||||||
|
case 0x73:
|
||||||
|
if (*key == 3 && *ascq == 0)
|
||||||
|
sprintf(msg, "CD control error");
|
||||||
|
else if (*key == 3 && *ascq == 2)
|
||||||
|
sprintf(msg, "Power calibration area is full");
|
||||||
|
else if (*key == 3 && *ascq == 3)
|
||||||
|
sprintf(msg, "Power calibration area error");
|
||||||
|
else if (*key == 3 && *ascq == 4)
|
||||||
|
sprintf(msg, "Program memory area update failure");
|
||||||
|
else if (*key == 3 && *ascq == 5)
|
||||||
|
sprintf(msg, "Program memory area is full");
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
return FAIL;
|
||||||
}
|
}
|
||||||
sprintf(msg_data,
|
sprintf(msg_data,
|
||||||
"Failure. See mmc3r10g.pdf: Sense Key %X ASC %2.2X ASCQ %2.2X",
|
"Failure. See mmc3r10g.pdf: Sense Key %X ASC %2.2X ASCQ %2.2X",
|
||||||
|
@ -236,6 +236,9 @@ struct burn_drive
|
|||||||
|
|
||||||
/* ts A70131 : from 51h READ DISC INFORMATION Number of Sessions (-1)*/
|
/* ts A70131 : from 51h READ DISC INFORMATION Number of Sessions (-1)*/
|
||||||
int complete_sessions;
|
int complete_sessions;
|
||||||
|
/* ts A90107 */
|
||||||
|
int state_of_last_session;
|
||||||
|
|
||||||
/* ts A70129 :
|
/* ts A70129 :
|
||||||
from 51h READ DISC INFORMATION Last Track Number in Last Session */
|
from 51h READ DISC INFORMATION Last Track Number in Last Session */
|
||||||
int last_track_no;
|
int last_track_no;
|
||||||
|
@ -1399,10 +1399,70 @@ int burn_disc_close_session_dvd_minus_r(struct burn_write_opts *o,
|
|||||||
int burn_dvd_write_session(struct burn_write_opts *o,
|
int burn_dvd_write_session(struct burn_write_opts *o,
|
||||||
struct burn_session *s, int is_last_session)
|
struct burn_session *s, int is_last_session)
|
||||||
{
|
{
|
||||||
int i,ret;
|
int i, ret, multi_mem;
|
||||||
struct burn_drive *d = o->drive;
|
struct burn_drive *d = o->drive;
|
||||||
|
|
||||||
/* >>> open_session ? */
|
/* ts A90108 */
|
||||||
|
if (d->current_profile == 0x41 && d->status == BURN_DISC_APPENDABLE &&
|
||||||
|
d->state_of_last_session == 1) {
|
||||||
|
/* last session on BD-R is still open */;
|
||||||
|
|
||||||
|
/* BR-R were not closed by libburn-0.6.0.pl00 if o->multi==0.
|
||||||
|
This leads to an unreadable, but recoverable) media state.
|
||||||
|
Technically they are appendable although the last session
|
||||||
|
is not readable.
|
||||||
|
|
||||||
|
By default the open session gets closed here before the new
|
||||||
|
session is written. E.g. after writing a small dummy seesion
|
||||||
|
number 2 one can read session 1 and write session 3 which
|
||||||
|
points to data of session 1.
|
||||||
|
|
||||||
|
For the case that no media with 3 sessions is desired it is
|
||||||
|
possible to activate the following coarse single-session
|
||||||
|
closing code:
|
||||||
|
No new session will be written but calling programs will
|
||||||
|
report success. Quite misleading.
|
||||||
|
Activate only if really needed by
|
||||||
|
# define Libburn_bug_A90108_close_disC yes
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef Libburn_bug_A90108_close_disC
|
||||||
|
|
||||||
|
/* Close open session and media.
|
||||||
|
That was the goal of the failed run which led to the
|
||||||
|
unreadable (but recoverable) media state.
|
||||||
|
|
||||||
|
It is not easy to implement a general close function for
|
||||||
|
all media types. Therefore this pseudo write code is under
|
||||||
|
control of #ifdef.
|
||||||
|
*/
|
||||||
|
libdax_msgs_submit(libdax_messenger, d->global_index,
|
||||||
|
0x00020171,
|
||||||
|
LIBDAX_MSGS_SEV_NOTE, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
|
"Closing BD-R with accidently open session",
|
||||||
|
0, 0);
|
||||||
|
d->close_track_session(d, 3, 0); /* CLOSE SESSION, 110b */
|
||||||
|
d->state_of_last_session = 3; /* mark as complete session */
|
||||||
|
d->status = BURN_DISC_FULL;
|
||||||
|
sleep(3); /* The caller might need time to arrange itself */
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
#else /* Libburn_bug_A90108_close_disC */
|
||||||
|
|
||||||
|
/* This is the default mode.
|
||||||
|
*/
|
||||||
|
libdax_msgs_submit(libdax_messenger, d->global_index,
|
||||||
|
0x00020170,
|
||||||
|
LIBDAX_MSGS_SEV_NOTE, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
|
"Closing open session before writing new one",
|
||||||
|
0, 0);
|
||||||
|
d->close_track_session(d, 1, 0); /* CLOSE SESSION, 010b */
|
||||||
|
d->state_of_last_session = 3; /* mark as complete session */
|
||||||
|
|
||||||
|
#endif /* ! Libburn_bug_A90108_close_disC */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < s->tracks; i++) {
|
for (i = 0; i < s->tracks; i++) {
|
||||||
ret = burn_dvd_write_track(o, s, i,
|
ret = burn_dvd_write_track(o, s, i,
|
||||||
@ -1413,7 +1473,11 @@ int burn_dvd_write_session(struct burn_write_opts *o,
|
|||||||
if (d->current_profile == 0x11 || d->current_profile == 0x14 ||
|
if (d->current_profile == 0x11 || d->current_profile == 0x14 ||
|
||||||
d->current_profile == 0x15) {
|
d->current_profile == 0x15) {
|
||||||
/* DVD-R , DVD-RW Sequential, DVD-R/DL Sequential */
|
/* DVD-R , DVD-RW Sequential, DVD-R/DL Sequential */
|
||||||
|
multi_mem = o->multi;
|
||||||
|
if (!is_last_session)
|
||||||
|
o->multi = 1;
|
||||||
ret = burn_disc_close_session_dvd_minus_r(o, s);
|
ret = burn_disc_close_session_dvd_minus_r(o, s);
|
||||||
|
o->multi = multi_mem;
|
||||||
if (ret <= 0)
|
if (ret <= 0)
|
||||||
return 0;
|
return 0;
|
||||||
} else if (d->current_profile == 0x12 || d->current_profile == 0x43) {
|
} else if (d->current_profile == 0x12 || d->current_profile == 0x43) {
|
||||||
@ -2031,7 +2095,7 @@ void burn_disc_write_sync(struct burn_write_opts *o, struct burn_disc *disc)
|
|||||||
struct burn_drive *d = o->drive;
|
struct burn_drive *d = o->drive;
|
||||||
struct buffer buf, *buffer_mem = o->drive->buffer;
|
struct buffer buf, *buffer_mem = o->drive->buffer;
|
||||||
struct burn_track *lt, *t;
|
struct burn_track *lt, *t;
|
||||||
int first = 1, i, ret, lba, nwa = 0;
|
int first = 1, i, ret, lba, nwa = 0, multi_mem;
|
||||||
off_t default_size;
|
off_t default_size;
|
||||||
char msg[80];
|
char msg[80];
|
||||||
|
|
||||||
@ -2181,7 +2245,12 @@ return crap. so we send the command, then ignore the result.
|
|||||||
d->alba += 4500;
|
d->alba += 4500;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!burn_write_session(o, disc->session[i]))
|
multi_mem = o->multi;
|
||||||
|
if(i < disc->sessions - 1)
|
||||||
|
o->multi = 1;
|
||||||
|
ret = burn_write_session(o, disc->session[i]);
|
||||||
|
o->multi = multi_mem;
|
||||||
|
if (!ret)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
lt = disc->session[i]->track[disc->session[i]->tracks - 1];
|
lt = disc->session[i]->track[disc->session[i]->tracks - 1];
|
||||||
|
Reference in New Issue
Block a user