Compare commits

..

36 Commits

Author SHA1 Message Date
1612e037ca Mentioned bug fix and pl01 2013-05-31 09:02:04 +00:00
64baafc17e Bug fix: cdrskin -msinfo on DVD and BD reported old session start = next writable address. Regression introduced by version 1.2.8 (rev 4956). 2013-05-31 08:51:44 +00:00
b4c2f450d1 Branching for libburn bugfix release 1.3.0.pl01 2013-05-31 08:47:14 +00:00
ae0dd31ae6 libburn release 1.3.0 is ready 2013-05-17 18:36:57 +00:00
311d5347e1 Updated change log 2013-05-17 09:42:50 +00:00
da046bc232 Updated cdrskin tarball generator 2013-05-17 09:36:27 +00:00
5c1ef0d55a Made number transition to 1.3.0 2013-05-17 09:35:09 +00:00
5c2c4e3b40 Branching for libburn release 1.3.0 2013-05-17 08:12:20 +00:00
ac2bfec065 Updated change log 2013-05-10 07:30:48 +00:00
c566ea03cf Added new item to list of error codes 2013-05-10 07:26:11 +00:00
3632e1be4e Bug fix: DVD+R with damaged TOC were reported by -minfo with wrong end address 2013-05-10 06:41:53 +00:00
f18b832a82 Updated change log 2013-04-01 12:56:35 +00:00
1f92419cb4 Bug fix: Formatting of BD-RE used certification regardless of drive capabilities 2013-04-01 12:19:14 +00:00
d6e15a0139 Forgot to increment cdrskin version number 2013-04-01 12:17:05 +00:00
e0db790103 Updated change log 2013-03-18 21:21:35 +00:00
9bc362f59b Made number transition to 1.2.9 2013-03-18 21:09:13 +00:00
44d5f3ce4e Updated cdrskin tarball generator 2013-03-18 08:31:34 +00:00
0f43a39a45 Made number transition to 1.2.8 2013-03-18 08:29:37 +00:00
0a1a085471 Avoiding SYNCHRONIZE CACHE if DVD track preparation has failed 2013-03-12 11:48:07 +00:00
a1fdfe1519 Always considering mode page 2A when looking for min and max speed 2013-03-05 18:55:03 +00:00
bbb6315af0 Always considering mode page 2A when looking for min and max speed 2013-03-05 18:54:19 +00:00
40d83b2314 Updated change log 2013-03-05 12:51:03 +00:00
c82ac0a825 Mentioned --list_speeds in manual page 2013-03-05 12:47:56 +00:00
46b598abd2 New cdrskin option --list_speeds 2013-03-05 12:45:37 +00:00
c7784b79b7 Still correcting the bug fix of rev 4975 2013-03-05 12:42:41 +00:00
f1b3184531 Corrected previous bug fix which caused speed descriptors to appear twice 2013-03-04 23:25:27 +00:00
a18c862e84 Bug fix: On some drives the request for minimum speed yielded maximum speed 2013-03-04 21:13:32 +00:00
c2903ab717 Corrected wrong use of sizeof 2013-02-26 08:01:51 +00:00
04ccaebff7 Updated cdrskin copyright message 2013-01-16 18:12:41 +00:00
2e83dc554b Updated change log 2013-01-16 18:05:44 +00:00
3a17a8a014 Bug fix: All CD tracks were reported with the sizes of the tracks in the first session. Regression introduced with version 1.2.0 (rev 4552). 2013-01-15 10:42:21 +00:00
ffca3e89dd Made use of new API features to handle incomplete sessions 2013-01-12 19:54:59 +00:00
676231c362 New API call burn_disc_get_incomplete_sessions(), new burn_toc_entry.track_status_bits 2013-01-12 19:51:21 +00:00
d76c715df7 Updated change log 2013-01-08 14:56:13 +00:00
9aa47792e0 Updated cdrskin tarball generator 2013-01-08 14:53:46 +00:00
f4cfe9b267 Made number transition to 1.2.7 2013-01-08 14:52:30 +00:00
22 changed files with 990 additions and 124 deletions

View File

@ -1,17 +1,41 @@
libburn-1.3.0.pl01.tar.gz Fri May 31 2013
===============================================================================
* Bug fix: cdrskin -msinfo on DVD and BD reported
old session start = next writable address.
Regression introduced by version 1.2.8.
libburn-1.3.0.tar.gz Fri May 17 2013
===============================================================================
* Bug fix: Full formatting of BD-RE used certification regardless of drive
capabilities
* Bug fix: DVD+R with damaged TOC were reported by -minfo with wrong end
address
libburn-1.2.8.tar.gz Mon Mar 18 2013
===============================================================================
* Bug fix: All CD tracks were reported with the sizes of the tracks in the
first session. Regression introduced with version 1.2.0 (rev 4552).
* Bug fix: On some drives the request for minimum speed yielded maximum speed
* New cdrskin option --list_speeds
* -toc and -minfo now report about tracks in the incomplete session
* New API call burn_disc_get_incomplete_sessions()
* New burn_toc_entry component .track_status_bits
libburn-1.2.6.tar.gz Tue Jan 08 2013
===============================================================================
* New cdrskin option --no_load
* Bug fix: Speed setting had no effect on BD media
* New cdrskin option --no_load
* New API call burn_read_audio()
* New API call burn_list_sev_texts()
libburn-1.2.4.tar.gz Fri Jul 20 2012
===============================================================================
* Bug fix: CD SAO sessions with data tracks started by an audio pause
* Bug fix: CD tracks were perceived 2 sectors too short.
Nice with TAO, bad with SAO.
* Bug fix: cdrskin SIGSEGV if track source was added when no drive was available
* New API call burn_write_opts_set_obs_pad(), ./configure --enable-dvd-obs-pad
* New cdrskin option --obs_pad
* Bug fix: CD SAO sessions with data tracks started by an audio pause
* Bug fix: CD tracks were perceived 2 sectors too short. Nice with TAO, bad with SAO.
* Bug fix: cdrskin SIGSEGV if track source was added when no drive was available
libburn-1.2.2.tar.gz Mon Apr 02 2012
===============================================================================

View File

@ -118,9 +118,9 @@ test_structest_CPPFLAGS = -Ilibburn
test_structest_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
test_structest_SOURCES = test/structest.c
## cdrskin construction site - ts A60816 - B20720
## cdrskin construction site - ts A60816 - B30517
cdrskin_cdrskin_CPPFLAGS = -Ilibburn
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_1_2_6
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_1_3_0
# cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
# ts A80123, change proposed by Simon Huggins to cause dynamic libburn linking

23
README
View File

@ -11,7 +11,7 @@ Still containing parts of Libburn. By Derek Foreman <derek@signalmarketing.com>
and Ben Jansens <xor@orodu.net>
Copyright (C) 2002-2006 Derek Foreman and Ben Jansens
http://files.libburnia-project.org/releases/libburn-1.2.6.tar.gz
http://files.libburnia-project.org/releases/libburn-1.3.0.pl01.tar.gz
------------------------------------------------------------------------------
@ -19,10 +19,10 @@ Copyright (C) 2002-2006 Derek Foreman and Ben Jansens
From tarball
Obtain libburn-1.2.6.tar.gz, take it to a directory of your choice and do:
Obtain libburn-1.3.0.pl01.tar.gz, take it to a directory of your choice and do:
tar xzf libburn-1.2.6.tar.gz
cd libburn-1.2.6
tar xzf libburn-1.3.0.pl01.tar.gz
cd libburn-1.3.0
./configure --prefix=/usr
make
@ -692,6 +692,21 @@ Project history as far as known to me:
programs. A proof of concept for a GUI frontend has been implemented:
xorriso-tcltk
- Mon Mar 18 2013 release 1.2.8:
Some rarely occuring bugs were fixed in libisofs and libburn. libburn's
handling of incomplete sessions has been improved. xorriso's mkisofs
emulation learned to set El Torito section id strings.
- Fri May 17 2013 release 1.3.0:
Several bugs were fixed in the libraries and in xorriso. The recently
introduced new boot preparation capabilities have been tested. New
boot preparation options for GRUB2 were added.
- Fri May 31 2013 patch release libburn-1.3.0.pl01:
cdrskin -msinfo on DVD and BD reported as old session start the same
number as the next writable address.
Regression introduced by version 1.2.8.
------------------------------------------------------------------------------

View File

@ -4,7 +4,7 @@
cdrskin. By Thomas Schmitt <scdbackup@gmx.net>
Integrated sub project of libburnia-project.org but also published via:
http://scdbackup.sourceforge.net/cdrskin_eng.html
http://scdbackup.sourceforge.net/cdrskin-1.2.6.tar.gz
http://scdbackup.sourceforge.net/cdrskin-1.3.0.pl01.tar.gz
Copyright (C) 2006-2013 Thomas Schmitt, provided under GPL version 2 or later.
------------------------------------------------------------------------------
@ -26,10 +26,10 @@ By using this software you agree to the disclaimer at the end of this text
Compilation, First Glimpse, Installation
Obtain cdrskin-1.2.6.tar.gz, take it to a directory of your choice and do:
Obtain cdrskin-1.3.0.pl01.tar.gz, take it to a directory of your choice and do:
tar xzf cdrskin-1.2.6.tar.gz
cd cdrskin-1.2.6
tar xzf cdrskin-1.3.0.pl01.tar.gz
cd cdrskin-1.3.0
Within that directory execute:

View File

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

View File

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

View File

@ -2,7 +2,7 @@
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.TH CDRSKIN 1 "Version 1.2.6, Jan 08, 2013"
.TH CDRSKIN 1 "Version 1.3.0, May 17, 2013"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
@ -1243,6 +1243,27 @@ List all ignored cdrecord options. The "-" options cannot be used as addresses
of track sources. No track source address may begin with a text equal to an
option which ends by "=". The list is ended by an empty line.
.TP
.BI \--list_speeds
Put out a list of speed values as reported by the output drive with
the loaded medium. This does not necessarily mean that the medium is writable
or that these speeds are actually achievable. Especially the
lists reported with empty drive or with ROM media obviously advertise
speeds for other media.
.br
It is not mandatory to use speed values out of the listed range.
The drive is supposed to choose a safe speed that is as near to the desired
speed as possible.
.br
At the end of the list, "Write speed L" and "Write speed H"
are the best guesses for lower and upper speed limit.
"Write speed l" and "Write speed h" may appear only with CD
and eventually override the list of other speed offers.
.br
Only if the drive reports contradicting speed information there will appear
"Write speed 0" or "Write speed-1", which tell the outcome of speed selection
by options speed=0 resp. speed=-1, if it deviates from "Write speed L"
resp. "Write speed H".
.TP
.BI \--long_toc
Like option -toc but marking each session start by a line "first: X last: Y"
and each session end by "track:lout ...".

View File

@ -87,7 +87,7 @@ or
/** The official program version */
#ifndef Cdrskin_prog_versioN
#define Cdrskin_prog_versioN "1.2.6"
#define Cdrskin_prog_versioN "1.3.0"
#endif
/** The official libburn interface revision to use.
@ -97,10 +97,10 @@ or
#define Cdrskin_libburn_majoR 1
#endif
#ifndef Cdrskin_libburn_minoR
#define Cdrskin_libburn_minoR 2
#define Cdrskin_libburn_minoR 3
#endif
#ifndef Cdrskin_libburn_micrO
#define Cdrskin_libburn_micrO 6
#define Cdrskin_libburn_micrO 0
#endif
@ -120,34 +120,34 @@ or
#undef Cdrskin_libburn_versioN
#endif
#ifdef Cdrskin_libburn_1_2_6
#define Cdrskin_libburn_versioN "1.2.6"
#ifdef Cdrskin_libburn_1_3_0
#define Cdrskin_libburn_versioN "1.3.0"
#endif
#ifdef Cdrskin_libburn_1_2_7
#define Cdrskin_libburn_versioN "1.2.7"
#ifdef Cdrskin_libburn_1_3_1
#define Cdrskin_libburn_versioN "1.3.1"
#endif
#ifndef Cdrskin_libburn_versioN
#define Cdrskin_libburn_1_2_6
#define Cdrskin_libburn_versioN "1.2.6"
#define Cdrskin_libburn_1_3_0
#define Cdrskin_libburn_versioN "1.3.0"
#endif
#ifdef Cdrskin_libburn_1_2_6
#ifdef Cdrskin_libburn_1_3_0
#undef Cdrskin_libburn_majoR
#undef Cdrskin_libburn_minoR
#undef Cdrskin_libburn_micrO
#define Cdrskin_libburn_majoR 1
#define Cdrskin_libburn_minoR 2
#define Cdrskin_libburn_micrO 6
#define Cdrskin_libburn_minoR 3
#define Cdrskin_libburn_micrO 0
#endif
#ifdef Cdrskin_libburn_1_2_7
#ifdef Cdrskin_libburn_1_3_1
#undef Cdrskin_libburn_majoR
#undef Cdrskin_libburn_minoR
#undef Cdrskin_libburn_micrO
#define Cdrskin_libburn_majoR 1
#define Cdrskin_libburn_minoR 2
#define Cdrskin_libburn_micrO 7
#define Cdrskin_libburn_minoR 3
#define Cdrskin_libburn_micrO 1
#endif
@ -2862,6 +2862,7 @@ set_dev:;
printf(" input_sheet_v07t=<path> read a Sony CD-TEXT definition file\n");
printf(" --list_formats list format descriptors for loaded media.\n");
printf(" --list_ignored_options list all ignored cdrecord options.\n");
printf(" --list_speeds list speed descriptors for loaded media.\n");
printf(" --long_toc print overview of media content\n");
printf(" modesty_on_drive=<options> no writing into full drive buffer\n");
printf(" --no_abort_handler exit even if the drive is in busy state\n");
@ -3110,7 +3111,7 @@ set_severities:;
int major, minor, micro;
printf(
"Cdrecord 2.01-Emulation Copyright (C) 2006-2012, see libburnia-project.org\n");
"Cdrecord 2.01-Emulation Copyright (C) 2006-2013, see libburnia-project.org\n");
if(o->fallback_program[0]) {
char *hargv[2];
@ -3343,6 +3344,7 @@ struct CdrskiN {
char msifile[Cdrskin_strleN];
int do_atip;
int do_list_speeds;
int do_list_formats;
#ifdef Libburn_develop_quality_scaN
@ -3593,6 +3595,7 @@ int Cdrskin_new(struct CdrskiN **skin, struct CdrpreskiN *preskin, int flag)
o->do_msinfo= 0;
o->msifile[0]= 0;
o->do_atip= 0;
o->do_list_speeds= 0;
o->do_list_formats= 0;
#ifdef Libburn_develop_quality_scaN
@ -4915,7 +4918,7 @@ int Cdrskin_toc(struct CdrskiN *skin, int flag)
{
int num_sessions= 0,num_tracks= 0,lba= 0,track_count= 0,total_tracks= 0;
int session_no, track_no, pmin, psec, pframe, ret, final_ret= 1;
int track_offset = 1;
int track_offset = 1, open_sessions= 0, have_real_open_session= 0;
struct burn_drive *drive;
struct burn_disc *disc= NULL;
struct burn_session **sessions;
@ -4951,21 +4954,32 @@ int Cdrskin_toc(struct CdrskiN *skin, int flag)
goto cannot_read;
}
sessions= burn_disc_get_sessions(disc,&num_sessions);
open_sessions= burn_disc_get_incomplete_sessions(disc);
if(num_sessions > 0)
track_offset = burn_session_get_start_tno(sessions[0], 0);
if(track_offset <= 0)
track_offset= 1;
if(flag&1) {
for(session_no= 0; session_no<num_sessions; session_no++) {
for(session_no= 0; session_no < num_sessions + open_sessions;
session_no++) {
tracks= burn_session_get_tracks(sessions[session_no],&num_tracks);
total_tracks+= num_tracks;
if(session_no == num_sessions + open_sessions - 1 && open_sessions > 0) {
total_tracks--; /* Do not count invisible track */
if(num_tracks > 1)
have_real_open_session= 1;
}
}
printf("first: %d last %d\n",
track_offset, total_tracks + track_offset - 1);
}
for(session_no= 0; session_no<num_sessions; session_no++) {
for(session_no= 0; session_no < num_sessions + open_sessions; session_no++) {
tracks= burn_session_get_tracks(sessions[session_no],&num_tracks);
if(tracks==NULL)
continue;
if(session_no == num_sessions + open_sessions - 1 && open_sessions > 0)
num_tracks--;
if(num_tracks <= 0)
continue;
if(!(flag&1))
printf("first: %d last: %d\n",
@ -4998,9 +5012,15 @@ int Cdrskin_toc(struct CdrskiN *skin, int flag)
printf(" mode: %d\n",((toc_entry.control&7)<4?0:1));
}
if((flag&1) && session_no<num_sessions-1)
if((flag&1) &&
session_no < num_sessions + open_sessions - 1 + have_real_open_session - 1)
continue;
burn_session_get_leadout_entry(sessions[session_no],&toc_entry);
if(have_real_open_session) {
/* Use start of invisible track */
burn_track_get_entry(tracks[num_tracks], &toc_entry);
} else {
burn_session_get_leadout_entry(sessions[session_no],&toc_entry);
}
if(toc_entry.extensions_valid&1) { /* DVD extension valid */
lba= toc_entry.start_lba;
burn_lba_to_msf(lba, &pmin, &psec, &pframe);
@ -5039,13 +5059,15 @@ summary:
strcpy(profile_name, "media");
printf("Media summary: %d sessions, %d tracks, %s %s\n",
num_sessions, track_count,
num_sessions + open_sessions - 1 + have_real_open_session, track_count,
s==BURN_DISC_BLANK ? "blank" :
s==BURN_DISC_APPENDABLE ? "appendable" :
s==BURN_DISC_FULL ? "closed" :
s==BURN_DISC_EMPTY ? "no " : "unknown ",
profile_name);
if(have_real_open_session)
printf("Warning : Incomplete session encountered !\n");
if(disc!=NULL)
burn_disc_free(disc);
@ -5067,7 +5089,7 @@ int Cdrskin_minfo(struct CdrskiN *skin, int flag)
{
int num_sessions= 0,num_tracks= 0,lba= 0,track_count= 0,total_tracks= 0;
int session_no, track_no, pmin, psec, pframe, ret, size= 0, nwa= 0;
int last_leadout= 0, ovwrt_full= 0, track_offset= 1;
int last_leadout= 0, ovwrt_full= 0, track_offset= 1, open_sessions= 0;
struct burn_drive *drive;
struct burn_disc *disc= NULL;
struct burn_session **sessions= NULL;
@ -5079,8 +5101,9 @@ int Cdrskin_minfo(struct CdrskiN *skin, int flag)
char media_class[80];
int nominal_sessions= 1, ftils= 1, ltils= 1, first_track= 1, read_capacity= 0;
int app_code, cd_info_valid, lra, alloc_blocks, free_blocks;
int have_real_open_session= 0;
off_t avail, buf_count;
char disc_type[80], bar_code[9], buf[2 * 2048];
char disc_type[80], bar_code[9], buf[2 * 2048], *type_text;
unsigned int disc_id;
drive= skin->drives[skin->driveno].drive;
@ -5138,15 +5161,17 @@ int Cdrskin_minfo(struct CdrskiN *skin, int flag)
} else {
sessions= burn_disc_get_sessions(disc, &num_sessions);
open_sessions= burn_disc_get_incomplete_sessions(disc);
if(num_sessions > 0)
track_offset= burn_session_get_start_tno(sessions[0], 0);
if(track_offset <= 0)
track_offset= 1;
first_track= track_offset;
nominal_sessions= num_sessions;
if(s == BURN_DISC_APPENDABLE)
nominal_sessions= num_sessions + open_sessions;
if(s == BURN_DISC_APPENDABLE && open_sessions == 0)
nominal_sessions++;
for(session_no= 0; session_no<num_sessions; session_no++) {
for(session_no= 0; session_no < num_sessions + open_sessions;
session_no++) {
ftils= total_tracks + 1;
tracks= burn_session_get_tracks(sessions[session_no],&num_tracks);
if(tracks==NULL)
@ -5157,7 +5182,7 @@ int Cdrskin_minfo(struct CdrskiN *skin, int flag)
&& total_tracks >= 2)
first_track= 2;
}
if(s == BURN_DISC_APPENDABLE)
if(s == BURN_DISC_APPENDABLE && open_sessions == 0)
ftils= ltils= total_tracks + 1;
}
printf("first track: %d\n", first_track);
@ -5187,7 +5212,7 @@ int Cdrskin_minfo(struct CdrskiN *skin, int flag)
printf("\n");
printf("Track Sess Type Start Addr End Addr Size\n");
printf("==============================================\n");
for(session_no= 0; session_no<num_sessions; session_no++) {
for(session_no= 0; session_no < num_sessions + open_sessions; session_no++) {
tracks= burn_session_get_tracks(sessions[session_no],&num_tracks);
if(tracks==NULL)
continue;
@ -5233,11 +5258,33 @@ int Cdrskin_minfo(struct CdrskiN *skin, int flag)
#endif /* Cdrskin_with_last_recorded_addresS */
if(session_no < num_sessions) {
type_text= ((toc_entry.control&7)<4) ? "Audio" : "Data";
} else {
if(track_no < num_tracks - 1) {
type_text= "Rsrvd";
have_real_open_session = 1;
} else {
type_text= "Blank";
}
if(toc_entry.extensions_valid & 4) {
if(toc_entry.track_status_bits & (1 << 14))
type_text= "Blank";
else if(toc_entry.track_status_bits & (1 << 16)) {
type_text= "Apdbl";
have_real_open_session = 1;
} else if(toc_entry.track_status_bits & (1 << 15)) {
type_text= "Rsrvd";
have_real_open_session = 1;
} else
type_text= "Invsb";
}
}
printf("%5d %5d %-6s %-10d %-10d %-10d\n",
track_count + track_offset - 1, session_no + 1,
((toc_entry.control&7)<4) ? "Audio" : "Data", lba, lra, size);
last_leadout= lba + size;
type_text, lba, lra, size);
if(session_no < num_sessions)
last_leadout= lba + size;
}
}
if(last_leadout > 0)
@ -5250,10 +5297,12 @@ int Cdrskin_minfo(struct CdrskiN *skin, int flag)
size= avail / 2048;
if(read_capacity == 0 && skin->media_is_overwriteable)
size= 0; /* unformatted overwriteable media */
printf("%5d %5d %-6s %-10d %-10d %-10d\n",
track_count + track_offset, nominal_sessions,
ovwrt_full ? "Data" : "Blank",
nwa, lba + size - 1, size);
if(nominal_sessions > num_sessions + open_sessions) {
printf("%5d %5d %-6s %-10d %-10d %-10d\n",
track_count + track_offset, nominal_sessions,
ovwrt_full ? "Data" : "Blank",
nwa, nwa + size - 1, size);
}
}
}
printf("\n");
@ -5284,6 +5333,9 @@ int Cdrskin_minfo(struct CdrskiN *skin, int flag)
printf("cdrskin: Above contrary statements follow cdrecord traditions.\n");
}
if(have_real_open_session)
printf("\nWarning: Incomplete session encountered !\n");
if(disc!=NULL)
burn_disc_free(disc);
if(s == BURN_DISC_EMPTY)
@ -5563,6 +5615,117 @@ ex:;
}
/** Perform --list_speeds
@param flag Bitfield for control purposes:
@return <=0 error, 1 success
*/
int Cdrskin_list_speeds(struct CdrskiN *skin, int flag)
{
struct burn_drive *drive;
int ret, i, profile_no, high= -1, low= 0x7fffffff, is_cd= 0;
char profile_name[90], *speed_unit= "D";
double speed_factor= 1385000.0, cd_factor= 75.0 * 2352;
struct burn_speed_descriptor *speed_list= NULL, *item, *other;
ret= Cdrskin_grab_drive(skin,0);
if(ret<=0)
return(ret);
drive= skin->drives[skin->driveno].drive;
ret= burn_drive_get_speedlist(drive, &speed_list);
if(ret <= 0) {
fprintf(stderr, "cdrskin: SORRY: Cannot obtain speed list info\n");
ret= 0; goto ex;
}
ret= burn_disc_get_profile(drive, &profile_no, profile_name);
printf("Media current: ");
if(profile_no > 0 && ret > 0) {
if(profile_name[0])
printf("%s\n", profile_name);
else
printf("%4.4Xh\n", profile_no);
} else
printf("is not recognizable\n");
if(profile_no >= 0x08 && profile_no <= 0x0a)
is_cd= profile_no;
speed_factor= Cdrskin_libburn_speed_factoR * 1000.0;
if(Cdrskin_libburn_speed_factoR == Cdrskin_libburn_cd_speed_factoR)
speed_unit= "C";
else if(Cdrskin_libburn_speed_factoR == Cdrskin_libburn_bd_speed_factoR)
speed_unit= "B";
for (item= speed_list; item != NULL; item= item->next) {
if(item->source == 1) {
/* CD mode page 2Ah : report only if not same speed by GET PERFORMANCE */
for(other= speed_list; other != NULL; other= other->next)
if(other->source == 2 && item->write_speed == other->write_speed)
break;
if(other != NULL)
continue;
}
printf("Write speed : %5dk , %4.1fx%s\n",
item->write_speed,
((double) item->write_speed) * 1000.0 / speed_factor, speed_unit);
if(item->write_speed > high)
high= item->write_speed;
if(item->write_speed < low)
low= item->write_speed;
}
/* Maybe there is ATIP info */
if(is_cd) {
ret= burn_disc_read_atip(drive);
if(ret < 0)
goto ex;
if(ret > 0) {
for(i= 0; i < 2; i++) {
if(i == 0)
ret= burn_drive_get_min_write_speed(drive);
else
ret= burn_drive_get_write_speed(drive);
if(ret > 0) {
if(ret < low || (i == 0 && ret != low)) {
printf("Write speed l: %5dk , %4.1fx%s\n",
ret, ((double) ret) * 1000.0 / cd_factor, "C");
low= ret;
}
if(ret > high || (i == 1 && ret != high)) {
printf("Write speed h: %5dk , %4.1fx%s\n",
ret, ((double) ret) * 1000.0 / cd_factor, "C");
high= ret;
}
}
}
}
}
if(high > -1) {
printf("Write speed L: %5dk , %4.1fx%s\n",
low, ((double) low) * 1000.0 / speed_factor, speed_unit);
printf("Write speed H: %5dk , %4.1fx%s\n",
high, ((double) high) * 1000.0 / speed_factor, speed_unit);
ret= burn_drive_get_best_speed(drive, -1, &item, 2);
if(ret > 0 && item != NULL)
if(item->write_speed != low)
printf("Write speed 0: %5dk , %4.1fx%s\n",
item->write_speed,
((double) item->write_speed) * 1000.0 / speed_factor, speed_unit);
ret= burn_drive_get_best_speed(drive, 0, &item, 2);
if(ret > 0 && item != NULL)
if(item->write_speed != high)
printf("Write speed-1: %5dk , %4.1fx%s\n",
item->write_speed,
((double) item->write_speed) * 1000.0 / speed_factor, speed_unit);
} else {
fprintf(stderr,
"cdrskin: SORRY : Could not get any write speed information from drive");
}
ret= 1;
ex:;
if(speed_list != NULL)
burn_drive_free_speedlist(&speed_list);
return(ret);
}
int Cdrskin_read_textfile(struct CdrskiN *skin, char *path, int flag)
{
int ret, num_packs = 0;
@ -7388,7 +7551,7 @@ int Cdrskin_qcheck(struct CdrskiN *skin, int flag)
*/
int Cdrskin_msinfo(struct CdrskiN *skin, int flag)
{
int num_sessions, session_no, ret, num_tracks;
int num_sessions, session_no, ret, num_tracks, open_sessions= 0;
int nwa= -123456789, lba= -123456789, aux_lba;
char msg[80];
enum burn_disc_status s;
@ -7428,12 +7591,29 @@ int Cdrskin_msinfo(struct CdrskiN *skin, int flag)
{ret= 0; goto ex;}
}
sessions= burn_disc_get_sessions(disc,&num_sessions);
for(session_no= 0; session_no<num_sessions; session_no++) {
open_sessions= burn_disc_get_incomplete_sessions(disc);
for(session_no= 0; session_no < num_sessions + open_sessions; session_no++) {
tracks= burn_session_get_tracks(sessions[session_no],&num_tracks);
if(tracks==NULL || num_tracks<=0)
continue;
burn_track_get_entry(tracks[0],&toc_entry);
if(toc_entry.extensions_valid&1) { /* DVD extension valid */
if(session_no >= num_sessions) {
/* libburn-1.3.0.pl01 : 2013.05.31.080001
Bug fix: cdrskin -msinfo on DVD and BD reported
old session start = next writable address.
Regression introduced by version 1.2.8 (rev 4956).
*/
if(!(toc_entry.extensions_valid & 4))
continue; /* open session with no track status bits from libburn */
if((toc_entry.track_status_bits & (1 << 14)) ||
!((toc_entry.track_status_bits & (1 << 16)) ||
((toc_entry.track_status_bits & (1 << 17)) &&
toc_entry.last_recorded_address > toc_entry.start_lba)))
continue; /* Blank or not appendable and not recorded */
}
lba= toc_entry.start_lba;
} else {
lba= burn_msf_to_lba(toc_entry.pmin,toc_entry.psec,toc_entry.pframe);
@ -8160,6 +8340,10 @@ set_isrc:;
printf("%s\n",ignored_full_options[k]);
printf("\n");
} else if(strcmp(argv[i],"--list_speeds")==0) {
skin->do_list_speeds= 1;
skin->preskin->demands_cdrskin_caps= 1;
} else if(strncmp(argv[i],"fallback_program=",17)==0) {
/* is handled in Cdrpreskin_setup() */;
@ -8924,14 +9108,23 @@ int Cdrskin_run(struct CdrskiN *skin, int *exit_value, int flag)
if(ret<=0)
{*exit_value= 7; goto ex;}
}
if(skin->do_list_speeds) {
if(skin->n_drives<=0)
{*exit_value= 17; goto no_drive;}
if(Cdrskin__is_aborting(0))
goto ex;
ret= Cdrskin_list_speeds(skin, 0);
if(ret<=0)
{*exit_value= 17; goto ex;}
}
if(skin->do_list_formats) {
if(skin->n_drives<=0)
{*exit_value= 14; goto no_drive;}
{*exit_value= 16; goto no_drive;}
if(Cdrskin__is_aborting(0))
goto ex;
ret= Cdrskin_list_formats(skin, 0);
if(ret<=0)
{*exit_value= 14; goto ex;}
{*exit_value= 16; goto ex;}
}
if(skin->do_blank) {
if(skin->n_drives<=0)

View File

@ -65,7 +65,7 @@ connected via SCSI, PATA (aka IDE, ATA), USB, or SATA.
GPL software included:<BR>
</H2>
<DL>
<DT>libburn-1.2.6</DT>
<DT>libburn-1.3.0.pl01</DT>
<DD>(founded by Derek Foreman and Ben Jansens,
developed and maintained since August 2006 by
Thomas Schmitt from team of libburnia-project.org)
@ -200,13 +200,13 @@ Standalone ISO 9660 multi-session CD/DVD/BD tool
<P>
<DL>
<DT>Download as source code (see README):</DT>
<DD><A HREF="cdrskin-1.2.6.tar.gz">cdrskin-1.2.6.tar.gz</A>
(940 KB).
<DD><A HREF="cdrskin-1.3.0.pl01.tar.gz">cdrskin-1.3.0.pl01.tar.gz</A>
(950 KB).
</DD>
<DD><A HREF="cdrskin-1.2.6.tar.gz.sig">cdrskin-1.2.6.tar.gz.sig</A></DD>
<DD><A HREF="cdrskin-1.3.0.pl01.tar.gz.sig">cdrskin-1.3.0.pl01.tar.gz.sig</A></DD>
<DD>
(detached GPG signature for verification by
<KBD>gpg --verify cdrskin-1.2.6.tar.gz.sig cdrskin-1.2.6.tar.gz</KBD>
<KBD>gpg --verify cdrskin-1.3.0.pl01.tar.gz.sig cdrskin-1.3.0.pl01.tar.gz</KBD>
<BR>
after <KBD>gpg --keyserver keys.gnupg.net --recv-keys ABC0A854</KBD>).
</DD>
@ -257,49 +257,74 @@ cdrskin_0.4.2.pl00-x86-suse9_0-static.tar.gz</A>, (310 KB), -static compiled,
<HR>
<P>
Enhancements towards previous stable version cdrskin-1.2.4:
Enhancements towards previous stable version cdrskin-1.2.8:
<UL>
<LI>New option --no_load</LI>
<LI>none</LI>
<!--
<LI>none</LI>
-->
</UL>
Bug fixes towards cdrskin-1.2.4:
Bug fixes towards cdrskin-1.2.8:
<UL>
<LI>Speed setting had no effect on BD media</LI>
<LI>
Full formatting of BD-RE used certification regardless of drive capabilities
</LI>
<LI>
DVD+R with damaged TOC were reported by -minfo with wrong end address
</LI>
<!--
<LI>none</LI>
-->
</UL>
Bug fix towards cdrskin-1.3.0:
<UL>
<LI>
cdrskin -msinfo on DVD and BD reported
old session start = next writable address.
Regression introduced by version 1.2.8
</LI>
</UL>
<HR>
<P>
<DL>
<DT><H3>Development snapshot, version 1.2.7 :</H3></DT>
<DD>Enhancements towards current stable version 1.2.6:
<DT><H3>Development snapshot, version 1.3.1 :</H3></DT>
<DD>Enhancements towards current stable version 1.3.0.pl01:
<UL>
<LI>none yet</LI>
<LI>
New option textfile_to_v07t=
</LI>
<LI>
New options cdtext_to_textfile= and cdtext_to_v07t=
</LI>
<LI>
New options extract_audio_to= , extract_tracks= , extract_basename= ,
--extract_dap
</LI>
<!--
<LI>none yet</LI>
-->
</UL>
</DD>
<DD>Bug fixes towards cdrskin-1.2.6:
<DD>Bug fixes towards cdrskin-1.3.0.pl01:
<UL>
<LI>none yet</LI>
<!--
<LI>none yet</LI>
-->
</UL>
</DD>
<DD>&nbsp;</DD>
<DD><A HREF="README_cdrskin_devel">README 1.2.7</A>
<DD><A HREF="cdrskin__help_devel">cdrskin-1.2.7 --help</A></DD>
<DD><A HREF="cdrskin_help_devel">cdrskin-1.2.7 -help</A></DD>
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 1.2.7)</A></DD>
<DD><A HREF="README_cdrskin_devel">README 1.3.1</A>
<DD><A HREF="cdrskin__help_devel">cdrskin-1.3.1 --help</A></DD>
<DD><A HREF="cdrskin_help_devel">cdrskin-1.3.1 -help</A></DD>
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 1.3.1)</A></DD>
<DD>&nbsp;</DD>
<DT>Maintainers of cdrskin unstable packages please use SVN of
<A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT>
@ -319,8 +344,8 @@ admins with full system souvereignty.</DT>
<A HREF="README_cdrskin_devel">upcoming README</A> ):
</DD>
<DD>
<A HREF="cdrskin-1.2.7.tar.gz">cdrskin-1.2.7.tar.gz</A>
(940 KB).
<A HREF="cdrskin-1.3.1.tar.gz">cdrskin-1.3.1.tar.gz</A>
(950 KB).
</DD>
<!-- This is not offered any more since spring 2008
@ -516,11 +541,15 @@ and by <A HREF="http://sourceforge.net">sourceforge.net</A><BR>
<A href="http://sourceforge.net">
<IMG src="sflogo-88-1.png" BORDER="0" ALT="SourceForge Logo"></A>
<!-- on sourceforge use : <IMG src="http://sourceforge.net/sflogo.php?group_id=16010" width="88" height="31" border="0" alt="SourceForge Logo"></A> -->
<!--
<P>
Enjoying a FreeBSD shell account with the opportunity to
build and install cdrskin at<BR>
<A HREF="http://www.en.free-shells.com.ar">free-shells.com.ar</A>
</P>
-->
</FONT></CENTER>
<HR>
<DL>

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2013.01.08.090001"
#define Cdrskin_timestamP "2013.05.31.080001"

View File

@ -11554,7 +11554,7 @@ Made number transition to 1.2.6
+ cdrskin/add_ts_changes_to_libburn_1_2_7
Updated cdrskin tarball generator
08 Jan 2013 []
08 Jan 2013 [4938]
ChangeLog
cdrskin/changelog.txt
Updated change log
@ -11566,7 +11566,7 @@ Bug fix: Speed setting had no effect on BD media. Thanks to Dennis Vshivkov.
* New cdrskin option --no_load
[]
2013.01.08.144634 []
Makefile.am
configure.ac
README
@ -11579,24 +11579,378 @@ cdrskin/cdrskin_timestamp.h
cdrskin/cdrskin_eng.html
Made number transition to 1.2.7
[]
08 Jan 2013 [4947]
- cdrskin/add_ts_changes_to_libburn_1_2_4
- cdrskin/add_ts_changes_to_libburn_1_2_5
+ cdrskin/add_ts_changes_to_libburn_1_2_6
+ cdrskin/add_ts_changes_to_libburn_1_2_7
Updated cdrskin tarball generator
[]
08 Jan 2013 [4948]
ChangeLog
cdrskin/changelog.txt
Updated change log
[]
08 Jan 2013 [4949]
svn move -m libburn release 1.2.6 is ready
http://svn.libburnia-project.org/libburn/branches/1.2.6
http://svn.libburnia-project.org/libburn/tags/1.2.6
------------------------------------ cycle - cdrskin-1.2.7 -
------------------------------------ cycle - cdrskin-1.2.7 - 2013.01.08.150303
2013.01.12.195030 [4955]
libburn/libburn.h
libburn/transport.h
libburn/structure.h
libburn/structure.c
libburn/mmc.c
libburn/libburn.ver
New API call burn_disc_get_incomplete_sessions(), new burn_toc_entry.track_status_bits
2013.01.12.195311 [4956]
cdrskin/cdrskin.c
Made use of new API features to handle incomplete sessions
2013.01.15.104005 [4961]
libburn/structure.c
Bug fix: All CD tracks were reported with the sizes of the tracks in the first session. Regression introduced with version 1.2.0 (rev 4552).
16 Jan 2013 [4965]
ChangeLog
cdrskin/cdrskin_eng.html
cdrskin/changelog.txt
Updated change log
2013.01.16.181124 [4966]
cdrskin/cdrskin.c
Updated cdrskin copyright message
------------------------------------ cycle - cdrskin-1.2.7 - 2013.01.16.181124
* New API call burn_disc_get_incomplete_sessions()
* New burn_toc_entry component .track_status_bits
* -toc and -minfo now report about tracks in the incomplete session
* Bug fix: All CD tracks were reported with the sizes of the tracks in the
first session. Regression introduced with version 1.2.0 (rev 4552).
2013.02.26.080127 [4972]
libburn/drive.c
Corrected wrong use of sizeof
2013.03.04.211258 [4975]
libburn/mmc.c
Bug fix: On some drives the request for minimum speed yielded maximum speed
2013.03.04.232436 [4976]
libburn/mmc.c
Corrected previous bug fix which caused speed descriptors to appear twice
2013.03.05.124217 [4977]
libburn/mmc.c
Still correcting the bug fix of rev 4975
2013.03.05.124508 [4978]
cdrskin/cdrskin.c
New cdrskin option --list_speeds
05 Mar 2013 [4979]
cdrskin/cdrskin.1
Mentioned --list_speeds in manual page
05 Mar 2013 [4980]
ChangeLog
cdrskin/cdrskin_eng.html
cdrskin/changelog.txt
Updated change log
2013.03.05.185356 [4981]
libburn/mmc.c
Always considering mode page 2A when looking for min and max speed
2013.03.05.185440 [4982]
cdrskin/cdrskin.c
Always considering mode page 2A when looking for min and max speed
------------------------------------ cycle - cdrskin-1.2.7 - 2013.03.05.185655
* Bug fix: On some drives the request for minimum speed yielded maximum speed
* New cdrskin option --list_speeds
2013.03.12.114739 [4987]
libburn/write.c
Avoiding SYNCHRONIZE CACHE if DVD track preparation has failed
18 Mar 2013 [4994]
svn copy -m "Branching for libburn release 1.2.8"
http://svn.libburnia-project.org/libburn/trunk
http://svn.libburnia-project.org/libburn/branches/1.2.8
2013.03.18.080001 [4997]
Makefile.am
configure.ac
README
libburn/libburn.h
cdrskin/cdrskin.c
cdrskin/cdrskin.1
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/cdrskin_eng.html
Made number transition to 1.2.8
18 Mar 2013 [4998]
- cdrskin/add_ts_changes_to_libburn_1_2_6
- cdrskin/add_ts_changes_to_libburn_1_2_7
+ cdrskin/add_ts_changes_to_libburn_1_2_8
+ cdrskin/add_ts_changes_to_libburn_1_2_9
Updated cdrskin tarball generator
18 Mar 2013 [4999]
ChangeLog
cdrskin/changelog.txt
Updated change log
----------------------------------- release - libburn-1.2.8 - 2013.03.18.080001
* -toc and -minfo now report about tracks in the incomplete session
* New API call burn_disc_get_incomplete_sessions()
* New burn_toc_entry component .track_status_bits
* Bug fix: All CD tracks were reported with the sizes of the tracks in the
first session. Regression introduced with version 1.2.0 (rev 4552).
* Bug fix: On some drives the request for minimum speed yielded maximum speed
* New cdrskin option --list_speeds
2013.03.18.210519 [5007]
Makefile.am
configure.ac
README
libburn/libburn.h
cdrskin/cdrskin.c
cdrskin/cdrskin.1
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/cdrskin_eng.html
Made number transition to 1.2.9
18 Mar 2013 [4996]
- cdrskin/add_ts_changes_to_libburn_1_2_6
- cdrskin/add_ts_changes_to_libburn_1_2_7
+ cdrskin/add_ts_changes_to_libburn_1_2_8
+ cdrskin/add_ts_changes_to_libburn_1_2_9
Updated cdrskin tarball generator
18 Mar 2013 [5008]
ChangeLog
cdrskin/changelog.txt
Updated change log
18 Mar 2013 [5009]
svn move -m libburn release 1.2.8 is ready
http://svn.libburnia-project.org/libburn/branches/1.2.8
http://svn.libburnia-project.org/libburn/tags/1.2.8
------------------------------------ cycle - cdrskin-1.2.9 - 2013.03.18.211611
2013.04.01.121637 [5013]
cdrskin/cdrskin.c
Forgot to increment cdrskin version number
2013.04.01.121851 [5014]
libburn/mmc.c
libburn/libdax_msgs.h
Bug fix: Formatting of BD-RE used certification regardless of drive capabilities
01 Apr 2013 [5015]
ChangeLog
cdrskin/cdrskin_eng.html
cdrskin/changelog.txt
Updated change log
------------------------------------ cycle - cdrskin-1.2.9 - 2013.04.01.125750
Bug fix: Formatting of BD-RE used certification regardless of drive capabilities
2013.05.10.064018 [5034]
cdrskin/cdrskin.c
Bug fix: DVD+R with damaged TOC were reported by -minfo with wrong end address
2013.05.10.072542 [5035]
libburn/libdax_msgs.h
Added new item to list of error codes
10 May 2013 [5036]
ChangeLog
cdrskin/cdrskin_eng.html
cdrskin/changelog.txt
Updated change log
------------------------------------ cycle - cdrskin-1.2.9 - 2013.05.10.073212
Bug fix: DVD+R with damaged TOC were reported by -minfo with wrong end address
17 May 2013 [5044]
svn copy -m Branching for libburn release 1.3.0
2013.05.17.090001 [5045]
Makefile.am
configure.ac
README
libburn/libburn.h
cdrskin/cdrskin.c
cdrskin/cdrskin.1
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/cdrskin_eng.html
Made number transition to 1.3.0
17 May 2013 [5046]
- cdrskin/add_ts_changes_to_libburn_1_2_8
- cdrskin/add_ts_changes_to_libburn_1_2_9
+ cdrskin/add_ts_changes_to_libburn_1_3_0
+ cdrskin/add_ts_changes_to_libburn_1_3_1
Updated cdrskin tarball generator
17 May 2013 [5047]
ChangeLog
cdrskin/cdrskin_eng.html
cdrskin/changelog.txt
Updated change log
----------------------------------- release - libburn-1.3.0 - 2013.05.17.090001
* Bug fix: Full formatting of BD-RE used certification regardless of drive
capabilities
* Bug fix: DVD+R with damaged TOC were reported by -minfo with wrong end
address
17 May 2013 [5051]
- cdrskin/add_ts_changes_to_libburn_1_2_8
- cdrskin/add_ts_changes_to_libburn_1_2_9
+ cdrskin/add_ts_changes_to_libburn_1_3_0
+ cdrskin/add_ts_changes_to_libburn_1_3_1
Updated cdrskin tarball generator
2013.05.17.180032 [5052]
Makefile.am
configure.ac
README
libburn/libburn.h
cdrskin/cdrskin.c
cdrskin/cdrskin.1
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/cdrskin_eng.html
Made number transition to 1.3.1
17 May 2013 [5053]
ChangeLog
cdrskin/changelog.txt
Updated change log
17 May 2013 [5054]
svn move -m libburn release 1.3.0 is ready
------------------------------------ cycle - cdrskin-1.3.1 - 2013.05.17.181442
2013.05.19.114643 [5059]
libburn/libburn.h
libburn/cdtext.c
doc/cdtext.txt
libburn/libburn.ver
New API call burn_make_input_sheet_v07t()
2013.05.19.114854 [5060]
cdrskin/cdrskin.c
cdrskin/cdrskin.1
New option textfile_to_v07t=
2013.05.19.154838 [5061]
cdrskin/cdrskin.c
cdrskin/cdrskin.1
New options cdtext_to_textfile= and cdtext_to_v07t=
2013.05.20.104814 [5062]
libburn/libburn.h
libburn/cdtext.c
libburn/libdax_msgs.h
API call burn_session_input_sheet_v07t(): read multiple blocks from same file
2013.05.20.110128 [5063]
cdrskin/cdrskin.c
cdrskin/cdrskin.1
Allowed option input_sheet_v07t= to read multiple blocks from same file
2013.05.20.124448 [5064]
libburn/cdtext.c
Bug fixes with new API call burn_make_input_sheet_v07t()
2013.05.20.124520 [5065]
cdrskin/cdrskin.c
Closed memory leak introduced by rev 5063
20 May 2013 [5066]
ChangeLog
cdrskin/cdrskin_eng.html
cdrskin/changelog.txt
Updated change log
------------------------------------ cycle - cdrskin-1.3.1 - 2013.05.20.141737
* New API call burn_make_input_sheet_v07t()
* New option textfile_to_v07t=
* New options cdtext_to_textfile= and cdtext_to_v07t=
* API call burn_session_input_sheet_v07t(): read multiple blocks from same file
2013.05.21.081819 [5067]
cdrskin/cdrskin.c
Defaulting -sao -multi to -tao -multi if -sao -multi is not possible
2013.05.23.154249 [5068]
libburn/libburn.h
libburn/file.c
libburn/util.h
libburn/util.c
libburn/libdax_msgs.h
libburn/libdax_msgs.c
libburn/libburn.ver
New API calls burn_drive_extract_audio(), burn_drive_extract_audio_track()
2013.05.23.154249 [5069]
cdrskin/cdrskin.c
cdrskin/cdrskin.1
New cdrskin options extract_audio_to= , extract_tracks= , extract_basename= , --extract_dap
23 May 2013 [5070]
ChangeLog
cdrskin/cdrskin_eng.html
cdrskin/changelog.txt
Updated change log
------------------------------------ cycle - cdrskin-1.3.1 - 2013.05.23.155617
* New API calls burn_drive_extract_audio(), burn_drive_extract_audio_track()
* New cdrskin options extract_audio_to= , extract_tracks= , extract_basename= ,
--extract_dap
23 May 2013 [5071]
doc/cdtext.txt
Updated documentation about CD-TEXT
2013.05.26.185945 [5072]
cdrskin/cdrskin.c
Luring K3B into using -xa rather than -xa1
2013.05.30.133008 [5076]
cdrskin/cdrskin.c
Bug fix: cdrskin -msinfo on DVD and BD reported
old session start == next writable address.
Regression introduced by version 1.2.8 (rev 4956).
[]
ChangeLog
@ -11604,7 +11958,36 @@ cdrskin/cdrskin_eng.html
cdrskin/changelog.txt
Updated change log
------------------------------------ cycle - cdrskin-1.2.7 -
------------------------------------ cycle - cdrskin-1.3.1 - 2013.05.30.133756
* Bug fix: cdrskin -msinfo on DVD and BD reported
old session start == next writable address.
Regression introduced by version 1.2.8 (rev 4956).
31 May 2013 [5079]
svn copy -m Branching for libburn bugfix release 1.3.0.pl01
http://svn.libburnia-project.org/libburn/tags/1.3.0
http://svn.libburnia-project.org/libburn/branches/1.3.0.pl01
2013.05.31.080001 [5080]
cdrskin/cdrskin.c
Bug fix: cdrskin -msinfo on DVD and BD reported
old session start = next writable address.
Regression introduced by version 1.2.8 (rev 4956).
31 May 2013 []
README
cdrskin/README
ChangeLog
cdrskin/cdrskin_eng.html
cdrskin/changelog.txt
------------------------------ release - libburn-1.3.0.pl01 - 2013.05.31.080001
* Bug fix: cdrskin -msinfo on DVD and BD reported
old session start = next writable address.
Regression introduced by version 1.2.8 (rev 4956).
[]
ChangeLog
@ -11612,8 +11995,15 @@ cdrskin/cdrskin_eng.html
cdrskin/changelog.txt
Updated change log
------------------------------------ cycle - cdrskin-1.2.7 -
------------------------------------ cycle - cdrskin-1.3.1 -
[]
ChangeLog
cdrskin/cdrskin_eng.html
cdrskin/changelog.txt
Updated change log
------------------------------------ cycle - cdrskin-1.3.1 -
**********************************************************************

View File

@ -8,7 +8,7 @@ debug_opts="-O2"
def_opts=
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
fifo_opts=""
libvers="-DCdrskin_libburn_1_2_6"
libvers="-DCdrskin_libburn_1_3_0"
# To be used if Makefile.am uses libburn_libburn_la_CFLAGS
# burn="libburn/libburn_libburn_la-"
@ -41,15 +41,15 @@ do
elif test "$i" = "-compile_dewav"
then
compile_dewav=1
elif test "$i" = "-libburn_1_2_6"
elif test "$i" = "-libburn_1_3_0"
then
libvers="-DCdrskin_libburn_1_2_6"
libvers="-DCdrskin_libburn_1_3_0"
libdax_audioxtr_o="$burn"libdax_audioxtr.o
libdax_msgs_o="$burn"libdax_msgs.o
cleanup_src_or_obj="$burn"cleanup.o
elif test "$i" = "-libburn_svn"
then
libvers="-DCdrskin_libburn_1_2_7"
libvers="-DCdrskin_libburn_1_3_1"
libdax_audioxtr_o="$burn"libdax_audioxtr.o
libdax_msgs_o="$burn"libdax_msgs.o
cleanup_src_or_obj="$burn"cleanup.o
@ -99,7 +99,7 @@ do
echo "Options:"
echo " -compile_cdrfifo compile program cdrskin/cdrfifo."
echo " -compile_dewav compile program test/dewav without libburn."
echo " -libburn_1_2_6 set macro to match libburn-1.2.6"
echo " -libburn_1_3_0 set macro to match libburn-1.3.0"
echo " -libburn_svn set macro to match current libburn-SVN."
echo " -dvd_obs_64k 64 KB default size for DVD/BD writing."
echo " -use_libcdio link with -lcdio because libburn uses it."

View File

@ -1,4 +1,4 @@
AC_INIT([libburn], [1.2.6], [http://libburnia-project.org])
AC_INIT([libburn], [1.3.0], [http://libburnia-project.org])
AC_PREREQ([2.50])
dnl AC_CONFIG_HEADER([config.h])
@ -99,6 +99,8 @@ dnl 1.2.0 = libburn.so.4.73.0
dnl 1.2.2 = libburn.so.4.75.0
dnl 1.2.4 = libburn.so.4.77.0
dnl 1.2.6 = libburn.so.4.79.0
dnl 1.2.8 = libburn.so.4.81.0
dnl 1.3.0 = libburn.so.4.83.0
dnl
dnl So LT_CURRENT, LT_REVISION and LT_AGE get set directly here.
dnl SONAME of the emerging library is LT_CURRENT - LT_AGE.
@ -123,8 +125,8 @@ dnl If BURN_*_VERSION changes, be sure to change AC_INIT above to match.
dnl
dnl As said: Only copies. Original in libburn/libburn.h : burn_header_version_*
BURN_MAJOR_VERSION=1
BURN_MINOR_VERSION=2
BURN_MICRO_VERSION=6
BURN_MINOR_VERSION=3
BURN_MICRO_VERSION=0
BURN_VERSION=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
AC_SUBST(BURN_MAJOR_VERSION)
@ -135,14 +137,14 @@ AC_SUBST(BURN_VERSION)
dnl Libtool versioning
LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
dnl
dnl This is the release version libburn-1.2.6
dnl This is the release version libburn-1.3.0
dnl ### This is the development version after above release version
dnl LT_CURRENT++, LT_AGE++ has not yet happened.
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
dnl
dnl SONAME = 83 - 79 = 4 . Linux library name = libburn.so.4.79.0
LT_CURRENT=83
LT_AGE=79
dnl SONAME = 87 - 83 = 4 . Linux library name = libburn.so.4.83.0
LT_CURRENT=87
LT_AGE=83
LT_REVISION=0
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`

View File

@ -1,7 +1,7 @@
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
Copyright (c) 2006 - 2012 Thomas Schmitt <scdbackup@gmx.net>
Copyright (c) 2006 - 2013 Thomas Schmitt <scdbackup@gmx.net>
Provided under GPL version 2 or later.
*/
@ -2123,7 +2123,7 @@ int burn_drive_convert_scsi_adr(int bus_no, int host_no, int channel_no,
ret = 0;
ex:;
if (first == 0)
sg_give_next_adr(&enm, fname, sizeof(fname), -1);
sg_give_next_adr(&enm, fname, fname_size, -1);
BURN_FREE_MEM(fname);
BURN_FREE_MEM(msg);
return ret;

View File

@ -343,7 +343,6 @@ enum burn_drive_status
"session", "point", "pmin", ...
Do not rely on the current size of a burn_toc_entry.
ts A70201 : DVD extension, see below
*/
struct burn_toc_entry
{
@ -372,6 +371,8 @@ struct burn_toc_entry
older elements in this structure:
bit0= DVD extension is valid @since 0.3.2
@since 0.5.2 : DVD extensions are made valid for CD too
bit1= LRA extension is valid @since 0.7.2
bit2= Track status bits extension is valid @since 1.2.8
*/
unsigned char extensions_valid;
@ -393,6 +394,24 @@ struct burn_toc_entry
This would mean profiles: 0x11, 0x15, 0x13, 0x14, 0x51, 0x41, 0x42
*/
int last_recorded_address;
/* ts B30112 : Track status bits extension. extensions_valid:bit2 */
/* @since 1.2.8 */
/* Names as of READ TRACK INFORMATION, MMC-5 6.27.3 :
bit0 - bit3 = Track Mode
bit4 = Copy
bit5 = Damage
bit6 - bit7 = LJRS
bit8 - bit11 = Data Mode
bit12 = FP
bit13 = Packet/Inc
bit14 = Blank
bit15 = RT
bit16 = NWA_V
bit17 = LRA_V
*/
int track_status_bits;
};
@ -1955,7 +1974,7 @@ int burn_session_set_start_tno(struct burn_session *session, int tno,
int flag);
/* ts B20108 */
/** Inquire the CD track start number, as set by default ot by
/** Inquire the CD track start number, as set by default or by
burn_session_set_start_tno().
@param session The session to be inquired
@return > 0 is the currently set CD track start number
@ -3387,8 +3406,12 @@ void burn_track_get_entry(struct burn_track *t, struct burn_toc_entry *entry);
void burn_session_get_leadout_entry(struct burn_session *s,
struct burn_toc_entry *entry);
/** Gets an array of all the sessions for the disc
/** Gets an array of all complete sessions for the disc
THIS IS NO LONGER VALID AFTER YOU ADD OR REMOVE A SESSION
The result array contains *num + burn_disc_get_incomplete_sessions()
elements. All above *num are incomplete sessions.
Typically there is at most one incomplete session with one empty track.
DVD+R and BD-R seem to allow more than one track with even readable data.
@param d Disc to get session array for
@param num Returns the number of sessions in the array
@return array of sessions
@ -3396,6 +3419,17 @@ void burn_session_get_leadout_entry(struct burn_session *s,
struct burn_session **burn_disc_get_sessions(struct burn_disc *d,
int *num);
/* ts B30112 */
/* @since 1.2.8 */
/** Obtains the number of incomplete sessions which are recorded in the
result array of burn_disc_get_sessions() after the complete sessions.
See above.
@param d Disc object to inquire
@return Number of incomplete sessions
*/
int burn_disc_get_incomplete_sessions(struct burn_disc *d);
int burn_disc_get_sectors(struct burn_disc *d);
/** Gets an array of all the tracks for a session
@ -3450,8 +3484,8 @@ void burn_version(int *major, int *minor, int *micro);
*/
#define burn_header_version_major 1
#define burn_header_version_minor 2
#define burn_header_version_micro 6
#define burn_header_version_minor 3
#define burn_header_version_micro 0
/** Note:
Above version numbers are also recorded in configure.ac because libtool
wants them as parameters at build time.
@ -4048,6 +4082,12 @@ BURN_END_DECLS
*/
#define Libburn_dummy_probe_write_modeS 1
/* ts B30112 */
/* Handle DVD+R with reserved tracks in incomplete first session
by loading info about the incomplete session into struct burn_disc
*/
#define Libburn_disc_with_incomplete_sessioN 1
/* Early experimental:
Do not define Libburn_develop_quality_scaN unless you want to work

View File

@ -19,6 +19,7 @@ burn_disc_get_bd_spare_info;
burn_disc_get_cd_info;
burn_disc_get_format_descr;
burn_disc_get_formats;
burn_disc_get_incomplete_sessions;
burn_disc_get_leadin_text;
burn_disc_get_media_id;
burn_disc_get_msc1;

View File

@ -597,6 +597,8 @@ Range "scdbackup" : 0x00020000 to 0x0002ffff
0x0002019b (SORRY,HIGH) = CD track number exceeds range of 1 to 99
0x0002019c (SORRY,HIGH) = Session has no defined tracks
0x0002019d (SORRY,HIGH) = Audio read size not properly aligned
0x0002019e (NOTE,HIGH) = Drive does not support media certification
0x0002019f (FAILURE,HIGH) = CD-TEXT with unknown character code
libdax_audioxtr:

View File

@ -1126,6 +1126,12 @@ err_ex:;
if (dlen + 2 > old_alloc_len)
dlen = old_alloc_len - 2;
d->complete_sessions = 1 + c->page->data[3] - c->page->data[2];
#ifdef Libburn_disc_with_incomplete_sessioN
/* ts B30112 : number of open sessions */
d->incomplete_sessions = 0;
#endif
d->last_track_no = d->complete_sessions;
if (dlen - 2 < (d->last_track_no + 1) * 8) {
libdax_msgs_submit(libdax_messenger, d->global_index,
@ -1253,9 +1259,22 @@ int mmc_fake_toc(struct burn_drive *d)
{ret = -1; goto ex;}
BURN_ALLOC_MEM(buf, struct buffer, 1);
#ifdef Libburn_disc_with_incomplete_sessioN
if (d->last_track_no <= 0 ||
d->complete_sessions + d->incomplete_sessions <= 0 ||
d->status == BURN_DISC_BLANK)
{ret = 2; goto ex;}
#else
if (d->last_track_no <= 0 || d->complete_sessions <= 0 ||
d->status == BURN_DISC_BLANK)
{ret = 2; goto ex;}
#endif /* ! Libburn_disc_with_incomplete_sessioN */
if (d->last_track_no > BURN_MMC_FAKE_TOC_MAX_SIZE) {
msg = calloc(1, 160);
if (msg != NULL) {
@ -1279,18 +1298,34 @@ int mmc_fake_toc(struct burn_drive *d)
d->disc = burn_disc_create();
if (d->disc == NULL)
{ret = -1; goto ex;}
d->toc_entries = d->last_track_no + d->complete_sessions;
d->toc_entries = d->last_track_no
+ d->complete_sessions + d->incomplete_sessions;
d->toc_entry = calloc(d->toc_entries, sizeof(struct burn_toc_entry));
if (d->toc_entry == NULL)
{ret = -1; goto ex;}
memset(d->toc_entry, 0,d->toc_entries * sizeof(struct burn_toc_entry));
#ifdef Libburn_disc_with_incomplete_sessioN
for (i = 0; i < d->complete_sessions + d->incomplete_sessions; i++) {
#else
for (i = 0; i < d->complete_sessions; i++) {
#endif
session = burn_session_create();
if (session == NULL)
{ret = -1; goto ex;}
burn_disc_add_session(d->disc, session, BURN_POS_END);
burn_session_free(session);
}
#ifdef Libburn_disc_with_incomplete_sessioN
d->disc->incomplete_sessions = d->incomplete_sessions;
#endif
memset(size_data, 0, 4);
memset(start_data, 0, 4);
@ -1333,7 +1368,16 @@ int mmc_fake_toc(struct burn_drive *d)
entry;
}
#ifdef Libburn_disc_with_incomplete_sessioN
if (session_number > d->complete_sessions) {
#else
if (session_number > d->disc->sessions) {
#endif
if (i == d->last_track_no - 1) {
/* ts A70212 : Last track field Free Blocks */
burn_drive_set_media_capacity_remaining(d,
@ -1341,7 +1385,18 @@ int mmc_fake_toc(struct burn_drive *d)
((off_t) 2048));
d->media_lba_limit = 0;
}
#ifdef Libburn_disc_with_incomplete_sessioN
if (session_number > d->disc->sessions )
continue;
#else
continue;
#endif
}
entry = &(d->toc_entry[i + session_number - 1]);
@ -1359,12 +1414,16 @@ int mmc_fake_toc(struct burn_drive *d)
memcpy(end_data, tdata + 28, 4);
mmc_fake_toc_entry(entry, session_number, i + 1,
size_data, start_data, end_data);
entry->track_status_bits = tdata[5] | (tdata[6] << 8) |
(tdata[7] << 16);
entry->extensions_valid |= 4;
if (prev_session != session_number)
d->disc->session[session_number - 1]->firsttrack = i+1;
d->disc->session[session_number - 1]->lasttrack = i+1;
prev_session = session_number;
}
if (prev_session > 0 && prev_session <= d->disc->sessions) {
/* leadout entry of last session of closed disc */
entry = &(d->toc_entry[(d->last_track_no - 1) + prev_session]);
@ -2029,16 +2088,28 @@ regard_as_blank:;
d->current_profile == 0x12 || d->current_profile == 0x43)
d->status = BURN_DISC_BLANK;
#ifdef Libburn_disc_with_incomplete_sessioN
/* ts B30112 : number of open sessions */
d->incomplete_sessions = 0;
#endif
if (d->status == BURN_DISC_BLANK) {
d->last_track_no = 1; /* The "incomplete track" */
d->complete_sessions = 0;
} else {
/* ts A70131 : number of non-empty sessions */
/* ts A70131 : number of closed sessions */
d->complete_sessions = number_of_sessions;
/* 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 (d->state_of_last_session != 3 &&
d->complete_sessions >= 1) {
d->complete_sessions--;
#ifdef Libburn_disc_with_incomplete_sessioN
d->incomplete_sessions++;
#endif
}
/* ts A70129 : mmc5r03c.pdf 6.22.3.1.7
This includes the "incomplete track" if the disk is
appendable. I.e number of complete tracks + 1. */
@ -2713,9 +2784,9 @@ void mmc_set_speed(struct burn_drive *d, int r, int w)
if (r <= 0 || w <= 0) {
/* ts A70712 : now searching for best speed descriptor */
if (w > 0 && r <= 0)
burn_drive_get_best_speed(d, r, &best_sd, 1);
burn_drive_get_best_speed(d, r, &best_sd, 1 | 2);
else
burn_drive_get_best_speed(d, w, &best_sd, 0);
burn_drive_get_best_speed(d, w, &best_sd, 2);
if (best_sd != NULL) {
w = best_sd->write_speed;
d->nominal_write_speed = w;
@ -3886,10 +3957,22 @@ no_suitable_formatting_type:;
goto no_suitable_formatting_type;
format_type = d->format_descriptors[index].type;
if (format_type == 0x30 || format_type == 0x31) {
if (flag & 64)
format_sub_type = 3; /* Quick certification */
else
format_sub_type = 2; /* Full certification */
if ((flag & 64) || !(d->current_feat23h_byte4 & 3)) {
format_sub_type = 0;
if (!(flag & 64))
libdax_msgs_submit(libdax_messenger,
d->global_index, 0x0002019e,
LIBDAX_MSGS_SEV_NOTE,
LIBDAX_MSGS_PRIO_HIGH,
"Drive does not support media certification",
0, 0);
} else {
/* With Certification */
if (d->current_feat23h_byte4 & 1)
format_sub_type = 2; /* Full */
else
format_sub_type = 3; /* Quick */
}
}
#ifdef Libburn_bd_re_format_olD
@ -3986,6 +4069,11 @@ unsuitable_media:;
}
#endif /* Libburn_do_not_format_dvd_ram_or_bd_rE */
/* <<<
fprintf(stderr, "\nlibburn_DEBUG: FORMAT UNIT temporarily disabled.\n");
ret = 1; goto ex;
*/
d->issue_command(d, c);
if (c->error && !tolerate_failure) {
spc_decode_sense(c->sense, 0, &key, &asc, &ascq);
@ -4020,8 +4108,10 @@ ex:;
/* ts A61225 */
/* @param flag bit0= register speed descriptors
*/
static int mmc_get_write_performance_al(struct burn_drive *d,
int *alloc_len, int *max_descr)
int *alloc_len, int *max_descr, int flag)
{
struct buffer *buf = NULL;
int len, i, b, num_descr, ret, old_alloc_len;
@ -4104,7 +4194,7 @@ static int mmc_get_write_performance_al(struct burn_drive *d,
pd = c->page->data;
if (num_descr > *max_descr)
num_descr = *max_descr;
for (i = 0; i < num_descr; i++) {
for (i = 0; i < num_descr && (flag & 1); i++) {
exact_bit = !!(pd[8 + i*16] & 2);
end_lba = read_speed = write_speed = 0;
for (b = 0; b < 4 ; b++) {
@ -4179,15 +4269,25 @@ int mmc_get_write_performance(struct burn_drive *d)
return 0;
/* first command execution to learn number of descriptors and
dxfer_len */
ret = mmc_get_write_performance_al(d, &alloc_len, &max_descr);
dxfer_len
*/
ret = mmc_get_write_performance_al(d, &alloc_len, &max_descr, 0);
if (max_descr > 0 && ret > 0) {
/* Some drives announce only 1 descriptor if asked for 0.
So ask twice for non-0 descriptors.
*/
ret = mmc_get_write_performance_al(d, &alloc_len, &max_descr,
0);
}
/*
fprintf(stderr,"LIBBURN_DEBUG: ACh alloc_len = %d , ret = %d\n",
alloc_len, ret);
*/
if (max_descr > 0 && ret > 0)
/* second execution with announced length */
ret = mmc_get_write_performance_al(d, &alloc_len, &max_descr);
/* final execution with announced length */
max_descr = (alloc_len - 8) / 16;
ret = mmc_get_write_performance_al(d, &alloc_len, &max_descr,
1);
return ret;
}
@ -5014,6 +5114,11 @@ int mmc_setup_drive(struct burn_drive *d)
d->disc_info_valid = 0;
d->num_format_descr = 0;
d->complete_sessions = 0;
#ifdef Libburn_disc_with_incomplete_sessioN
d->incomplete_sessions = 0;
#endif
d->state_of_last_session = -1;
d->last_track_no = 1;
d->media_capacity_remaining = 0;

View File

@ -65,6 +65,11 @@ struct burn_disc *burn_disc_create(void)
d->refcnt = 1;
d->sessions = 0;
d->session = NULL;
#ifdef Libburn_disc_with_incomplete_sessioN
d->incomplete_sessions= 0;
#endif
return d;
}
@ -691,10 +696,37 @@ void burn_session_get_leadout_entry(struct burn_session *s,
struct burn_session **burn_disc_get_sessions(struct burn_disc *d, int *num)
{
#ifdef Libburn_disc_with_incomplete_sessioN
*num = d->sessions - d->incomplete_sessions;
#else
*num = d->sessions;
#endif
return d->session;
}
/* ts B30112 : API */
int burn_disc_get_incomplete_sessions(struct burn_disc *d)
{
#ifdef Libburn_disc_with_incomplete_sessioN
return d->incomplete_sessions;
#else
return 0;
#endif
}
struct burn_track **burn_session_get_tracks(struct burn_session *s, int *num)
{
*num = s->tracks;
@ -737,11 +769,11 @@ int burn_disc_cd_toc_extensions(struct burn_drive *drive, int flag)
ret = 1;
goto ex;
}
track_offset = burn_session_get_start_tno(d->session[0], 0);
if (track_offset <= 0)
track_offset = 1;
for (sidx = 0; sidx < d->sessions; sidx++) {
track_offset = burn_session_get_start_tno(d->session[sidx], 0);
if (track_offset <= 0)
track_offset = 1;
if (d->session[sidx] == NULL) {
sprintf(msg, "d->session[%d of %d] == NULL",
sidx, d->sessions);

View File

@ -144,6 +144,11 @@ struct burn_disc
{
int sessions;
struct burn_session **session;
#ifdef Libburn_disc_with_incomplete_sessioN
int incomplete_sessions;
#endif
int refcnt;
};

View File

@ -287,6 +287,12 @@ struct burn_drive
/* ts A90107 */
int state_of_last_session;
#ifdef Libburn_disc_with_incomplete_sessioN
/* ts B30112 */
int incomplete_sessions;
#endif
/* ts A70129 :
from 51h READ DISC INFORMATION Last Track Number in Last Session */
int last_track_no;

View File

@ -1861,7 +1861,7 @@ int burn_dvd_write_track(struct burn_write_opts *o,
struct burn_drive *d = o->drive;
struct buffer *out = d->buffer;
int sectors;
int i, open_ended = 0, ret= 0, is_flushed = 0;
int i, open_ended = 0, ret= 0, is_flushed = 0, track_open = 0;
int first_buf_cap = 0, further_cap = 0, buf_cap_step = 1024;
/* ts A70213 : eventually expand size of track to max */
@ -1889,6 +1889,7 @@ int burn_dvd_write_track(struct burn_write_opts *o,
if (ret <= 0)
goto ex;
}
track_open = 1;
sectors = burn_track_get_sectors_2(t, 1);
open_ended = burn_track_is_open_ended(t);
@ -1971,7 +1972,7 @@ int burn_dvd_write_track(struct burn_write_opts *o,
ex:;
if (d->cancel)
burn_source_cancel(t->source);
if (!is_flushed)
if (track_open && !is_flushed)
d->sync_cache(d); /* burn_write_flush() was not called */
return ret;
}