dapted cdrskin pacifier to possibly unknown track size

This commit is contained in:
2006-11-01 16:39:07 +00:00
parent 5af92d13fe
commit d337722920
10 changed files with 130 additions and 50 deletions

View File

@ -206,14 +206,6 @@ or
#endif /* Cdrskin_libburn_from_pykix_svN */
#ifndef _LARGEFILE_SOURCE
#define _LARGEFILE_SOURCE 1
#endif
#ifndef _FILE_OFFSET_BITS
#define _FILE_OFFSET_BITS 64
#endif
/* These macros activate cdrskin workarounds for deficiencies resp.
problematic features of libburn which hopefully will change in
future. */
@ -279,7 +271,6 @@ or
#include <errno.h>
#include <sys/time.h>
/* #include <libburn/libburn.h> */
#include "../libburn/libburn.h"
#ifdef Cdrskin_libburn_has_audioxtR
@ -899,11 +890,33 @@ int Cdrtrack_set_track_type(struct CdrtracK *o, int track_type, int flag)
}
/**
@param flag Bitfield for control purposes:
bit0= size returns number of actually processed source bytes
rather than the predicted fixed_size (if available).
padding returns the difference from number of written
bytes.
*/
int Cdrtrack_get_size(struct CdrtracK *track, double *size, double *padding,
double *sector_size, int flag)
{
*size= track->fixed_size;
*padding= track->padding;
#ifdef Cdrskin_allow_libburn_taO
if((flag&1) && track->libburn_track!=NULL) {
off_t readcounter,writecounter;
burn_track_get_counters(track->libburn_track,&readcounter,&writecounter);
*size= readcounter;
*padding= writecounter-readcounter;
/*
fprintf(stderr,"cdrskin_debug: sizeof(off_t)=%d\n",
sizeof(off_t));
*/
}
#endif
*sector_size= track->sector_size;
return(1);
}
@ -3769,12 +3782,12 @@ int Cdrskin_burn_pacifier(struct CdrskiN *skin,
if(old_track_idx>=0 && old_track_idx<skin->supposed_track_idx) {
Cdrtrack_get_size(skin->tracklist[old_track_idx],&fixed_size,&padding,
&sector_size,0);
&sector_size,1);
if(skin->verbosity>=Cdrskin_verbose_progresS)
printf("\n");
printf("%sTrack %-2.2d: Total bytes read/written: %.f/%.f (%.f sectors).\n",
debug_mark,old_track_idx+1,fixed_size,fixed_size,
fixed_size/sector_size);
debug_mark,old_track_idx+1,fixed_size,fixed_size+padding,
(fixed_size+padding)/sector_size);
}
sector_size= 2048.0;
@ -3975,6 +3988,7 @@ int Cdrskin_burn(struct CdrskiN *skin, int flag)
double put_counter,get_counter,empty_counter,full_counter;
double start_time,last_time;
double total_count= 0.0,last_count= 0.0,size,padding,sector_size= 2048.0;
double sectors;
printf("cdrskin: beginning to burn disk\n");
@ -3997,7 +4011,8 @@ int Cdrskin_burn(struct CdrskiN *skin, int flag)
return(0);
}
Cdrtrack_get_size(skin->tracklist[i],&size,&padding,&sector_size,0);
skin->fixed_size+= size+padding;
if(size>0)
skin->fixed_size+= size+padding;
}
ret= Cdrskin_grab_drive(skin,0);
@ -4053,8 +4068,11 @@ int Cdrskin_burn(struct CdrskiN *skin, int flag)
frac= (seconds-min*60-sec)*100;
if(frac>99)
frac= 99;
sectors= (int) (skin->fixed_size/sector_size);
if(sectors*sector_size != skin->fixed_size)
sectors++;
printf("Total size: %5d MB (%-2.2d:%-2.2d.%-2.2d) = %d sectors\n",
mb,min,sec,frac,(int) (skin->fixed_size/sector_size));
mb,min,sec,frac,(int) sectors);
seconds+= 2;
min= seconds/60.0;
sec= seconds-min*60;
@ -4062,7 +4080,7 @@ int Cdrskin_burn(struct CdrskiN *skin, int flag)
if(frac>99)
frac= 99;
printf("Lout start: %5d MB (%-2.2d:%-2.2d/%-2.2d) = %d sectors\n",
mb,min,sec,frac,(int) (skin->fixed_size/sector_size));
mb,min,sec,frac,(int) sectors);
}
}
@ -4173,14 +4191,14 @@ int Cdrskin_burn(struct CdrskiN *skin, int flag)
skin->drive_is_busy= 0;
if(skin->verbosity>=Cdrskin_verbose_progresS)
printf("\n");
if(max_track<=0) {
if(max_track<0) {
printf("Track 01: Total bytes read/written: %.f/%.f (%.f sectors).\n",
total_count,total_count,total_count/sector_size);
} else {
Cdrtrack_get_size(skin->tracklist[max_track],&size,&padding,&sector_size,0);
Cdrtrack_get_size(skin->tracklist[max_track],&size,&padding,&sector_size,1);
printf(
"Track %-2.2d: Total bytes read/written: %.f/%.f (%.f sectors).\n",
max_track+1,size,size,size/sector_size);
max_track+1,size,size+padding,(size+padding)/sector_size);
}
if(skin->verbosity>=Cdrskin_verbose_progresS)
printf("Writing time: %.3fs\n",Sfile_microtime(0)-start_time);
@ -4622,7 +4640,12 @@ set_driveropts:;
}
strcpy(skin->eject_device,argv[i]+13);
if(skin->verbosity>=Cdrskin_verbose_cmD)
#ifdef Cdrskin_burn_drive_eject_brokeN
printf("cdrskin: eject_device : %s\n",skin->eject_device);
#else
printf("cdrskin: ignoring obsolete eject_device=%s\n",
skin->eject_device);
#endif
#ifndef Cdrskin_extra_leaN

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2006.10.31.184736"
#define Cdrskin_timestamP "2006.11.01.163934"

View File

@ -6,6 +6,7 @@
debug_opts=
def_opts=
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
libvers="-DCdrskin_libburn_0_2_3"
cleanup_src_or_obj="libburn/cleanup.o"
libdax_msgs_o="libburn/libdax_msgs.o"
@ -50,6 +51,9 @@ do
elif test "$i" = "-oldfashioned"
then
def_opts="$def_opts -DCdrskin_oldfashioned_api_usE"
elif test "$i" = "-no_largefile"
then
largefile_opts=
elif test "$i" = "-do_not_compile_cdrskin"
then
compile_cdrskin=0
@ -76,6 +80,7 @@ do
echo " -cvs_A60220 set macro to match libburn-CVS of 20 Feb 2006."
echo " -libburn_0_2_2 set macro to match libburn-0.2.2."
echo " -libburn_0_2_3 set macro to match current libburn-SVN."
echo " -no_largefile do not use 64 bit off_t (must match libburn)."
echo " -do_not_compile_cdrskin omit compilation of cdrskin/cdrskin."
echo " -experimental use newly introduced libburn features."
echo " -oldfashioned use pre-0.2.2 libburn features only."
@ -99,7 +104,14 @@ echo "Build timestamp : $timestamp"
if test "$compile_cdrskin"
then
echo "compiling program cdrskin/cdrskin.c $static_opts $debug_opts $libvers $def_opts $cleanup_src_or_obj"
cc $warn_opts -I. $static_opts $debug_opts $libvers $def_opts \
cc -I. \
$warn_opts \
$static_opts \
$debug_opts \
$libvers \
$largefile_opts \
$def_opts \
\
-DCdrskin_build_timestamP='"'"$timestamp"'"' \
\
-o cdrskin/cdrskin \