Preparations for option -isosize via fifo (only a debug message yet)

This commit is contained in:
Thomas Schmitt 2007-03-27 21:33:22 +00:00
parent 749d12591e
commit 5d65697697
4 changed files with 75 additions and 2 deletions

View File

@ -77,6 +77,8 @@ struct CdrfifO {
double empty_counter; double empty_counter;
double full_counter; double full_counter;
/* eventual ISO-9660 image size obtained from first 64k of input */
double iso_fs_size;
/* (sequential) fd chaining */ /* (sequential) fd chaining */
/* fds: 0=source, 1=dest */ /* fds: 0=source, 1=dest */
@ -159,6 +161,7 @@ int Cdrfifo_new(struct CdrfifO **ff, int source_fd, int dest_fd,
o->get_counter= 0.0; o->get_counter= 0.0;
o->empty_counter= 0.0; o->empty_counter= 0.0;
o->full_counter= 0.0; o->full_counter= 0.0;
o->iso_fs_size= -1.0;
for(i= 0; i<Cdrfifo_ffd_maX; i++) { for(i= 0; i<Cdrfifo_ffd_maX; i++) {
o->follow_up_fds[i][0]= o->follow_up_fds[i][1]= -1; o->follow_up_fds[i][0]= o->follow_up_fds[i][1]= -1;
o->follow_up_eop[i]= o->follow_up_sod[i]= -1; o->follow_up_eop[i]= o->follow_up_sod[i]= -1;
@ -390,6 +393,13 @@ int Cdrfifo_get_min_fill(struct CdrfifO *o, int *total_min_fill,
} }
int Cdrfifo_get_iso_fs_size(struct CdrfifO *o, double *size_in_bytes, int flag)
{
*size_in_bytes= o->iso_fs_size;
return(o->iso_fs_size>=2048);
}
/** Get counters which are mentioned by cdrecord at the end of burning. /** Get counters which are mentioned by cdrecord at the end of burning.
It still has to be examined wether they mean what i believe they do. It still has to be examined wether they mean what i believe they do.
*/ */
@ -398,7 +408,7 @@ int Cdrfifo_get_cdr_counters(struct CdrfifO *o,
double *empty_counter, double *full_counter, double *empty_counter, double *full_counter,
int flag) int flag)
{ {
*put_counter= o->put_counter;; *put_counter= o->put_counter;
*get_counter= o->get_counter; *get_counter= o->get_counter;
*empty_counter= o->empty_counter; *empty_counter= o->empty_counter;
*full_counter= o->full_counter; *full_counter= o->full_counter;
@ -870,6 +880,24 @@ int Cdrfifo_fill(struct CdrfifO *o, int size, int flag)
if(ret==2) if(ret==2)
break; break;
} }
#ifndef Cdrfifo_standalonE
{ int Scan_for_iso_size(unsigned char data[2048], double *size_in_bytes,
int flag);
int i;
double size;
/* try to obtain an ISO-9660 file system size */
for(i= 0; i<32*2048 && i+2048<=fill; i+=2048) {
ret= Scan_for_iso_size((unsigned char *) (o->buffer+i), &size, 0);
if(ret<=0)
continue;
o->iso_fs_size= size;
break;
}
}
#endif
o->total_min_fill= fill; o->total_min_fill= fill;
o->interval_min_fill= fill; o->interval_min_fill= fill;
return(1); return(1);

View File

@ -117,6 +117,11 @@ int Cdrfifo_get_cdr_counters(struct CdrfifO *o,
double *empty_counter, double *full_counter, double *empty_counter, double *full_counter,
int flag); int flag);
/** Inquire the eventually detected size of an eventual ISO-9660 file system
@return 0=no ISO resp. size detected, 1=size_in_bytes is valid
*/
int Cdrfifo_get_iso_fs_size(struct CdrfifO *o, double *size_in_bytes,int flag);
/** Check for pending data at the fifo's source file descriptor and wether the /** Check for pending data at the fifo's source file descriptor and wether the
fifo is ready to take them. Simultaneously check the buffer for existing fifo is ready to take them. Simultaneously check the buffer for existing

View File

@ -552,6 +552,25 @@ int Sfile_home_adr_s(char *filename, char *fileadr, int fa_size, int flag)
#endif /* ! Cdrskin_extra_leaN */ #endif /* ! Cdrskin_extra_leaN */
/* <<< Preliminary sketch : to go into libburn later */
/* Learned from reading growisofs.c ,
watching mkisofs, and viewing its results via od -c */
/* @return 0=no size found , 1=*size_in_bytes is valid */
int Scan_for_iso_size(unsigned char data[2048], double *size_in_bytes,
int flag)
{
double sectors= 0.0;
if(data[0]!=1)
return(0);
if(strncmp((char *) (data+1),"CD001",5)!=0)
return(0);
sectors= data[80] | (data[81]<<8) | (data[82]<<16) | (data[83]<<24);
*size_in_bytes= sectors*2048.0;
return(1);
}
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
/** Address translation table for users/applications which do not look /** Address translation table for users/applications which do not look
@ -769,6 +788,9 @@ struct CdrtracK {
int track_type_by_default; int track_type_by_default;
int swap_audio_bytes; int swap_audio_bytes;
/** Eventually detected data image size */
double data_image_size;
/* wether the data source is a container of defined size with possible tail */ /* wether the data source is a container of defined size with possible tail */
int extracting_container; int extracting_container;
@ -837,6 +859,7 @@ int Cdrtrack_new(struct CdrtracK **track, struct CdrskiN *boss,
o->sector_size= 2048.0; o->sector_size= 2048.0;
o->track_type_by_default= 1; o->track_type_by_default= 1;
o->swap_audio_bytes= 0; o->swap_audio_bytes= 0;
o->data_image_size= -1.0;
o->extracting_container= 0; o->extracting_container= 0;
o->fifo_enabled= 0; o->fifo_enabled= 0;
o->fifo= NULL; o->fifo= NULL;
@ -846,6 +869,7 @@ int Cdrtrack_new(struct CdrtracK **track, struct CdrskiN *boss,
o->ff_fifo= NULL; o->ff_fifo= NULL;
o->ff_idx= -1; o->ff_idx= -1;
o->libburn_track= NULL; o->libburn_track= NULL;
ret= Cdrskin_get_source(boss,o->source_path,&(o->fixed_size), ret= Cdrskin_get_source(boss,o->source_path,&(o->fixed_size),
&(o->tao_to_sao_tsize),&(o->padding), &(o->tao_to_sao_tsize),&(o->padding),
&(o->set_by_padsize),&(skin_track_type), &(o->set_by_padsize),&(skin_track_type),
@ -1172,6 +1196,7 @@ int Cdrtrack_attach_fifo(struct CdrtracK *track, int *outlet_fd,
int Cdrtrack_fill_fifo(struct CdrtracK *track, int flag) int Cdrtrack_fill_fifo(struct CdrtracK *track, int flag)
{ {
int ret,buffer_fill,buffer_space; int ret,buffer_fill,buffer_space;
double data_image_size;
if(track->fifo==NULL || track->fifo_start_at==0) if(track->fifo==NULL || track->fifo_start_at==0)
return(2); return(2);
@ -1195,6 +1220,9 @@ int Cdrtrack_fill_fifo(struct CdrtracK *track, int flag)
return(0); return(0);
} }
} }
ret= Cdrfifo_get_iso_fs_size(track->fifo,&data_image_size,0);
if(ret>0)
track->data_image_size= data_image_size;
return(1); return(1);
} }
@ -5009,6 +5037,18 @@ burn_failed:;
fprintf(stderr,"cdrskin: FATAL : filling of fifo failed\n"); fprintf(stderr,"cdrskin: FATAL : filling of fifo failed\n");
goto ex; goto ex;
} }
/* <<< provisory for testing only */
if(skin->verbosity>=Cdrskin_verbose_debuG)
for(i=0;i<skin->track_counter;i++) {
if(skin->tracklist[i]->data_image_size>=0.0)
fprintf(stderr,
"cdrskin: DEBUG: track %2.2d : ISO size %.fs (= %.fb)\n",
i+1,
skin->tracklist[i]->data_image_size/2048.0,
skin->tracklist[i]->data_image_size);
}
#endif /* ! Cdrskin_extra_leaN */ #endif /* ! Cdrskin_extra_leaN */
Cdrskin_adjust_speed(skin,0); Cdrskin_adjust_speed(skin,0);

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2007.03.24.093623" #define Cdrskin_timestamP "2007.03.27.213543"