Enabled byte swapping for audio track sources, added anti option -swab
This commit is contained in:
parent
0d26beb2ed
commit
f95d7aa6aa
@ -184,7 +184,7 @@ Anything except .wav files has to be converted into raw format first
|
||||
mppdec --raw-le /path/to/track5.mpc track05.cd
|
||||
|
||||
cdrskin dev=1,1,0 blank=fast fs=0 -eject \
|
||||
-audio track0[1-5].cd /path/to/track6.wav
|
||||
-audio -swab track0[1-5].cd /path/to/track6.wav
|
||||
|
||||
|
||||
Usage example with http://scdbackup.sourceforge.net
|
||||
@ -357,7 +357,7 @@ results with audio data files which are :
|
||||
44100 Hz sampling rate
|
||||
16 bits per sample
|
||||
stereo (2 channels)
|
||||
little-endian byte order
|
||||
little-endian byte order with option -swab
|
||||
Files with name extension .wav get examined wether they are in Microsoft WAVE
|
||||
format with above parameters and eventually get extracted by cdrskin itself.
|
||||
All other formats (including SUN's format .au) are to be extracted by commands
|
||||
|
@ -776,6 +776,7 @@ struct CdrtracK {
|
||||
int track_type;
|
||||
double sector_size;
|
||||
int track_type_by_default;
|
||||
int swap_audio_bytes;
|
||||
|
||||
/** Optional fifo between input fd and libburn. It uses a pipe(2) to transfer
|
||||
data to libburn.
|
||||
@ -812,7 +813,8 @@ int Cdrtrack_new(struct CdrtracK **track, struct CdrskiN *boss,
|
||||
int Cdrskin_get_source(struct CdrskiN *skin, char *source_path,
|
||||
double *fixed_size, double *padding,
|
||||
int *set_by_padsize, int *track_type,
|
||||
int *track_type_by_default, int flag);
|
||||
int *track_type_by_default, int *swap_audio_bytes,
|
||||
int flag);
|
||||
int Cdrskin_get_fifo_par(struct CdrskiN *skin, int *fifo_enabled,
|
||||
int *fifo_size, int *fifo_start_empty, int flag);
|
||||
|
||||
@ -831,6 +833,7 @@ int Cdrtrack_new(struct CdrtracK **track, struct CdrskiN *boss,
|
||||
o->track_type= BURN_MODE1;
|
||||
o->sector_size= 2048.0;
|
||||
o->track_type_by_default= 1;
|
||||
o->swap_audio_bytes= 0;
|
||||
o->fifo_enabled= 0;
|
||||
o->fifo= NULL;
|
||||
o->fifo_outlet_fd= -1;
|
||||
@ -839,7 +842,8 @@ int Cdrtrack_new(struct CdrtracK **track, struct CdrskiN *boss,
|
||||
o->libburn_track= NULL;
|
||||
ret= Cdrskin_get_source(boss,o->source_path,&(o->fixed_size),&(o->padding),
|
||||
&(o->set_by_padsize),&(skin_track_type),
|
||||
&(o->track_type_by_default),0);
|
||||
&(o->track_type_by_default),&(o->swap_audio_bytes),
|
||||
0);
|
||||
if(ret<=0)
|
||||
goto failed;
|
||||
Cdrtrack_set_track_type(o,skin_track_type,0);
|
||||
@ -964,8 +968,10 @@ int Cdrtrack_extract_audio(struct CdrtracK *track, int *fd, off_t *xtr_size,
|
||||
ret= libdax_audioxtr_detach_fd(xtr,fd,0);
|
||||
if(ret<=0)
|
||||
{ret= -1*!!ret; goto ex;}
|
||||
fprintf(stderr,"cdrskin: NOTE : %.f audio bytes in '%s'\n",
|
||||
(double) *xtr_size, track->source_path);
|
||||
track->swap_audio_bytes= !!msb_first;
|
||||
fprintf(stderr,"cdrskin: NOTE : %.f %saudio bytes in '%s'\n",
|
||||
(double) *xtr_size, (msb_first ? "" : "(-swab) "),
|
||||
track->source_path);
|
||||
ret= 1;
|
||||
ex:
|
||||
libdax_audioxtr_destroy(&xtr,0);
|
||||
@ -1179,7 +1185,8 @@ int Cdrtrack_add_to_session(struct CdrtracK *track, int trackno,
|
||||
}
|
||||
burn_track_define_data(tr,0,(int) lib_padding,sector_pad_up,
|
||||
track->track_type);
|
||||
|
||||
burn_track_set_byte_swap(tr,
|
||||
(track->track_type==BURN_AUDIO && track->swap_audio_bytes));
|
||||
fixed_size= track->fixed_size;
|
||||
if((flag&2) && track->padding>0) {
|
||||
if(flag&1)
|
||||
@ -1983,6 +1990,8 @@ see_cdrskin_eng_html:;
|
||||
"\t-data\t\tSubsequent tracks are CD-ROM data mode 1 (default)\n");
|
||||
fprintf(stderr,"\t-pad\t\tpadsize=30k\n");
|
||||
fprintf(stderr,"\t-nopad\t\tDo not pad (default)\n");
|
||||
fprintf(stderr,
|
||||
"\t-swab\t\tAudio data source is byte-swapped (little-endian/Intel)\n");
|
||||
fprintf(stderr,"\t-help\t\tprint this text to stderr and exit\n");
|
||||
fprintf(stderr,
|
||||
"Option -audio does automatic extraction of .wav but not of .au .\n");
|
||||
@ -2241,6 +2250,7 @@ struct CdrskiN {
|
||||
/** track_type may be set to BURN_MODE1, BURN_AUDIO, etc. */
|
||||
int track_type;
|
||||
int track_type_by_default; /* 0= explicit, 1=not set, 2=by file extension */
|
||||
int swap_audio_bytes;
|
||||
|
||||
/** The list of tracks with their data sources and parameters */
|
||||
struct CdrtracK *tracklist[Cdrskin_track_maX];
|
||||
@ -2343,6 +2353,7 @@ int Cdrskin_new(struct CdrskiN **skin, struct CdrpreskiN *preskin, int flag)
|
||||
o->padding= 0.0;
|
||||
o->set_by_padsize= 0;
|
||||
o->track_type= BURN_MODE1;
|
||||
o->swap_audio_bytes= 0; /* >>> ??? does this have to be 1 ? */
|
||||
o->track_type_by_default= 1;
|
||||
for(i=0;i<Cdrskin_track_maX;i++)
|
||||
o->tracklist[i]= NULL;
|
||||
@ -2413,7 +2424,8 @@ int Cdrskin_destroy(struct CdrskiN **o, int flag)
|
||||
int Cdrskin_get_source(struct CdrskiN *skin, char *source_path,
|
||||
double *fixed_size, double *padding,
|
||||
int *set_by_padsize, int *track_type,
|
||||
int *track_type_by_default, int flag)
|
||||
int *track_type_by_default, int *swap_audio_bytes,
|
||||
int flag)
|
||||
{
|
||||
strcpy(source_path,skin->source_path);
|
||||
*fixed_size= skin->fixed_size;
|
||||
@ -2421,6 +2433,7 @@ int Cdrskin_get_source(struct CdrskiN *skin, char *source_path,
|
||||
*set_by_padsize= skin->set_by_padsize;
|
||||
*track_type= skin->track_type;
|
||||
*track_type_by_default= skin->track_type_by_default;
|
||||
*swap_audio_bytes= skin->swap_audio_bytes;
|
||||
return(1);
|
||||
}
|
||||
|
||||
@ -4368,7 +4381,7 @@ int Cdrskin_setup(struct CdrskiN *skin, int argc, char **argv, int flag)
|
||||
"-immed", "-force", "-raw", "-raw96p", "-raw16",
|
||||
"-clone", "-text", "-mode2", "-xa", "-xa1", "-xa2", "-xamix",
|
||||
"-cdi", "-isosize", "-preemp", "-nopreemp", "-copy", "-nocopy",
|
||||
"-scms", "-shorttrack", "-noshorttrack", "-swab", "-packet", "-noclose",
|
||||
"-scms", "-shorttrack", "-noshorttrack", "-packet", "-noclose",
|
||||
""
|
||||
};
|
||||
|
||||
@ -4745,6 +4758,9 @@ set_speed:;
|
||||
if(skin->verbosity>=Cdrskin_verbose_cmD)
|
||||
printf("cdrskin: speed : %f\n",skin->x_speed);
|
||||
|
||||
} else if(strcmp(argv[i],"-swab")==0) {
|
||||
skin->swap_audio_bytes= 0;
|
||||
|
||||
} else if(strcmp(argv[i],"-tao")==0) {
|
||||
if(skin->tao_to_sao_tsize<=0.0) {
|
||||
fprintf(stderr,"cdrskin: FATAL : libburn does not support -tao yet.\n");
|
||||
|
@ -1 +1 @@
|
||||
#define Cdrskin_timestamP "2006.10.24.075039"
|
||||
#define Cdrskin_timestamP "2006.10.24.102107"
|
||||
|
@ -849,6 +849,16 @@ int burn_session_remove_track(struct burn_session *s, struct burn_track *t);
|
||||
void burn_track_define_data(struct burn_track *t, int offset, int tail,
|
||||
int pad, int mode);
|
||||
|
||||
|
||||
/* ts A61024 */
|
||||
/** Define wether a track shall swap bytes of its input stream.
|
||||
@param t The track to change
|
||||
@param swap_source_bytes 0=do not swap, 1=swap byte pairs
|
||||
@return 1=success , 0=unacceptable value
|
||||
*/
|
||||
int burn_track_set_byte_swap(struct burn_track *t, int swap_source_bytes);
|
||||
|
||||
|
||||
/** Set the ISRC details for a track
|
||||
@param t The track to change
|
||||
@param country the 2 char country code. Each character must be
|
||||
|
@ -79,7 +79,7 @@ static int get_outmode(struct burn_write_opts *o)
|
||||
|
||||
static void get_bytes(struct burn_track *track, int count, unsigned char *data)
|
||||
{
|
||||
int valid, shortage, curr;
|
||||
int valid, shortage, curr, i, tr;
|
||||
|
||||
/* no track pointer means we're just generating 0s */
|
||||
if (!track) {
|
||||
@ -147,9 +147,17 @@ static void get_bytes(struct burn_track *track, int count, unsigned char *data)
|
||||
curr += valid;
|
||||
}
|
||||
}
|
||||
if (!shortage)
|
||||
return;
|
||||
memset(data + curr, 0, shortage);
|
||||
ex:;
|
||||
/* ts A61024 : general finalizing processing */
|
||||
if(shortage)
|
||||
memset(data + curr, 0, shortage); /* this is old icculus.org */
|
||||
if (track->swap_source_bytes == 1) {
|
||||
for (i = 1; i < count; i += 2) {
|
||||
tr = data[i];
|
||||
data[i] = data[i-1];
|
||||
data[i-1] = tr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* ts A61009 : seems to hand out sector start pointer in opts->drive->buffer
|
||||
|
@ -118,6 +118,9 @@ struct burn_track *burn_track_create(void)
|
||||
t->postgap = 0;
|
||||
t->pregap1 = 0;
|
||||
t->pregap2 = 0;
|
||||
|
||||
/* ts A61024 */
|
||||
t->swap_source_bytes = 0;
|
||||
return t;
|
||||
}
|
||||
|
||||
@ -227,6 +230,17 @@ void burn_track_define_data(struct burn_track *t, int offset, int tail,
|
||||
t->tail = tail;
|
||||
}
|
||||
|
||||
|
||||
/* ts A61024 */
|
||||
int burn_track_set_byte_swap(struct burn_track *t, int swap_source_bytes)
|
||||
{
|
||||
if(swap_source_bytes!=0 && swap_source_bytes!=1)
|
||||
return 0;
|
||||
t->swap_source_bytes = swap_source_bytes;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
void burn_track_set_isrc(struct burn_track *t, char *country, char *owner,
|
||||
unsigned char year, unsigned int serial)
|
||||
{
|
||||
|
@ -41,6 +41,10 @@ struct burn_track
|
||||
/** The track contains a postgap */
|
||||
int postgap;
|
||||
struct isrc isrc;
|
||||
|
||||
/* ts A61024 */
|
||||
/** Byte swapping on source data stream : 0=none , 1=pairwise */
|
||||
int swap_source_bytes;
|
||||
};
|
||||
|
||||
struct burn_session
|
||||
|
Loading…
Reference in New Issue
Block a user