Compare commits
9 Commits
ZeroSixFou
...
ZeroSixZer
Author | SHA1 | Date | |
---|---|---|---|
ed7dd1e748 | |||
cff7bc9291 | |||
9e26f4e5ae | |||
c70742da56 | |||
bd6874e7d1 | |||
65f67f7b5d | |||
6127790ab2 | |||
a4ca88d5f8 | |||
e25bce8f12 |
20
Makefile.am
20
Makefile.am
@ -82,34 +82,32 @@ 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) $(LIBBURN_EXTRALIBS)
|
test_libburner_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
|
||||||
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) $(LIBBURN_EXTRALIBS)
|
test_telltoc_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
|
||||||
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) $(LIBBURN_EXTRALIBS)
|
test_dewav_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
|
||||||
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) $(LIBBURN_EXTRALIBS)
|
test_poll_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
|
||||||
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) $(LIBBURN_EXTRALIBS)
|
test_structest_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
|
||||||
test_structest_SOURCES = test/structest.c
|
test_structest_SOURCES = test/structest.c
|
||||||
|
|
||||||
## cdrskin construction site - ts A60816 - A90313
|
## cdrskin construction site - ts A60816 - A90102
|
||||||
cdrskin_cdrskin_CPPFLAGS = -Ilibburn
|
cdrskin_cdrskin_CPPFLAGS = -Ilibburn
|
||||||
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_6_4
|
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_6_0
|
||||||
|
|
||||||
# cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
|
# cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
|
||||||
# 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 $(LIBBURN_EXTRALIBS)
|
cdrskin_cdrskin_LDADD = libburn/libburn.la $(THREAD_LIBS)
|
||||||
|
|
||||||
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
|
||||||
##
|
##
|
||||||
|
51
README
51
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.4.pl00.tar.gz
|
http://files.libburnia-project.org/releases/libburn-0.6.0.pl01.tar.gz
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -19,10 +19,10 @@ Copyright (C) 2002-2006 Derek Foreman and Ben Jansens
|
|||||||
|
|
||||||
From tarball
|
From tarball
|
||||||
|
|
||||||
Obtain libburn-0.6.4.pl00.tar.gz, take it to a directory of your choice and do:
|
Obtain libburn-0.6.0.pl01.tar.gz, take it to a directory of your choice and do:
|
||||||
|
|
||||||
tar xzf libburn-0.6.4.pl00.tar.gz
|
tar xzf libburn-0.6.0.pl01.tar.gz
|
||||||
cd libburn-0.6.4
|
cd libburn-0.6.0
|
||||||
./configure --prefix=/usr
|
./configure --prefix=/usr
|
||||||
make
|
make
|
||||||
|
|
||||||
@ -35,11 +35,6 @@ 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
|
||||||
|
|
||||||
@ -47,8 +42,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.6.3
|
svn co http://svn.libburnia-project.org/libburn/trunk libburn-0.5.9
|
||||||
cd libburn-0.6.3
|
cd libburn-0.5.9
|
||||||
./bootstrap
|
./bootstrap
|
||||||
./configure --prefix=/usr
|
./configure --prefix=/usr
|
||||||
make
|
make
|
||||||
@ -83,10 +78,8 @@ These are libraries, language bindings, and middleware binaries which emulate
|
|||||||
classical (and valuable) Linux tools.
|
classical (and valuable) Linux tools.
|
||||||
Currently it is supported on Linux with kernels >= 2.4 and on FreeBSD versions
|
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).
|
with ATAPI/CAM support enabled in the kernel, see atapicam(4).
|
||||||
On other X/Open compliant systems there will only be pseudo drives, but no
|
|
||||||
direct MMC operation on real CD/DVD/BD drives.
|
|
||||||
|
|
||||||
For full ports to other systems we would need : login on a development machine
|
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
|
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.
|
of Linux sg or FreeBSD CAM, volunteers for testing of realistic use cases.
|
||||||
|
|
||||||
@ -160,13 +153,6 @@ 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:
|
||||||
@ -365,29 +351,6 @@ 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. xorriso 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.
|
|
||||||
|
|
||||||
- 28 Feb 2009 libisofs-0.6.14 can record ACLs and Extended Attributes xattr
|
|
||||||
in its ISO images.
|
|
||||||
|
|
||||||
- 01 Mar 2009 libisoburn-0.3.4. xorriso makes use of the ACL and xattr
|
|
||||||
capabilities provided by libisofs for xorriso backup features.
|
|
||||||
|
|
||||||
- 11 Mar 2009 libisofs-0.6.16 of libisofs fixes two bugs which on Solaris
|
|
||||||
prevented to navigate the ISO images by ".." and to recognize the Rock Ridge
|
|
||||||
extensions of ISO images. The ban to build libisofs on operating systems
|
|
||||||
other than Linux and FreeBSD has been lifted.
|
|
||||||
|
|
||||||
- 13 Mar 2009 libburn-0.6.4 got a dummy adapter for SCSI/MMC command transport.
|
|
||||||
It will show no drives and thus libburn will only be able to perform
|
|
||||||
operations on "stdio:" pseudo drives. Nevertheless this allowed to lift the
|
|
||||||
ban to build libburn on operating systems other than Linux and FreeBSD.
|
|
||||||
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -14,9 +14,7 @@ AC_DEFUN([TARGET_SHIZZLE],
|
|||||||
LIBBURN_ARCH_LIBS=-lcam
|
LIBBURN_ARCH_LIBS=-lcam
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
ARCH=
|
AC_ERROR([You are attempting to compile for an unsupported platform])
|
||||||
LIBBURN_ARCH_LIBS=
|
|
||||||
# AC_ERROR([You are attempting to compile for an unsupported platform])
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
@ -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.4.pl00.tar.gz
|
http://scdbackup.sourceforge.net/cdrskin-0.6.0.pl01.tar.gz
|
||||||
Copyright (C) 2006-2009 Thomas Schmitt, provided under GPL version 2.
|
Copyright (C) 2006-2009 Thomas Schmitt, provided under GPL version 2.
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -14,8 +14,6 @@ most of the libburn features from the command line.
|
|||||||
|
|
||||||
Currently it is supported on Linux with kernels >= 2.4 and on FreeBSD versions
|
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).
|
with ATAPI/CAM support enabled in the kernel, see atapicam(4).
|
||||||
On other X/Open compliant systems there will only be pseudo drives, but no
|
|
||||||
direct MMC operation on real CD/DVD/BD drives.
|
|
||||||
|
|
||||||
By using this software you agree to the disclaimer at the end of this text
|
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 ..."
|
"This software is provided as is. There is no warranty implied and ..."
|
||||||
@ -23,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.4.pl00.tar.gz, take it to a directory of your choice and do:
|
Obtain cdrskin-0.6.0.pl01.tar.gz, take it to a directory of your choice and do:
|
||||||
|
|
||||||
tar xzf cdrskin-0.6.4.pl00.tar.gz
|
tar xzf cdrskin-0.6.0.pl01.tar.gz
|
||||||
cd cdrskin-0.6.4
|
cd cdrskin-0.6.0
|
||||||
|
|
||||||
Within that directory execute:
|
Within that directory execute:
|
||||||
|
|
||||||
@ -121,11 +119,6 @@ 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
|
||||||
|
|
||||||
@ -288,9 +281,6 @@ nominal speed by option "stream_recording=on".
|
|||||||
In this case bad blocks are not detected during write and not even previously
|
In this case bad blocks are not detected during write and not even previously
|
||||||
known bad blocks are avoided. So you have to make your own readability tests
|
known bad blocks are avoided. So you have to make your own readability tests
|
||||||
and go back to half speed as soon as the first read errors show up.
|
and go back to half speed as soon as the first read errors show up.
|
||||||
Instead of "on" one may also set a start address for stream recording.
|
|
||||||
Like "stream_recording=100m". This will write slowly to the first 100 MB of
|
|
||||||
the media and accelerate when writing to higher addresses.
|
|
||||||
|
|
||||||
Option --grow_overwriteable_iso allows -multi (although unneeded), enables
|
Option --grow_overwriteable_iso allows -multi (although unneeded), enables
|
||||||
-msinfo and -toc, and makes blank=fast an invalidator for ISO filesystems
|
-msinfo and -toc, and makes blank=fast an invalidator for ISO filesystems
|
||||||
@ -428,7 +418,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 3.5 years of development. But one never knows ...
|
damage did not occur in 2.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.4"
|
skin_release="0.6.0"
|
||||||
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.5"
|
skin_release="0.6.1"
|
||||||
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 "Jan 07, 2009"
|
.TH CDRSKIN 1 "Dec 10, 2008"
|
||||||
.\" 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,10 +167,9 @@ 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. It resembles the model of CD media. Only DVD-RW can be
|
recording model.
|
||||||
blanked and re-used from scratch.
|
|
||||||
.br
|
.br
|
||||||
DVD-RW are sequential media if they are in state "Sequential Recording".
|
This applies to DVD-RW only 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
|
||||||
@ -1186,15 +1185,13 @@ Use and report literal Bus,Target,Lun addresses rather than real SCSI and
|
|||||||
pseudo ATA addresses. This method is outdated and was never compatible with
|
pseudo ATA addresses. This method is outdated and was never compatible with
|
||||||
original cdrecord.
|
original cdrecord.
|
||||||
.TP
|
.TP
|
||||||
.BI stream_recording="on"|"off"|number
|
.BI stream_recording="on"|"off"
|
||||||
By setting "on" request that compliance to the desired speed setting is
|
By setting "on" request that compliance to the desired speed setting is
|
||||||
preferred over management of write errors. With DVD-RAM and BD 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.
|
bring effective write speed near to the nominal write speed of the media.
|
||||||
But it will also disable the automatic use of replacement blocks
|
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.
|
if write errors occur. It might as well be disliked or ignored by the drive.
|
||||||
.br
|
.br
|
||||||
If a number is given, then error management stays enabled for all byte
|
|
||||||
addresses below that number. Any number below 16s is the same as "off".
|
|
||||||
.SH EXAMPLES
|
.SH EXAMPLES
|
||||||
.SS
|
.SS
|
||||||
.B Get an overview of drives and their addresses:
|
.B Get an overview of drives and their addresses:
|
||||||
|
@ -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.4"
|
#define Cdrskin_prog_versioN "0.6.0"
|
||||||
#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 4
|
#define Cdrskin_libburn_micrO 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -135,44 +135,44 @@ or
|
|||||||
#endif /* Cdrskin_libburn_cvs_A60220_tS */
|
#endif /* Cdrskin_libburn_cvs_A60220_tS */
|
||||||
|
|
||||||
|
|
||||||
#ifdef Cdrskin_libburn_0_6_4
|
#ifdef Cdrskin_libburn_0_6_0
|
||||||
#define Cdrskin_libburn_versioN "0.6.4"
|
#define Cdrskin_libburn_versioN "0.6.0"
|
||||||
#define Cdrskin_libburn_from_pykix_svN 1
|
#define Cdrskin_libburn_from_pykix_svN 1
|
||||||
#endif /* Cdrskin_libburn_0_6_4 */
|
#endif /* Cdrskin_libburn_0_6_0 */
|
||||||
|
|
||||||
#ifdef Cdrskin_libburn_0_6_5
|
#ifdef Cdrskin_libburn_0_6_1
|
||||||
#define Cdrskin_libburn_versioN "0.6.5"
|
#define Cdrskin_libburn_versioN "0.6.1"
|
||||||
#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.5 yet */
|
/* there are no libburn novelties in 0.6.1 yet */
|
||||||
|
|
||||||
#endif /* Cdrskin_libburn_0_6_5 */
|
#endif /* Cdrskin_libburn_0_6_1 */
|
||||||
|
|
||||||
#ifndef Cdrskin_libburn_versioN
|
#ifndef Cdrskin_libburn_versioN
|
||||||
#define Cdrskin_libburn_0_6_4
|
#define Cdrskin_libburn_0_6_0
|
||||||
#define Cdrskin_libburn_versioN "0.6.4"
|
#define Cdrskin_libburn_versioN "0.6.0"
|
||||||
#define Cdrskin_libburn_from_pykix_svN 1
|
#define Cdrskin_libburn_from_pykix_svN 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef Cdrskin_libburn_0_6_4
|
#ifdef Cdrskin_libburn_0_6_0
|
||||||
#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 4
|
#define Cdrskin_libburn_micrO 0
|
||||||
#endif
|
#endif
|
||||||
#ifdef Cdrskin_libburn_0_6_5
|
#ifdef Cdrskin_libburn_0_6_1
|
||||||
#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 5
|
#define Cdrskin_libburn_micrO 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -251,15 +251,9 @@ 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.6.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 */
|
/* novel libburn features are transparent to cdrskin */
|
||||||
|
|
||||||
/* 0.6.4 */
|
|
||||||
/* Ended to mark novelties by macros.
|
|
||||||
libburnia libburn and cdrskin are fixely in sync now.
|
|
||||||
icculus libburn did not move for 30 months.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef Cdrskin_new_api_tesT
|
#ifdef Cdrskin_new_api_tesT
|
||||||
|
|
||||||
@ -2698,13 +2692,10 @@ set_dev:;
|
|||||||
" --single_track accept only last argument as source_address\n");
|
" --single_track accept only last argument as source_address\n");
|
||||||
|
|
||||||
#ifdef Cdrskin_libburn_has_stream_recordinG
|
#ifdef Cdrskin_libburn_has_stream_recordinG
|
||||||
printf(" stream_recording=\"on\"|\"off\"|number\n");
|
|
||||||
printf(
|
printf(
|
||||||
" \"on\" requests to prefer speed over write\n");
|
" stream_recording=\"on\"|\"off\" \"on\" requests to prefer speed\n");
|
||||||
printf(
|
printf(
|
||||||
" error management. A number prevents this with\n");
|
" over write error management.\n");
|
||||||
printf(
|
|
||||||
" byte addresses below that number.\n");
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef Cdrskin_allow_libburn_taO
|
#ifdef Cdrskin_allow_libburn_taO
|
||||||
@ -3129,7 +3120,7 @@ struct CdrskiN {
|
|||||||
int gracetime;
|
int gracetime;
|
||||||
int dummy_mode;
|
int dummy_mode;
|
||||||
int force_is_set;
|
int force_is_set;
|
||||||
int stream_recording_is_set; /* see burn_write_opts_set_stream_recording() */
|
int stream_recording_is_set;
|
||||||
int single_track;
|
int single_track;
|
||||||
int prodvd_cli_compatible;
|
int prodvd_cli_compatible;
|
||||||
|
|
||||||
@ -6475,7 +6466,7 @@ burn_failed:;
|
|||||||
burn_write_opts_set_force(o, !!skin->force_is_set);
|
burn_write_opts_set_force(o, !!skin->force_is_set);
|
||||||
#endif
|
#endif
|
||||||
#ifdef Cdrskin_libburn_has_stream_recordinG
|
#ifdef Cdrskin_libburn_has_stream_recordinG
|
||||||
burn_write_opts_set_stream_recording(o, skin->stream_recording_is_set);
|
burn_write_opts_set_stream_recording(o, !!skin->stream_recording_is_set);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(skin->dummy_mode) {
|
if(skin->dummy_mode) {
|
||||||
@ -6997,7 +6988,7 @@ sorry_failed_to_eject:;
|
|||||||
int Cdrskin_setup(struct CdrskiN *skin, int argc, char **argv, int flag)
|
int Cdrskin_setup(struct CdrskiN *skin, int argc, char **argv, int flag)
|
||||||
{
|
{
|
||||||
int i,k,l,ret,source_has_size=0, idx= -1;
|
int i,k,l,ret,source_has_size=0, idx= -1;
|
||||||
double value,grab_and_wait_value= -1.0, num;
|
double value,grab_and_wait_value= -1.0;
|
||||||
char *cpt,*value_pt,adr[Cdrskin_adrleN],*blank_mode= "";
|
char *cpt,*value_pt,adr[Cdrskin_adrleN],*blank_mode= "";
|
||||||
struct stat stbuf;
|
struct stat stbuf;
|
||||||
|
|
||||||
@ -7734,15 +7725,9 @@ set_speed:;
|
|||||||
set_stream_recording:;
|
set_stream_recording:;
|
||||||
if(strcmp(value_pt, "on")==0)
|
if(strcmp(value_pt, "on")==0)
|
||||||
skin->stream_recording_is_set= 1;
|
skin->stream_recording_is_set= 1;
|
||||||
else if(value_pt[0] >= '0' && value_pt[0] <= '9') {
|
else
|
||||||
num= Scanf_io_size(value_pt, 0);
|
|
||||||
num/= 2048.0;
|
|
||||||
if(num >= 16 && num <= 0x7FFFFFFF)
|
|
||||||
skin->stream_recording_is_set= num;
|
|
||||||
else
|
|
||||||
skin->stream_recording_is_set= 0;
|
|
||||||
} else
|
|
||||||
skin->stream_recording_is_set= 0;
|
skin->stream_recording_is_set= 0;
|
||||||
|
|
||||||
} else if(strcmp(argv[i],"-swab")==0) {
|
} else if(strcmp(argv[i],"-swab")==0) {
|
||||||
skin->swap_audio_bytes= 0;
|
skin->swap_audio_bytes= 0;
|
||||||
|
|
||||||
|
@ -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.4</DT>
|
<DT>libburn-0.6.0</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)
|
||||||
@ -148,9 +148,6 @@ as listed by option --devices.</DT>
|
|||||||
<DD><KBD> --tell_media_space 2>/dev/null)</KBD></DD>
|
<DD><KBD> --tell_media_space 2>/dev/null)</KBD></DD>
|
||||||
<DD>$<KBD> echo "Available: $x blocks of 2048 data bytes"</KBD></DD>
|
<DD>$<KBD> echo "Available: $x blocks of 2048 data bytes"</KBD></DD>
|
||||||
|
|
||||||
<DT>Accelerate BD-RE writing to full nominal speed after the first 250 MB</DT>
|
|
||||||
<DD>$<KBD> cdrskin ... stream_recording=250m ...</KBD>
|
|
||||||
|
|
||||||
<DT>Write audio tracks to CD:</DT>
|
<DT>Write audio tracks to CD:</DT>
|
||||||
<DD>$<KBD> cdrskin -v dev=ATA:1,0,0 speed=48 -sao \</KBD></DD>
|
<DD>$<KBD> cdrskin -v dev=ATA:1,0,0 speed=48 -sao \</KBD></DD>
|
||||||
<DD><KBD> track1.wav track2.au -audio -swab track3.raw</KBD></DD>
|
<DD><KBD> track1.wav track2.au -audio -swab track3.raw</KBD></DD>
|
||||||
@ -194,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.4.pl00.tar.gz">cdrskin-0.6.4.pl00.tar.gz</A>
|
<DD><A HREF="cdrskin-0.6.0.pl01.tar.gz">cdrskin-0.6.0.pl01.tar.gz</A>
|
||||||
(750 KB).
|
(745 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
|
||||||
@ -244,31 +241,37 @@ 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.6.2.pl00:
|
Enhancements towards previous stable version cdrskin-0.5.8.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>New operating system adapter "dummy" for stdio on general X/Open systems
|
<LI>Formatting and writing of BD-R media</LI>
|
||||||
</LI>
|
|
||||||
<LI>New stream recording mode with start address</LI>
|
|
||||||
<LI></LI>
|
|
||||||
<!--
|
<!--
|
||||||
<LI>none</LI>
|
<LI>none</LI>
|
||||||
-->
|
-->
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
Bug fixes towards cdrskin-0.6.2.pl00:
|
Bug fixes towards cdrskin-0.5.8.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>none</LI>
|
<LI>none</LI>
|
||||||
<!--
|
<!--
|
||||||
<LI>none</LI>
|
|
||||||
-->
|
-->
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
|
Bug fixes towards cdrskin-0.6.0.pl00:
|
||||||
|
<UL>
|
||||||
|
<LI>BD-R media were not closed properly.
|
||||||
|
The last session staid open and unreadable.</LI>
|
||||||
|
<!--
|
||||||
|
-->
|
||||||
|
</UL>
|
||||||
|
|
||||||
|
</P>
|
||||||
|
|
||||||
<HR>
|
<HR>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
<DL>
|
<DL>
|
||||||
<DT><H3>Development snapshot, version 0.6.5 :</H3></DT>
|
<DT><H3>Development snapshot, version 0.6.1 :</H3></DT>
|
||||||
<DD>Enhancements towards current stable version 0.6.4.pl00:
|
<DD>Enhancements towards current stable version 0.6.0.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>none yet</LI>
|
<LI>none yet</LI>
|
||||||
<!--
|
<!--
|
||||||
@ -277,10 +280,10 @@ Bug fixes towards cdrskin-0.6.2.pl00:
|
|||||||
</UL>
|
</UL>
|
||||||
</DD>
|
</DD>
|
||||||
<DD> </DD>
|
<DD> </DD>
|
||||||
<DD><A HREF="README_cdrskin_devel">README 0.6.5</A>
|
<DD><A HREF="README_cdrskin_devel">README 0.6.1</A>
|
||||||
<DD><A HREF="cdrskin__help_devel">cdrskin_0.6.5 --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.5 -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.5)</A></DD>
|
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.6.1)</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>
|
||||||
@ -300,8 +303,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.5.tar.gz">cdrskin-0.6.5.tar.gz</A>
|
<A HREF="cdrskin-0.6.1.tar.gz">cdrskin-0.6.1.tar.gz</A>
|
||||||
(750 KB).
|
(740 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.03.13.080001"
|
#define Cdrskin_timestamP "2009.01.07.140001"
|
||||||
|
@ -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 [2348]
|
2009.01.02.160001 [i2348]
|
||||||
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,299 +6244,9 @@ 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()
|
||||||
|
|
||||||
2009.01.04.112716 [2351]
|
------------------------------------ cycle - cdrskin-0.6.1 -
|
||||||
COPYRIGHT
|
------------------------------------ cycle - cdrskin-0.6.1 -
|
||||||
libburn/libdax_msgs.c
|
|
||||||
libburn/libdax_msgs.h
|
|
||||||
test/libburner.c
|
|
||||||
Updated copyright claims to year 2009
|
|
||||||
|
|
||||||
2009.01.04.113401 [2352]
|
|
||||||
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.1
|
|
||||||
|
|
||||||
04 Jan 2009 [2353]
|
|
||||||
- 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 [2354]
|
|
||||||
cdrskin/changelog.txt
|
|
||||||
Documented changes and release timestamp
|
|
||||||
|
|
||||||
------------------------------------ cycle - cdrskin-0.6.1 - 2009.01.04.113401
|
|
||||||
|
|
||||||
04 Jan 2009 [2356]
|
|
||||||
svn move
|
|
||||||
http://svn.libburnia-project.org/libburn/branches/ZeroSixZero
|
|
||||||
http://svn.libburnia-project.org/libburn/tags/ZeroSixZero
|
|
||||||
libburn release 0.6.0 is ready
|
|
||||||
|
|
||||||
2009.01.06.122534 [2366]
|
|
||||||
libburn/spc.c
|
|
||||||
Error texts for ASC 73 : power calibration and program memory
|
|
||||||
|
|
||||||
2009.01.06.122808 [2367] [2369]
|
|
||||||
libburn/async.c
|
|
||||||
libburn/libdax_msgs.h
|
|
||||||
Complaining and refusing more early with unformatted BD-RE
|
|
||||||
|
|
||||||
7 Jan 2009 [2370]
|
|
||||||
cdrskin/cdrskin.1
|
|
||||||
Clarification about one-time DVD and BD media
|
|
||||||
|
|
||||||
2009.01.07.154414 [2371]
|
|
||||||
libburn/write.c
|
|
||||||
Bug fix: BD-R were not correctly finalized
|
|
||||||
|
|
||||||
7 Jan 2009 [2372]
|
|
||||||
cdrskin/cdrskin_eng.html
|
|
||||||
Mentioned bug fix and pl01
|
|
||||||
|
|
||||||
------------------------------------ cycle - cdrskin-0.6.1 - 2009.01.07.154414
|
|
||||||
|
|
||||||
7 Jan 2009 [2373]
|
|
||||||
svn copy -m "Branching for libburn bugfix release 0.6.0.pl01" \
|
|
||||||
http://svn.libburnia-project.org/libburn/ \
|
|
||||||
http://svn.libburnia-project.org/libburn/
|
|
||||||
|
|
||||||
7 Jan 2009 [2374]
|
|
||||||
svn rm -m 'Removing falsly copied tag' \
|
|
||||||
http://svn.libburnia-project.org/libburn/libburn
|
|
||||||
|
|
||||||
7 Jan 2009 [2375]
|
|
||||||
svn copy -m "Branching for libburn bugfix release 0.6.0.pl01" \
|
|
||||||
http://svn.libburnia-project.org/libburn/tags/ZeroSixZero \
|
|
||||||
http://svn.libburnia-project.org/libburn/branches/ZeroSixZeroPl01
|
|
||||||
|
|
||||||
2009.01.07.140001 [branch 2376]
|
|
||||||
README
|
|
||||||
cdrskin/README
|
|
||||||
cdrskin/cdrskin_eng.html
|
|
||||||
cdrskin/cdrskin_timestamp.h
|
|
||||||
Mentioned bug fix and pl01
|
|
||||||
|
|
||||||
2009.01.07.140001 [branch 2377]
|
|
||||||
libburn/write.c
|
|
||||||
Bug fix: BD-R were not correctly finalized
|
|
||||||
|
|
||||||
7 Jan 2009 [2378]
|
|
||||||
svn move -m 'libburn bugfix release 0.6.0.pl01 is ready' \
|
|
||||||
http://svn.libburnia-project.org/libburn/branches/ZeroSixZeroPl01 \
|
|
||||||
http://svn.libburnia-project.org/libburn/tags/ZeroSixZeroPl01
|
|
||||||
|
|
||||||
------------------------------------ cycle - cdrskin-0.6.1 - 2009.01.07.154414
|
|
||||||
|
|
||||||
2009.01.09.095943 [2381]
|
|
||||||
libburn/transport.h
|
|
||||||
libburn/write.c
|
|
||||||
libburn/mmc.c
|
|
||||||
libburn/libdax_msgs.h
|
|
||||||
Recognizing BD-R media spoiled by the close bug and handling them as appendable
|
|
||||||
|
|
||||||
------------------------------------ cycle - cdrskin-0.6.1 - 2009.01.09.100210
|
|
||||||
|
|
||||||
2009.01.09.161704 [2383]
|
|
||||||
libburn/write.c
|
|
||||||
Preventing a possible bug with a burn run of more than one session at once
|
|
||||||
|
|
||||||
2009.01.11.102711 [2390]
|
|
||||||
libburn/write.c
|
|
||||||
libburn/libdax_msgs.h
|
|
||||||
Prepared eventual closing of spoiled BD-R media by a pseudo write run
|
|
||||||
|
|
||||||
11 Jan 2009 [2391]
|
|
||||||
doc/cookbook.txt
|
|
||||||
Updated cookbook about BD-R media
|
|
||||||
|
|
||||||
27 Jan 2009 [2431]
|
|
||||||
README
|
|
||||||
libburn/libburn.h
|
|
||||||
Mentioned the need for 64 bit file i/o
|
|
||||||
|
|
||||||
2009.02.04.102822 [2447]
|
|
||||||
Makefile.am
|
|
||||||
Linking with $LIBBURN_ARCH_LIBS to get -lcam on FreeBSD
|
|
||||||
|
|
||||||
4 Feb 2009 [2448]
|
|
||||||
README
|
|
||||||
cdrskin/README
|
|
||||||
Mentioned hald as possibly conflicting service
|
|
||||||
|
|
||||||
2009.02.19.192801 [2479]
|
|
||||||
libburn/spc.c
|
|
||||||
Human readable error messages with asynchronous SCSI errors
|
|
||||||
|
|
||||||
20 Feb 2009 [2482]
|
|
||||||
svn copy http://svn.libburnia-project.org/libburn/trunk
|
|
||||||
http://svn.libburnia-project.org/libburn/branches/ZeroSixZero
|
|
||||||
Preparing for libburn-0.6.0
|
|
||||||
|
|
||||||
2009.02.20.090001 [2483]
|
|
||||||
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.2
|
|
||||||
|
|
||||||
20 Feb 2009 [2484]
|
|
||||||
- cdrskin/add_ts_changes_to_libburn_0_6_0
|
|
||||||
- cdrskin/add_ts_changes_to_libburn_0_6_1
|
|
||||||
+ cdrskin/add_ts_changes_to_libburn_0_6_2
|
|
||||||
+ cdrskin/add_ts_changes_to_libburn_0_6_3
|
|
||||||
Updated cdrskin tarball generator
|
|
||||||
|
|
||||||
------------------------------ release - cdrskin-0.6.2.pl00 - 2009.02.20.090001
|
|
||||||
* Improvements with build system for FreeBSD
|
|
||||||
|
|
||||||
2009.02.20.124909 [2485]
|
|
||||||
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.3
|
|
||||||
|
|
||||||
20 Feb 2009 [2486]
|
|
||||||
- cdrskin/add_ts_changes_to_libburn_0_6_0
|
|
||||||
- cdrskin/add_ts_changes_to_libburn_0_6_1
|
|
||||||
+ cdrskin/add_ts_changes_to_libburn_0_6_2
|
|
||||||
+ cdrskin/add_ts_changes_to_libburn_0_6_3
|
|
||||||
Updated cdrskin tarball generator
|
|
||||||
|
|
||||||
------------------------------------ cycle - cdrskin-0.6.3 - 2009.02.20.132535
|
|
||||||
|
|
||||||
20 Feb 2009 [2489]
|
|
||||||
svn move -m libburn release 0.6.2 is ready
|
|
||||||
http://svn.libburnia-project.org/libburn/branches/ZeroSixTwo
|
|
||||||
http://svn.libburnia-project.org/libburn/tags/ZeroSixTwo
|
|
||||||
|
|
||||||
2009.02.27.143100 [2500]
|
|
||||||
libburn/libburn.h
|
|
||||||
libburn/transport.h
|
|
||||||
libburn/drive.c
|
|
||||||
libburn/options.c
|
|
||||||
libburn/write.c
|
|
||||||
libburn/mmc.c
|
|
||||||
New API function burn_drive_set_stream_recording()
|
|
||||||
|
|
||||||
2009.02.27.211707 [2501]
|
|
||||||
cdrskin/cdrskin.c
|
|
||||||
cdrskin/cdrskin.1
|
|
||||||
New stream_recording mode with start number
|
|
||||||
|
|
||||||
2009.03.02.170126 [2513]
|
|
||||||
libburn/os.h
|
|
||||||
libburn/libdax_msgs.h
|
|
||||||
libburn/sg.c
|
|
||||||
+ libburn/os-dummy.h
|
|
||||||
+ libburn/sg-dummy.c
|
|
||||||
New operating system adapter "dummy" for stdio on POSIX-like systems
|
|
||||||
|
|
||||||
2009.03.02.193353 [2514]
|
|
||||||
libburn/drive.c
|
|
||||||
Fixed a race condition on abort with stdio writing which could cause SIGSEGV
|
|
||||||
|
|
||||||
2009.03.02.200132 [2515]
|
|
||||||
libburn/sg.c
|
|
||||||
Added a dummy function with loud compiler warning to sg.c dummy case
|
|
||||||
|
|
||||||
2009.03.03.092057 [2516]
|
|
||||||
configure.ac
|
|
||||||
libburn/sg-dummy.c
|
|
||||||
Making optional use of statvfs() in sg-dummy
|
|
||||||
|
|
||||||
------------------------------------ cycle - cdrskin-0.6.3 - 2009.03.03.092057
|
|
||||||
* New API function burn_drive_set_stream_recording()
|
|
||||||
* New stream recording mode with start number
|
|
||||||
|
|
||||||
|
|
||||||
2009.03.05.145309 [2520]
|
|
||||||
acinclude.m4
|
|
||||||
Lifted the ban on operating systems other than Linux and FreeBSD
|
|
||||||
|
|
||||||
------------------------------------ cycle - cdrskin-0.6.3 - 2009.03.05.145309
|
|
||||||
* New operating system adapter "dummy" for stdio on POSIX-like systems
|
|
||||||
|
|
||||||
|
|
||||||
2009.03.08.140120 [2522]
|
|
||||||
libburn/cleanup.c
|
|
||||||
Reacted on compiler warnings of SchilliX-0.6.7 (based on Solaris 5.11)
|
|
||||||
|
|
||||||
13 Mar 2009 [2529]
|
|
||||||
svn copy -m "Branching for libburn release 0.6.4" \
|
|
||||||
http://svn.libburnia-project.org/libburn/trunk \
|
|
||||||
http://svn.libburnia-project.org/libburn/branches/ZeroSixFour
|
|
||||||
|
|
||||||
2009.03.13.080001 [2530]
|
|
||||||
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 libburn number transition to 0.6.4
|
|
||||||
|
|
||||||
13 Mar 2009 [2531]
|
|
||||||
- cdrskin/add_ts_changes_to_libburn_0_6_2
|
|
||||||
- cdrskin/add_ts_changes_to_libburn_0_6_3
|
|
||||||
+ cdrskin/add_ts_changes_to_libburn_0_6_4
|
|
||||||
+ cdrskin/add_ts_changes_to_libburn_0_6_5
|
|
||||||
Updated cdrskin tarball generator
|
|
||||||
|
|
||||||
13 Mar 2009 []
|
|
||||||
cdrskin/changelog.txt
|
|
||||||
Documented changes and release timestamp
|
|
||||||
|
|
||||||
------------------------------ release - cdrskin-0.6.4.pl00 - 2009.03.13.080001
|
|
||||||
* New operating system adapter "dummy" for stdio on general X/Open systems
|
|
||||||
* New API function burn_drive_set_stream_recording()
|
|
||||||
* New stream recording mode with start address
|
|
||||||
|
|
||||||
|
|
||||||
2009.03.13.135818 [2532]
|
|
||||||
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 libburn number transition to 0.6.5
|
|
||||||
|
|
||||||
13 Mar 2009 [2533]
|
|
||||||
- cdrskin/add_ts_changes_to_libburn_0_6_2
|
|
||||||
- cdrskin/add_ts_changes_to_libburn_0_6_3
|
|
||||||
+ cdrskin/add_ts_changes_to_libburn_0_6_4
|
|
||||||
+ cdrskin/add_ts_changes_to_libburn_0_6_5
|
|
||||||
Updated cdrskin tarball generator
|
|
||||||
|
|
||||||
------------------------------------ cycle - cdrskin-0.6.5 -
|
|
||||||
------------------------------------ cycle - cdrskin-0.6.5 -
|
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
TODO
|
TODO
|
||||||
@ -6545,6 +6255,8 @@ Updated cdrskin tarball generator
|
|||||||
|
|
||||||
--------------------------------- bugs -------------------------------------
|
--------------------------------- bugs -------------------------------------
|
||||||
|
|
||||||
|
- Needed is a system dependend facility: dev_t <-> major, minor
|
||||||
|
|
||||||
- Do something about drive->buffer asynchronous race conditions
|
- Do something about drive->buffer asynchronous race conditions
|
||||||
and dangerous use of local heap memory.
|
and dangerous use of local heap memory.
|
||||||
(The various asynchronous operations use the same buffer
|
(The various asynchronous operations use the same buffer
|
||||||
@ -6581,6 +6293,9 @@ problem with telltoc: double descriptor list from before load and after load
|
|||||||
|
|
||||||
What about cdrskin rc files ? Forward with fallback runs ?
|
What about cdrskin rc files ? Forward with fallback runs ?
|
||||||
|
|
||||||
|
cdrskin/README
|
||||||
|
Thin out
|
||||||
|
|
||||||
|
|
||||||
[]
|
[]
|
||||||
Emulate -dummy on overwriteables ?
|
Emulate -dummy on overwriteables ?
|
||||||
|
@ -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_4"
|
libvers="-DCdrskin_libburn_0_6_0"
|
||||||
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_4"
|
elif test "$i" = "-libburn_0_6_0"
|
||||||
then
|
then
|
||||||
libvers="-DCdrskin_libburn_0_6_4"
|
libvers="-DCdrskin_libburn_0_6_0"
|
||||||
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_5"
|
libvers="-DCdrskin_libburn_0_6_1"
|
||||||
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"
|
||||||
@ -75,8 +75,10 @@ do
|
|||||||
echo "Options:"
|
echo "Options:"
|
||||||
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 " -libburn_0_6_4 set macro to match libburn-0.6.4"
|
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_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 " -do_not_compile_cdrskin omit compilation of cdrskin/cdrskin."
|
echo " -do_not_compile_cdrskin omit compilation of cdrskin/cdrskin."
|
||||||
echo " -experimental use newly introduced libburn features."
|
echo " -experimental use newly introduced libburn features."
|
||||||
echo " -oldfashioned use pre-0.2.2 libburn features only."
|
echo " -oldfashioned use pre-0.2.2 libburn features only."
|
||||||
|
29
configure.ac
29
configure.ac
@ -1,4 +1,4 @@
|
|||||||
AC_INIT([libburn], [0.6.4], [http://libburnia-project.org])
|
AC_INIT([libburn], [0.6.0], [http://libburnia-project.org])
|
||||||
AC_PREREQ([2.50])
|
AC_PREREQ([2.50])
|
||||||
dnl AC_CONFIG_HEADER([config.h])
|
dnl AC_CONFIG_HEADER([config.h])
|
||||||
|
|
||||||
@ -42,8 +42,7 @@ dnl So this is a superspace of the SONAME version space. To avoid
|
|||||||
dnl ill SONAME, the value of CURRENT must be larger than AGE.
|
dnl ill SONAME, the value of CURRENT must be larger than AGE.
|
||||||
dnl See also http://www.gnu.org/software/libtool/manual.html#Interfaces
|
dnl See also http://www.gnu.org/software/libtool/manual.html#Interfaces
|
||||||
dnl
|
dnl
|
||||||
dnl On Linux the name of the dynamic library will be
|
dnl The name of the dynamic library will be libburn.so.$SONAME.$AGE.$REV .
|
||||||
dnl libburn.so.$SONAME.$AGE.$REV
|
|
||||||
dnl In the terminology of this file:
|
dnl In the terminology of this file:
|
||||||
dnl CURRENT = LT_CURRENT
|
dnl CURRENT = LT_CURRENT
|
||||||
dnl AGE = LT_AGE
|
dnl AGE = LT_AGE
|
||||||
@ -69,8 +68,6 @@ 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 0.6.4 = libburn.so.4.29.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.
|
||||||
@ -96,7 +93,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=4
|
BURN_MICRO_VERSION=0
|
||||||
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)
|
||||||
@ -107,15 +104,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 A90313
|
dnl ts A90102
|
||||||
dnl This is the release version libburn-0.6.4 = libburn.so.4.29.0
|
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 ### 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 = 33 - 29 = 4 . Linux library name = libburn.so.4.29.0
|
dnl SONAME = 29 - 25 = 4 . Library name = libburn.so.4.25.0
|
||||||
LT_CURRENT=33
|
LT_CURRENT=29
|
||||||
LT_AGE=29
|
LT_AGE=25
|
||||||
LT_REVISION=0
|
LT_REVISION=0
|
||||||
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
||||||
|
|
||||||
@ -164,16 +161,6 @@ TARGET_SHIZZLE
|
|||||||
AC_SUBST(ARCH)
|
AC_SUBST(ARCH)
|
||||||
AC_SUBST(LIBBURN_ARCH_LIBS)
|
AC_SUBST(LIBBURN_ARCH_LIBS)
|
||||||
|
|
||||||
dnl ts A90303
|
|
||||||
dnl Check the preconditions for using statvfs() in sg-dummy
|
|
||||||
dnl (sg-linux and sg-freebsd use statvfs() unconditionally)
|
|
||||||
STATVFS_DEF=-DLibburn_os_has_statvfS
|
|
||||||
AC_CHECK_HEADER(sys/statvfs.h, X=, STATVFS_DEF=)
|
|
||||||
AC_CHECK_FUNC([statvfs], X=, STATVFS_DEF=)
|
|
||||||
dnl If this would be done more specifically in Makefile.am
|
|
||||||
dnl via libburn_libburn_la_CFLAGS then undesired .o file names would emerge
|
|
||||||
CFLAGS="$CFLAGS $STATVFS_DEF"
|
|
||||||
|
|
||||||
dnl Add compiler-specific flags
|
dnl Add compiler-specific flags
|
||||||
|
|
||||||
dnl See if the user wants aggressive optimizations of the code
|
dnl See if the user wants aggressive optimizations of the code
|
||||||
|
141
doc/cookbook.txt
141
doc/cookbook.txt
@ -1,4 +1,4 @@
|
|||||||
libburnia-project.org Optical Media Rotisserie Recipes as of January 2009
|
libburnia-project.org Optical Media Rotisserie Recipes as of April 2008
|
||||||
|
|
||||||
Content:
|
Content:
|
||||||
- TAO Multi-Session CD Cookbook (CD-R, CD-RW)
|
- TAO Multi-Session CD Cookbook (CD-R, CD-RW)
|
||||||
@ -6,7 +6,6 @@ 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
|
||||||
@ -405,7 +404,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,
|
||||||
LG GGW H20L, and by BD-RE experiments done by Giulio Orsero on LG BE06LU10.
|
and by BD-RE experiments done by Giulio Orsero on LG BE06LU10.
|
||||||
|
|
||||||
For libburnia-project.org by Thomas Schmitt <scdbackup@gmx.net>
|
For libburnia-project.org by Thomas Schmitt <scdbackup@gmx.net>
|
||||||
|
|
||||||
@ -698,14 +697,9 @@ 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. This may be the only fast formatting
|
00h offers the default size format.
|
||||||
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
|
||||||
sizes given: #1: default size, #2: maximum spare area, #3: minimal spare.
|
size to choose: #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)
|
||||||
@ -744,7 +738,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 for managing
|
This is blamed to the automatic checkreading which happens ifor 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.
|
||||||
@ -755,7 +749,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 one has to write full 64 kB buffers.
|
With the tested BD-RE ione has to write 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
|
||||||
@ -766,10 +760,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 0043h promises the existence of
|
None of the features of profiles 0012h and 0043 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.
|
|
||||||
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
@ -796,9 +790,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.
|
||||||
@ -807,7 +801,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_iso not only patches the sector fields of the
|
cdrskin --grow_overwriteable 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
|
||||||
@ -1279,118 +1273,3 @@ 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,15 +527,12 @@ 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, d->global_index,
|
libdax_msgs_submit(libdax_messenger, opts->drive->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)",
|
||||||
@ -544,14 +541,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 */
|
||||||
d->cancel = 1;
|
opts->drive->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 (d->drive_role == 0) {
|
if (opts->drive->drive_role == 0) {
|
||||||
libdax_msgs_submit(libdax_messenger, d->global_index,
|
libdax_msgs_submit(libdax_messenger, opts->drive->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);
|
||||||
@ -559,9 +556,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 (d->drive_role == 1 && !d->mdata->valid) {
|
if (opts->drive->drive_role == 1 && !opts->drive->mdata->valid) {
|
||||||
libdax_msgs_submit(libdax_messenger,
|
libdax_msgs_submit(libdax_messenger,
|
||||||
d->global_index, 0x00020113,
|
opts->drive->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;
|
||||||
@ -574,33 +571,21 @@ 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,
|
||||||
d->global_index, 0x00020139,
|
opts->drive->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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ts A90106 : early catching of unformatted BD-RE */
|
opts->drive->cancel = 0; /* End of the return = failure area */
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
d->cancel = 0; /* End of the return = failure area */
|
o.drive = opts->drive;
|
||||||
|
|
||||||
o.drive = d;
|
|
||||||
o.opts = opts;
|
o.opts = opts;
|
||||||
o.disc = disc;
|
o.disc = disc;
|
||||||
|
|
||||||
opts->refcount++;
|
opts->refcount++;
|
||||||
|
|
||||||
add_worker(Burnworker_type_writE, d,
|
add_worker(Burnworker_type_writE, opts->drive,
|
||||||
(WorkerFunc) write_disc_worker_func, &o);
|
(WorkerFunc) write_disc_worker_func, &o);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,8 +97,8 @@ static int Cleanup_handler_exit(int exit_value, int signum, int flag)
|
|||||||
return(2);
|
return(2);
|
||||||
}
|
}
|
||||||
if(cleanup_exiting) {
|
if(cleanup_exiting) {
|
||||||
fprintf(stderr,"cleanup: ABORT : repeat by pid=%.f, signum=%d\n",
|
fprintf(stderr,"cleanup: ABORT : repeat by pid=%d, signum=%d\n",
|
||||||
(double) getpid(), signum);
|
getpid(),signum);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
cleanup_exiting= 1;
|
cleanup_exiting= 1;
|
||||||
|
@ -62,7 +62,6 @@ int burn_setup_drive(struct burn_drive *d, char *fname)
|
|||||||
d->stdio_fd = -1;
|
d->stdio_fd = -1;
|
||||||
d->status = BURN_DISC_UNREADY;
|
d->status = BURN_DISC_UNREADY;
|
||||||
d->do_stream_recording = 0;
|
d->do_stream_recording = 0;
|
||||||
d->stream_recording_start= 0;
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -793,18 +792,6 @@ enum burn_drive_status burn_drive_get_status(struct burn_drive *d,
|
|||||||
return d->busy;
|
return d->busy;
|
||||||
}
|
}
|
||||||
|
|
||||||
int burn_drive_set_stream_recording(struct burn_drive *d, int recmode,
|
|
||||||
int start, int flag)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (recmode == 1)
|
|
||||||
d->do_stream_recording = 1;
|
|
||||||
else if (recmode == -1)
|
|
||||||
d->do_stream_recording = 0;
|
|
||||||
d->stream_recording_start = start;
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void burn_drive_cancel(struct burn_drive *d)
|
void burn_drive_cancel(struct burn_drive *d)
|
||||||
{
|
{
|
||||||
pthread_mutex_lock(&d->access_lock);
|
pthread_mutex_lock(&d->access_lock);
|
||||||
@ -1757,18 +1744,10 @@ int burn_abort(int patience,
|
|||||||
occup = burn_drive_is_occupied(&(drive_array[i]));
|
occup = burn_drive_is_occupied(&(drive_array[i]));
|
||||||
if(occup == -2)
|
if(occup == -2)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
#ifdef NIX
|
|
||||||
/* <<< this causes a race condition with drive usage
|
|
||||||
and drive disposal
|
|
||||||
*/
|
|
||||||
if(drive_array[i].drive_role != 1) {
|
if(drive_array[i].drive_role != 1) {
|
||||||
drive_array[i].busy = BURN_DRIVE_IDLE;
|
drive_array[i].busy = BURN_DRIVE_IDLE;
|
||||||
burn_drive_forget(&(drive_array[i]), 1);
|
burn_drive_forget(&(drive_array[i]), 1);
|
||||||
} else
|
} else if(occup <= 10) {
|
||||||
#endif /* NIX */
|
|
||||||
|
|
||||||
if(occup <= 10) {
|
|
||||||
burn_drive_forget(&(drive_array[i]), 1);
|
burn_drive_forget(&(drive_array[i]), 1);
|
||||||
} else if(occup <= 100) {
|
} else if(occup <= 100) {
|
||||||
if(first_round)
|
if(first_round)
|
||||||
|
@ -3,15 +3,11 @@
|
|||||||
#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>
|
||||||
|
|
||||||
@ -1388,28 +1384,6 @@ int burn_precheck_write(struct burn_write_opts *o, struct burn_disc *disc,
|
|||||||
*/
|
*/
|
||||||
void burn_disc_write(struct burn_write_opts *o, struct burn_disc *disc);
|
void burn_disc_write(struct burn_write_opts *o, struct burn_disc *disc);
|
||||||
|
|
||||||
|
|
||||||
/* ts A90227 */
|
|
||||||
/** Control stream recording during the write run and eventually set the start
|
|
||||||
LBA for stream recording.
|
|
||||||
Stream recording is set from struct burn_write_opts when the write run
|
|
||||||
gets started. See burn_write_opts_set_stream_recording().
|
|
||||||
The call described here can be used later to override this setting and
|
|
||||||
to program automatic switching at a given LBA. It also affects subsequent
|
|
||||||
calls to burn_random_access_write().
|
|
||||||
@param drive The drive which performs the write operation.
|
|
||||||
@param recmode -1= disable stream recording
|
|
||||||
0= leave setting as is
|
|
||||||
1= enable stream recording
|
|
||||||
@param start The LBA where actual stream recording shall start.
|
|
||||||
(0 means unconditional stream recording)
|
|
||||||
@param flag Bitfield for control purposes (unused yet, submit 0).
|
|
||||||
@return 1=success , <=0 failure
|
|
||||||
@since 0.6.4
|
|
||||||
*/
|
|
||||||
int burn_drive_set_stream_recording(struct burn_drive *drive, int recmode,
|
|
||||||
int start, int flag);
|
|
||||||
|
|
||||||
/** Cancel an operation on a drive.
|
/** Cancel an operation on a drive.
|
||||||
This will only work when the drive's busy state is BURN_DRIVE_READING or
|
This will only work when the drive's busy state is BURN_DRIVE_READING or
|
||||||
BURN_DRIVE_WRITING.
|
BURN_DRIVE_WRITING.
|
||||||
@ -1928,15 +1902,12 @@ void burn_write_opts_set_force(struct burn_write_opts *opts, int use_force);
|
|||||||
|
|
||||||
/* ts A80412 */
|
/* ts A80412 */
|
||||||
/** Eventually makes use of the more modern write command AAh WRITE12 and
|
/** Eventually makes use of the more modern write command AAh WRITE12 and
|
||||||
sets the Streaming bit. With DVD-RAM and BD this can override the
|
sets the Streaming bit. With DVD-RAM this can override the traditional
|
||||||
traditional slowdown to half nominal speed. But if it speeds up writing
|
slowdown to half nominal speed. But if it speeds up writing then it also
|
||||||
then it also disables error management and correction. Weigh your
|
disables error management and correction. Weigh your priorities.
|
||||||
priorities. This affects the write operations of burn_disc_write()
|
This only affects the write operations of burn_disc_write().
|
||||||
and subsequent calls of burn_random_access_write().
|
|
||||||
@param opts The write opts to change
|
@param opts The write opts to change
|
||||||
@param value 0=use 2Ah WRITE10, 1=use AAh WRITE12 with Streaming bit
|
@param value 0=use 2Ah WRITE10, 1=use AAh WRITE12 with Streaming bit
|
||||||
@since 0.6.4:
|
|
||||||
>=16 use WRITE12 but not before the LBA given by value
|
|
||||||
@since 0.4.6
|
@since 0.4.6
|
||||||
*/
|
*/
|
||||||
void burn_write_opts_set_stream_recording(struct burn_write_opts *opts,
|
void burn_write_opts_set_stream_recording(struct burn_write_opts *opts,
|
||||||
@ -2260,7 +2231,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 4
|
#define burn_header_version_micro 0
|
||||||
/** 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,15 +540,6 @@ 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
|
|
||||||
0x0002016a (FAILURE,HIGH) = No MMC transport adapter is present
|
|
||||||
0x0002016b (WARNING,HIGH) = No MMC transport adapter is present
|
|
||||||
0x0002016c (DEBUG,HIGH) = No MMC transport adapter is present
|
|
||||||
|
|
||||||
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
|
||||||
|
@ -55,10 +55,10 @@ extern struct libdax_msgs *libdax_messenger;
|
|||||||
/* ts A70306 */
|
/* ts A70306 */
|
||||||
#define Libburn_support_dvd_plus_R 1
|
#define Libburn_support_dvd_plus_R 1
|
||||||
|
|
||||||
/* ts A70509 : handling 0x41 as read-only type */
|
/* ts A70509 : handling 0x41 and 0x42 as read-only types */
|
||||||
#define Libburn_support_bd_r_readonlY 1
|
#define Libburn_support_bd_r_readonlY 1
|
||||||
|
|
||||||
/* ts A81208 */
|
/* >>> ts A81208 */
|
||||||
#define Libburn_support_bd_plus_r_srM 1
|
#define Libburn_support_bd_plus_r_srM 1
|
||||||
|
|
||||||
|
|
||||||
@ -124,7 +124,6 @@ extern struct libdax_msgs *libdax_messenger;
|
|||||||
BD-RE is now an officially supported profile.
|
BD-RE is now an officially supported profile.
|
||||||
ts A81209 : The first two sessions have been written to BD-R SRM
|
ts A81209 : The first two sessions have been written to BD-R SRM
|
||||||
(auto formatted without Defect Management).
|
(auto formatted without Defect Management).
|
||||||
ts A90107 : BD-R is now supported media type
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* ts A70519 : With MMC commands of data direction FROM_DRIVE:
|
/* ts A70519 : With MMC commands of data direction FROM_DRIVE:
|
||||||
@ -745,7 +744,7 @@ int mmc_write(struct burn_drive *d, int start, struct buffer *buf)
|
|||||||
mmc_wait_for_buffer_free(d, buf);
|
mmc_wait_for_buffer_free(d, buf);
|
||||||
|
|
||||||
/* ts A80412 */
|
/* ts A80412 */
|
||||||
if(d->do_stream_recording > 0 && start >= d->stream_recording_start) {
|
if(d->do_stream_recording > 0) {
|
||||||
|
|
||||||
/* >>> ??? is WRITE12 available ? */
|
/* >>> ??? is WRITE12 available ? */
|
||||||
/* >>> ??? inquire feature 107h Stream Writing bit ? */
|
/* >>> ??? inquire feature 107h Stream Writing bit ? */
|
||||||
@ -1467,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, disc_status, len, old_alloc_len;
|
int do_read_toc = 0, session_state, disc_status, len, old_alloc_len;
|
||||||
int ret, number_of_sessions = -1;
|
int ret;
|
||||||
|
|
||||||
/* ts A61020 */
|
/* ts A61020 */
|
||||||
d->start_lba = d->end_lba = -2000000000;
|
d->start_lba = d->end_lba = -2000000000;
|
||||||
@ -1527,9 +1526,6 @@ 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 */
|
||||||
@ -1585,27 +1581,12 @@ 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 &&
|
if (d->current_profile == 0x41 && ret > 0 &&
|
||||||
d->status == BURN_DISC_APPENDABLE &&
|
d->status == BURN_DISC_APPENDABLE &&
|
||||||
ret > 0 && d->media_read_capacity == 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;
|
||||||
}
|
}
|
||||||
@ -1653,9 +1634,10 @@ 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 = number_of_sessions;
|
d->complete_sessions = (data[9] << 8) | data[4];
|
||||||
|
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 (d->state_of_last_session != 3 && d->complete_sessions >= 1)
|
if (session_state != 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
|
||||||
@ -2870,8 +2852,7 @@ 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 == 0x41 ||
|
d->current_profile == 0x43))
|
||||||
d->current_profile == 0x43))
|
|
||||||
goto unsuitable_media;
|
goto unsuitable_media;
|
||||||
|
|
||||||
format_type = d->format_descriptors[index].type;
|
format_type = d->format_descriptors[index].type;
|
||||||
@ -2879,8 +2860,7 @@ 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 =
|
||||||
@ -2892,8 +2872,7 @@ 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
|
||||||
@ -3820,7 +3799,6 @@ 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;
|
||||||
|
@ -385,7 +385,7 @@ void burn_write_opts_set_force(struct burn_write_opts *opts, int use_force)
|
|||||||
void burn_write_opts_set_stream_recording(struct burn_write_opts *opts,
|
void burn_write_opts_set_stream_recording(struct burn_write_opts *opts,
|
||||||
int value)
|
int value)
|
||||||
{
|
{
|
||||||
opts->do_stream_recording = value;
|
opts->do_stream_recording = !!value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,63 +0,0 @@
|
|||||||
|
|
||||||
/* os-dummy.h
|
|
||||||
Operating system specific libburn definitions and declarations. Included
|
|
||||||
by os.h in case of compilation for
|
|
||||||
Unknown POSIX like systems
|
|
||||||
with the dummy MMC transport adapter sg-dummy.c
|
|
||||||
|
|
||||||
Copyright (C) 2009 Thomas Schmitt <scdbackup@gmx.net>, provided under GPL
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/** List of all signals which shall be caught by signal handlers and trigger
|
|
||||||
a graceful abort of libburn. (See man 7 signal.)
|
|
||||||
*/
|
|
||||||
/* Once as system defined macros */
|
|
||||||
#define BURN_OS_SIGNAL_MACRO_LIST \
|
|
||||||
SIGHUP, SIGINT, SIGQUIT, SIGILL, SIGABRT, \
|
|
||||||
SIGFPE, SIGSEGV, SIGPIPE, SIGALRM, SIGTERM, \
|
|
||||||
SIGUSR1, SIGUSR2, SIGXCPU, SIGTSTP, SIGTTIN, \
|
|
||||||
SIGTTOU
|
|
||||||
|
|
||||||
/* Once as text 1:1 list of strings for messages and interpreters */
|
|
||||||
#define BURN_OS_SIGNAL_NAME_LIST \
|
|
||||||
"SIGHUP", "SIGINT", "SIGQUIT", "SIGILL", "SIGABRT", \
|
|
||||||
"SIGFPE", "SIGSEGV", "SIGPIPE", "SIGALRM", "SIGTERM", \
|
|
||||||
"SIGUSR1", "SIGUSR2", "SIGXCPU", "SIGTSTP", "SIGTTIN", \
|
|
||||||
"SIGTTOU"
|
|
||||||
|
|
||||||
/* The number of above list items */
|
|
||||||
#define BURN_OS_SIGNAL_COUNT 16
|
|
||||||
|
|
||||||
/** To list all signals which shall surely not be caught */
|
|
||||||
#define BURN_OS_NON_SIGNAL_MACRO_LIST \
|
|
||||||
SIGKILL, SIGCHLD, SIGSTOP
|
|
||||||
|
|
||||||
/* The number of above list items */
|
|
||||||
#define BURN_OS_NON_SIGNAL_COUNT 3
|
|
||||||
|
|
||||||
|
|
||||||
/* The maximum size for a (SCSI) i/o transaction */
|
|
||||||
/* Important : MUST be at least 32768 ! */
|
|
||||||
#define BURN_OS_TRANSPORT_BUFFER_SIZE 65536
|
|
||||||
|
|
||||||
|
|
||||||
/* To hold the position of the most recently delivered address from
|
|
||||||
device enumeration.
|
|
||||||
*/
|
|
||||||
struct burn_drive_enumerator_struct {
|
|
||||||
int pos;
|
|
||||||
int info_count;
|
|
||||||
char **info_list;
|
|
||||||
};
|
|
||||||
|
|
||||||
#define BURN_OS_DEFINE_DRIVE_ENUMERATOR_T \
|
|
||||||
typedef struct burn_drive_enumerator_struct burn_drive_enumerator_t;
|
|
||||||
|
|
||||||
|
|
||||||
/* The list of operating system dependent elements in struct burn_drive.
|
|
||||||
Usually they are initialized in sg-*.c:enumerate_common().
|
|
||||||
*/
|
|
||||||
#define BURN_OS_TRANSPORT_DRIVE_ELEMENTS \
|
|
||||||
int just_a_dummy;
|
|
||||||
|
|
15
libburn/os.h
15
libburn/os.h
@ -3,7 +3,7 @@
|
|||||||
Operating system specific libburn definitions and declarations.
|
Operating system specific libburn definitions and declarations.
|
||||||
The macros defined here are used by libburn modules in order to
|
The macros defined here are used by libburn modules in order to
|
||||||
avoid own system dependent case distinctions.
|
avoid own system dependent case distinctions.
|
||||||
Copyright (C) 2009 Thomas Schmitt <scdbackup@gmx.net>, provided under GPL
|
Copyright (C) 2006 Thomas Schmitt <scdbackup@gmx.net>, provided under GPL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef BURN_OS_H_INCLUDED
|
#ifndef BURN_OS_H_INCLUDED
|
||||||
@ -20,23 +20,14 @@
|
|||||||
#include "os-freebsd.h"
|
#include "os-freebsd.h"
|
||||||
|
|
||||||
|
|
||||||
#else
|
#else /* operating system case distinction */
|
||||||
#ifdef __linux
|
|
||||||
|
|
||||||
|
|
||||||
/* --------- Linux kernels 2.4 and 2.6 with Linux SCSI Generic (sg) -------- */
|
/* --------- Linux kernels 2.4 and 2.6 with Linux SCSI Generic (sg) -------- */
|
||||||
#include "os-linux.h"
|
#include "os-linux.h"
|
||||||
|
|
||||||
|
|
||||||
#else
|
#endif /* End of operating system case distinction */
|
||||||
|
|
||||||
|
|
||||||
/* --------- Any other system. With dummy MMC transport sg-dummy.c --------- */
|
|
||||||
#include "os-dummy.h"
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* ! __linux */
|
|
||||||
#endif /* ! __FreeBSD__ */
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* ! BURN_OS_H_INCLUDED */
|
#endif /* ! BURN_OS_H_INCLUDED */
|
||||||
|
@ -1,229 +0,0 @@
|
|||||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
This is the main operating system dependent SCSI part of libburn. It implements
|
|
||||||
the transport level aspects of SCSI control and command i/o.
|
|
||||||
|
|
||||||
Present implementation: default dummy which enables libburn only to work
|
|
||||||
with stdio: pseudo drive addresses.
|
|
||||||
For real implementations see sg-linux.c or sg-freebsd.c
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#ifdef Libburn_os_has_statvfS
|
|
||||||
#include <sys/statvfs.h>
|
|
||||||
#endif /* Libburn_os_has_stavtfS */
|
|
||||||
|
|
||||||
#include "transport.h"
|
|
||||||
#include "drive.h"
|
|
||||||
#include "sg.h"
|
|
||||||
#include "spc.h"
|
|
||||||
#include "mmc.h"
|
|
||||||
#include "sbc.h"
|
|
||||||
#include "debug.h"
|
|
||||||
#include "toc.h"
|
|
||||||
#include "util.h"
|
|
||||||
|
|
||||||
#include "libdax_msgs.h"
|
|
||||||
extern struct libdax_msgs *libdax_messenger;
|
|
||||||
|
|
||||||
|
|
||||||
/** Returns the next index number and the next enumerated drive address.
|
|
||||||
The enumeration has to cover all available and accessible drives. It is
|
|
||||||
allowed to return addresses of drives which are not available but under
|
|
||||||
some (even exotic) circumstances could be available. It is on the other
|
|
||||||
hand allowed, only to hand out addresses which can really be used right
|
|
||||||
in the moment of this call. (This implementation chooses the former.)
|
|
||||||
@param idx An opaque handle. Make no own theories about it.
|
|
||||||
@param adr Takes the reply
|
|
||||||
@param adr_size Gives maximum size of reply including final 0
|
|
||||||
@param initialize 1 = start new,
|
|
||||||
0 = continue, use no other values for now
|
|
||||||
-1 = finish
|
|
||||||
@return 1 = reply is a valid address , 0 = no further address available
|
|
||||||
-1 = severe error (e.g. adr_size too small)
|
|
||||||
*/
|
|
||||||
int sg_give_next_adr(burn_drive_enumerator_t *idx,
|
|
||||||
char adr[], int adr_size, int initialize)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/** Brings all available, not-whitelist-banned, and accessible drives into
|
|
||||||
libburn's list of drives.
|
|
||||||
*/
|
|
||||||
/* ts A61115: replacing call to sg-implementation internals from drive.c */
|
|
||||||
int scsi_enumerate_drives(void)
|
|
||||||
{
|
|
||||||
libdax_msgs_submit(libdax_messenger, -1, 0x0002016b,
|
|
||||||
LIBDAX_MSGS_SEV_WARNING, LIBDAX_MSGS_PRIO_HIGH,
|
|
||||||
"No MMC transport adapter is present. Running on sg-dummy.c.",
|
|
||||||
0, 0);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/** Tells wether libburn has the given drive in use or exclusively reserved.
|
|
||||||
If it is "open" then libburn will eventually call sg_release() on it when
|
|
||||||
it is time to give up usage resp. reservation.
|
|
||||||
*/
|
|
||||||
/** Published as burn_drive.drive_is_open() */
|
|
||||||
int sg_drive_is_open(struct burn_drive * d)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/** Opens the drive for SCSI commands and - if burn activities are prone
|
|
||||||
to external interference on your system - obtains an exclusive access lock
|
|
||||||
on the drive. (Note: this is not physical tray locking.)
|
|
||||||
A drive that has been opened with sg_grab() will eventually be handed
|
|
||||||
over to sg_release() for closing and unreserving.
|
|
||||||
*/
|
|
||||||
int sg_grab(struct burn_drive *d)
|
|
||||||
{
|
|
||||||
libdax_msgs_submit(libdax_messenger, d->global_index, 0x0002016a,
|
|
||||||
LIBDAX_MSGS_SEV_FAILURE, LIBDAX_MSGS_PRIO_HIGH,
|
|
||||||
"No MMC transport adapter is present. Running on sg-dummy.c.",
|
|
||||||
0, 0);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/** Gives up the drive for SCSI commands and releases eventual access locks.
|
|
||||||
(Note: this is not physical tray locking.)
|
|
||||||
*/
|
|
||||||
int sg_release(struct burn_drive *d)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/** Sends a SCSI command to the drive, receives reply and evaluates wether
|
|
||||||
the command succeeded or shall be retried or finally failed.
|
|
||||||
Returned SCSI errors shall not lead to a return value indicating failure.
|
|
||||||
The callers get notified by c->error. An SCSI failure which leads not to
|
|
||||||
a retry shall be notified via scsi_notify_error().
|
|
||||||
The Libburn_log_sg_commandS facility might be of help when problems with
|
|
||||||
a drive have to be examined. It shall stay disabled for normal use.
|
|
||||||
@return: 1 success , <=0 failure
|
|
||||||
*/
|
|
||||||
int sg_issue_command(struct burn_drive *d, struct command *c)
|
|
||||||
{
|
|
||||||
libdax_msgs_submit(libdax_messenger, d->global_index, 0x0002016a,
|
|
||||||
LIBDAX_MSGS_SEV_FAILURE, LIBDAX_MSGS_PRIO_HIGH,
|
|
||||||
"No MMC transport adapter is present. Running on sg-dummy.c.",
|
|
||||||
0, 0);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/** Tries to obtain SCSI address parameters.
|
|
||||||
@return 1 is success , 0 is failure
|
|
||||||
*/
|
|
||||||
int sg_obtain_scsi_adr(char *path, int *bus_no, int *host_no, int *channel_no,
|
|
||||||
int *target_no, int *lun_no)
|
|
||||||
{
|
|
||||||
libdax_msgs_submit(libdax_messenger, -1, 0x0002016c,
|
|
||||||
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH,
|
|
||||||
"No MMC transport adapter is present. Running on sg-dummy.c.",
|
|
||||||
0, 0);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/** Tells wether a text is a persistent address as listed by the enumeration
|
|
||||||
functions.
|
|
||||||
*/
|
|
||||||
int sg_is_enumerable_adr(char *adr)
|
|
||||||
{
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/** Estimate the potential payload capacity of a file address.
|
|
||||||
@param path The address of the file to be examined. If it does not
|
|
||||||
exist yet, then the directory will be inquired.
|
|
||||||
@param bytes The pointed value gets modified, but only if an estimation is
|
|
||||||
possible.
|
|
||||||
@return -2 = cannot perform necessary operations on file object
|
|
||||||
-1 = neither path nor dirname of path exist
|
|
||||||
0 = could not estimate size capacity of file object
|
|
||||||
1 = estimation has been made, bytes was set
|
|
||||||
*/
|
|
||||||
int burn_os_stdio_capacity(char *path, off_t *bytes)
|
|
||||||
{
|
|
||||||
struct stat stbuf;
|
|
||||||
|
|
||||||
#ifdef Libburn_os_has_statvfS
|
|
||||||
struct statvfs vfsbuf;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
char testpath[4096], *cpt;
|
|
||||||
long blocks;
|
|
||||||
off_t add_size = 0;
|
|
||||||
|
|
||||||
testpath[0] = 0;
|
|
||||||
blocks = *bytes / 512;
|
|
||||||
if (stat(path, &stbuf) == -1) {
|
|
||||||
strcpy(testpath, path);
|
|
||||||
cpt = strrchr(testpath, '/');
|
|
||||||
if(cpt == NULL)
|
|
||||||
strcpy(testpath, ".");
|
|
||||||
else if(cpt == testpath)
|
|
||||||
testpath[1] = 0;
|
|
||||||
else
|
|
||||||
*cpt = 0;
|
|
||||||
if (stat(testpath, &stbuf) == -1)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
#ifdef Libburn_if_this_was_linuX
|
|
||||||
|
|
||||||
} else if(S_ISBLK(stbuf.st_mode)) {
|
|
||||||
fd = open(path, open_mode);
|
|
||||||
if (fd == -1)
|
|
||||||
return -2;
|
|
||||||
ret = ioctl(fd, BLKGETSIZE, &blocks);
|
|
||||||
close(fd);
|
|
||||||
if (ret == -1)
|
|
||||||
return -2;
|
|
||||||
*bytes = ((off_t) blocks) * (off_t) 512;
|
|
||||||
|
|
||||||
#endif /* Libburn_if_this_was_linuX */
|
|
||||||
|
|
||||||
} else if(S_ISREG(stbuf.st_mode)) {
|
|
||||||
add_size = stbuf.st_blocks * (off_t) 512;
|
|
||||||
strcpy(testpath, path);
|
|
||||||
} else
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (testpath[0]) {
|
|
||||||
|
|
||||||
#ifdef Libburn_os_has_statvfS
|
|
||||||
|
|
||||||
if (statvfs(testpath, &vfsbuf) == -1)
|
|
||||||
return -2;
|
|
||||||
*bytes = add_size + ((off_t) vfsbuf.f_bsize) *
|
|
||||||
(off_t) vfsbuf.f_bavail;
|
|
||||||
|
|
||||||
#else /* Libburn_os_has_statvfS */
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
#endif /* ! Libburn_os_has_stavtfS */
|
|
||||||
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
28
libburn/sg.c
28
libburn/sg.c
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* sg.c
|
/* sg.c
|
||||||
Switcher for operating system dependent transport level modules of libburn.
|
Switcher for operating system dependent transport level modules of libburn.
|
||||||
Copyright (C) 2009 Thomas Schmitt <scdbackup@gmx.net>, provided under GPL
|
Copyright (C) 2006 Thomas Schmitt <scdbackup@gmx.net>, provided under GPL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@ -10,32 +10,8 @@
|
|||||||
#include "sg-freebsd.c"
|
#include "sg-freebsd.c"
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#ifdef __linux
|
|
||||||
|
|
||||||
#include "sg-linux.c"
|
#include "sg-linux.c"
|
||||||
|
|
||||||
#else
|
#endif
|
||||||
|
|
||||||
/* The dummy adapter formally fulfills the expectations of libburn towards
|
|
||||||
its SCSI command transport. It will show no drives and perform no SCSI
|
|
||||||
commands.
|
|
||||||
libburn will then be restricted to using its stdio pseudo drives.
|
|
||||||
*/
|
|
||||||
static int intentional_compiler_warning(void)
|
|
||||||
{
|
|
||||||
int INTENTIONAL_COMPILER_WARNING_;
|
|
||||||
int Cannot_recognize_Linux_nor_FreeBSD_;
|
|
||||||
int Have_to_use_dummy_MMC_transport_adapter_;
|
|
||||||
int This_libburn_will_not_be_able_to_operate_on_real_CD_drives;
|
|
||||||
int Have_to_use_dummy_MMC_transport_adapter;
|
|
||||||
int Cannot_recognize_Linux_nor_FreeBSD;
|
|
||||||
int INTENTIONAL_COMPILER_WARNING;
|
|
||||||
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
#include "sg-dummy.c"
|
|
||||||
|
|
||||||
#endif /* ! __linux */
|
|
||||||
#endif /* ! __FreeBSD__ */
|
|
||||||
|
|
||||||
|
@ -104,9 +104,7 @@ 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[320];
|
char msg[160];
|
||||||
unsigned char sense[14];
|
|
||||||
enum response resp;
|
|
||||||
|
|
||||||
if (!(flag & 1))
|
if (!(flag & 1))
|
||||||
usleep(100000);
|
usleep(100000);
|
||||||
@ -140,24 +138,10 @@ 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,
|
||||||
@ -1138,20 +1122,6 @@ 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",
|
||||||
|
@ -205,11 +205,6 @@ struct burn_drive
|
|||||||
with BD-RE */
|
with BD-RE */
|
||||||
int do_stream_recording;
|
int do_stream_recording;
|
||||||
|
|
||||||
/* ts A90227 : the LBA where stream recording shall start.
|
|
||||||
Writing to lower LBA will be done without streaming.
|
|
||||||
*/
|
|
||||||
int stream_recording_start;
|
|
||||||
|
|
||||||
/* ts A61218 from 51h READ DISC INFORMATION */
|
/* ts A61218 from 51h READ DISC INFORMATION */
|
||||||
int bg_format_status; /* 0=needs format start, 1=needs format restart*/
|
int bg_format_status; /* 0=needs format start, 1=needs format restart*/
|
||||||
|
|
||||||
@ -241,9 +236,6 @@ 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,70 +1399,10 @@ 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, multi_mem;
|
int i,ret;
|
||||||
struct burn_drive *d = o->drive;
|
struct burn_drive *d = o->drive;
|
||||||
|
|
||||||
/* ts A90108 */
|
/* >>> open_session ? */
|
||||||
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,
|
||||||
@ -1473,11 +1413,7 @@ 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) {
|
||||||
@ -2095,7 +2031,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, multi_mem;
|
int first = 1, i, ret, lba, nwa = 0;
|
||||||
off_t default_size;
|
off_t default_size;
|
||||||
char msg[80];
|
char msg[80];
|
||||||
|
|
||||||
@ -2106,12 +2042,8 @@ void burn_disc_write_sync(struct burn_write_opts *o, struct burn_disc *disc)
|
|||||||
/* ts A61224 */
|
/* ts A61224 */
|
||||||
burn_disc_init_write_status(o, disc); /* must be done very early */
|
burn_disc_init_write_status(o, disc); /* must be done very early */
|
||||||
|
|
||||||
/* ts A80412 , A90227 */
|
/* ts A80412 */
|
||||||
d->do_stream_recording = !!o->do_stream_recording;
|
d->do_stream_recording = o->do_stream_recording;
|
||||||
if (o->do_stream_recording >= 16)
|
|
||||||
d->stream_recording_start = o->do_stream_recording;
|
|
||||||
else
|
|
||||||
d->stream_recording_start = 0;
|
|
||||||
|
|
||||||
d->buffer = &buf;
|
d->buffer = &buf;
|
||||||
memset(d->buffer, 0, sizeof(struct buffer));
|
memset(d->buffer, 0, sizeof(struct buffer));
|
||||||
@ -2249,12 +2181,7 @@ return crap. so we send the command, then ignore the result.
|
|||||||
d->alba += 4500;
|
d->alba += 4500;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
multi_mem = o->multi;
|
if (!burn_write_session(o, disc->session[i]))
|
||||||
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