Compare commits
22 Commits
Author | SHA1 | Date | |
---|---|---|---|
85b55e3f41 | |||
850c222954 | |||
c7bd0d4afb | |||
f35a3e4582 | |||
0a1a085471 | |||
a1fdfe1519 | |||
bbb6315af0 | |||
40d83b2314 | |||
c82ac0a825 | |||
46b598abd2 | |||
c7784b79b7 | |||
f1b3184531 | |||
a18c862e84 | |||
c2903ab717 | |||
04ccaebff7 | |||
2e83dc554b | |||
3a17a8a014 | |||
ffca3e89dd | |||
676231c362 | |||
d76c715df7 | |||
9aa47792e0 | |||
f4cfe9b267 |
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
||||
libburn-1.2.8.tar.gz Mon Mar 08 2013
|
||||
===============================================================================
|
||||
* 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
|
||||
* 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
|
||||
|
||||
libburn-1.2.6.tar.gz Tue Jan 08 2013
|
||||
===============================================================================
|
||||
* New cdrskin option --no_load
|
||||
|
@ -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 - B30318
|
||||
cdrskin_cdrskin_CPPFLAGS = -Ilibburn
|
||||
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_1_2_6
|
||||
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_1_2_8
|
||||
|
||||
# cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
|
||||
# ts A80123, change proposed by Simon Huggins to cause dynamic libburn linking
|
||||
|
13
README
13
README
@ -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.2.8.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.2.8.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.2.8.tar.gz
|
||||
cd libburn-1.2.8
|
||||
./configure --prefix=/usr
|
||||
make
|
||||
|
||||
@ -692,6 +692,11 @@ 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.
|
||||
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
|
@ -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.2.8.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.2.8.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.2.8.tar.gz
|
||||
cd cdrskin-1.2.8
|
||||
|
||||
Within that directory execute:
|
||||
|
||||
|
@ -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.2.8"
|
||||
patch_level=""
|
||||
# patch_level=".pl00"
|
||||
skin_rev="$skin_release""$patch_level"
|
@ -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.2.9"
|
||||
patch_level=""
|
||||
skin_rev="$skin_release""$patch_level"
|
||||
|
@ -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.2.8, Mar 18, 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 ...".
|
||||
|
@ -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.2.8"
|
||||
#endif
|
||||
|
||||
/** The official libburn interface revision to use.
|
||||
@ -100,7 +100,7 @@ or
|
||||
#define Cdrskin_libburn_minoR 2
|
||||
#endif
|
||||
#ifndef Cdrskin_libburn_micrO
|
||||
#define Cdrskin_libburn_micrO 6
|
||||
#define Cdrskin_libburn_micrO 8
|
||||
#endif
|
||||
|
||||
|
||||
@ -120,20 +120,20 @@ or
|
||||
#undef Cdrskin_libburn_versioN
|
||||
#endif
|
||||
|
||||
#ifdef Cdrskin_libburn_1_2_6
|
||||
#define Cdrskin_libburn_versioN "1.2.6"
|
||||
#ifdef Cdrskin_libburn_1_2_8
|
||||
#define Cdrskin_libburn_versioN "1.2.8"
|
||||
#endif
|
||||
|
||||
#ifdef Cdrskin_libburn_1_2_7
|
||||
#define Cdrskin_libburn_versioN "1.2.7"
|
||||
#ifdef Cdrskin_libburn_1_2_9
|
||||
#define Cdrskin_libburn_versioN "1.2.9"
|
||||
#endif
|
||||
|
||||
#ifndef Cdrskin_libburn_versioN
|
||||
#define Cdrskin_libburn_1_2_6
|
||||
#define Cdrskin_libburn_versioN "1.2.6"
|
||||
#define Cdrskin_libburn_1_2_8
|
||||
#define Cdrskin_libburn_versioN "1.2.8"
|
||||
#endif
|
||||
|
||||
#ifdef Cdrskin_libburn_1_2_6
|
||||
#ifdef Cdrskin_libburn_1_2_8
|
||||
#undef Cdrskin_libburn_majoR
|
||||
#undef Cdrskin_libburn_minoR
|
||||
#undef Cdrskin_libburn_micrO
|
||||
@ -141,7 +141,7 @@ or
|
||||
#define Cdrskin_libburn_minoR 2
|
||||
#define Cdrskin_libburn_micrO 6
|
||||
#endif
|
||||
#ifdef Cdrskin_libburn_1_2_7
|
||||
#ifdef Cdrskin_libburn_1_2_9
|
||||
#undef Cdrskin_libburn_majoR
|
||||
#undef Cdrskin_libburn_minoR
|
||||
#undef Cdrskin_libburn_micrO
|
||||
@ -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, lba + 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,7 +7591,8 @@ 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;
|
||||
@ -8160,6 +8324,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 +9092,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)
|
||||
|
@ -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.2.8</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.2.8.tar.gz">cdrskin-1.2.8.tar.gz</A>
|
||||
(945 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.2.8.tar.gz.sig">cdrskin-1.2.8.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.2.8.tar.gz.sig cdrskin-1.2.8.tar.gz</KBD>
|
||||
<BR>
|
||||
after <KBD>gpg --keyserver keys.gnupg.net --recv-keys ABC0A854</KBD>).
|
||||
</DD>
|
||||
@ -257,17 +257,28 @@ 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.6:
|
||||
<UL>
|
||||
<LI>New option --no_load</LI>
|
||||
<LI>
|
||||
-toc and -minfo now report about tracks in the incomplete session
|
||||
</LI>
|
||||
<LI>
|
||||
New cdrskin option --list_speeds
|
||||
</LI>
|
||||
<!--
|
||||
<LI>none</LI>
|
||||
-->
|
||||
</UL>
|
||||
|
||||
Bug fixes towards cdrskin-1.2.4:
|
||||
Bug fixes towards cdrskin-1.2.6:
|
||||
<UL>
|
||||
<LI>Speed setting had no effect on BD media</LI>
|
||||
<LI>
|
||||
All CD tracks were reported with the sizes of the tracks in the
|
||||
first session. Regression introduced with version 1.2.0
|
||||
</LI>
|
||||
<LI>
|
||||
On some drives the request for minimum speed yielded maximum speed
|
||||
</LI>
|
||||
<!--
|
||||
<LI>none</LI>
|
||||
-->
|
||||
@ -277,29 +288,31 @@ Bug fixes towards cdrskin-1.2.4:
|
||||
|
||||
<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.2.9 :</H3></DT>
|
||||
<DD>Enhancements towards current stable version 1.2.8:
|
||||
<UL>
|
||||
<LI>none yet</LI>
|
||||
<!--
|
||||
<LI>none yet</LI>
|
||||
-->
|
||||
|
||||
</UL>
|
||||
</DD>
|
||||
|
||||
<DD>Bug fixes towards cdrskin-1.2.6:
|
||||
<DD>Bug fixes towards cdrskin-1.2.8:
|
||||
<UL>
|
||||
<LI>none yet</LI>
|
||||
<!--
|
||||
<LI>none yet</LI>
|
||||
-->
|
||||
</UL>
|
||||
</DD>
|
||||
|
||||
<DD> </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.2.9</A>
|
||||
<DD><A HREF="cdrskin__help_devel">cdrskin-1.2.9 --help</A></DD>
|
||||
<DD><A HREF="cdrskin_help_devel">cdrskin-1.2.9 -help</A></DD>
|
||||
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 1.2.9)</A></DD>
|
||||
<DD> </DD>
|
||||
<DT>Maintainers of cdrskin unstable packages please use SVN of
|
||||
<A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT>
|
||||
@ -319,8 +332,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.2.9.tar.gz">cdrskin-1.2.9.tar.gz</A>
|
||||
(945 KB).
|
||||
</DD>
|
||||
|
||||
<!-- This is not offered any more since spring 2008
|
||||
|
@ -1 +1 @@
|
||||
#define Cdrskin_timestamP "2013.01.08.090001"
|
||||
#define Cdrskin_timestamP "2013.03.18.080001"
|
||||
|
@ -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,11 +11579,131 @@ 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 - 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
|
||||
|
||||
[]
|
||||
@ -11591,12 +11711,15 @@ ChangeLog
|
||||
cdrskin/changelog.txt
|
||||
Updated change log
|
||||
|
||||
[]
|
||||
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
|
||||
----------------------------------- 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
|
||||
|
||||
------------------------------------ cycle - cdrskin-1.2.7 -
|
||||
|
||||
[]
|
||||
ChangeLog
|
||||
@ -11604,15 +11727,7 @@ cdrskin/cdrskin_eng.html
|
||||
cdrskin/changelog.txt
|
||||
Updated change log
|
||||
|
||||
------------------------------------ cycle - cdrskin-1.2.7 -
|
||||
|
||||
[]
|
||||
ChangeLog
|
||||
cdrskin/cdrskin_eng.html
|
||||
cdrskin/changelog.txt
|
||||
Updated change log
|
||||
|
||||
------------------------------------ cycle - cdrskin-1.2.7 -
|
||||
------------------------------------ cycle - cdrskin-1.2.9 -
|
||||
|
||||
|
||||
|
||||
|
@ -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_2_8"
|
||||
|
||||
# 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_2_8"
|
||||
then
|
||||
libvers="-DCdrskin_libburn_1_2_6"
|
||||
libvers="-DCdrskin_libburn_1_2_8"
|
||||
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_2_9"
|
||||
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_2_8 set macro to match libburn-1.2.8"
|
||||
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."
|
||||
|
13
configure.ac
13
configure.ac
@ -1,4 +1,4 @@
|
||||
AC_INIT([libburn], [1.2.6], [http://libburnia-project.org])
|
||||
AC_INIT([libburn], [1.2.8], [http://libburnia-project.org])
|
||||
AC_PREREQ([2.50])
|
||||
dnl AC_CONFIG_HEADER([config.h])
|
||||
|
||||
@ -99,6 +99,7 @@ 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
|
||||
dnl So LT_CURRENT, LT_REVISION and LT_AGE get set directly here.
|
||||
dnl SONAME of the emerging library is LT_CURRENT - LT_AGE.
|
||||
@ -124,7 +125,7 @@ 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_MICRO_VERSION=8
|
||||
BURN_VERSION=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
|
||||
|
||||
AC_SUBST(BURN_MAJOR_VERSION)
|
||||
@ -135,14 +136,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.2.8
|
||||
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 = 85 - 81 = 4 . Linux library name = libburn.so.4.81.0
|
||||
LT_CURRENT=85
|
||||
LT_AGE=81
|
||||
LT_REVISION=0
|
||||
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
@ -3451,7 +3485,7 @@ 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_micro 8
|
||||
/** 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
|
||||
|
@ -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;
|
||||
|
110
libburn/mmc.c
110
libburn/mmc.c
@ -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;
|
||||
@ -4020,8 +4091,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 +4177,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 +4252,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 +5097,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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user