Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Track numbers may not start at one.
Joint work with Thomas Schmitt.
  • Loading branch information
vext01 committed Dec 9, 2018
1 parent f282b9c commit 9d2cf9f
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 7 deletions.
5 changes: 3 additions & 2 deletions lib/cdda_interface/cddap_interface.c
Expand Up @@ -55,7 +55,7 @@ cddap_readtoc (cdrom_drive_t *d)
CDIO_CDROM_LEADOUT_TRACK);

d->cd_extra=FixupTOC(d, d->tracks+1); /* fixup includes lead-out */
return --i_track; /* number of tracks returned does not include lead-out */
return d->tracks; /* number of tracks returned does not include lead-out */
}


Expand Down Expand Up @@ -263,14 +263,15 @@ verify_read_command(cdrom_drive_t *d)
int16_t *buff=malloc(CDIO_CD_FRAMESIZE_RAW);
int audioflag=0;
int i_test_flags = d->i_test_flags;
int first_track = cdio_get_first_track_num(d->p_cdio);

d->i_test_flags = 0;

cdmessage(d,"Verifying drive can read CDDA...\n");

d->enable_cdda(d,1);

for(i=1;i<=d->tracks;i++){
for(i=first_track; i<first_track+d->tracks; i++){
if(cdda_track_audiop(d,i)==1){
long firstsector=cdda_track_firstsector(d,i);
long lastsector=cdda_track_lastsector(d,i);
Expand Down
6 changes: 4 additions & 2 deletions lib/cdda_interface/toc.c
Expand Up @@ -65,15 +65,17 @@ lsn_t
cdda_disc_firstsector(cdrom_drive_t *d)
{
int i;
int first_track = cdio_get_first_track_num(d->p_cdio);

if(!d->opened){
cderror(d,"400: Device not open\n");
return(-400);
}

/* look for an audio track */
for ( i=0; i<d->tracks; i++ )
for (i = first_track - 1; i < first_track - 1 + d->tracks; i++)
if( cdda_track_audiop(d, i+1)==1 ) {
if (i == 0) /* disc starts at lba 0 if first track is an audio track */
if (i == first_track - 1) /* disc starts at lba 0 if first track is an audio track */
return 0;
else
return cdda_track_firstsector(d, i+1);
Expand Down
3 changes: 2 additions & 1 deletion lib/paranoia/p_block.c
Expand Up @@ -384,7 +384,8 @@ i_paranoia_firstlast(cdrom_paranoia_t *p)
i = cdda_sector_gettrack(d, p->cursor);

if ( CDIO_INVALID_TRACK != i ) {
if ( 0 == i ) i++;
if ( 0 == i )
i = cdio_get_first_track_num(d->p_cdio);
j = i;
/* In the below loops, We assume the cursor already is on an audio
sector. Not sure if this is correct if p->cursor is in the pregap
Expand Down
8 changes: 6 additions & 2 deletions src/cd-paranoia.c
Expand Up @@ -148,7 +148,7 @@ parse_offset(cdrom_drive_t *d, char *offset, int begin)
if(chars>0){
offset[chars]='\0';
i_track=atoi(offset);
if ( i_track > d->tracks ) {
if (i_track >= cdio_get_first_track_num(d->p_cdio) + d->tracks) {
/*take track i_first_track-1 as pre-gap of 1st track*/
report("Track #%d does not exist.",i_track);
exit(1);
Expand Down Expand Up @@ -1189,16 +1189,20 @@ main(int argc,char *argv[])

{
int track1 = cdda_sector_gettrack(d, i_first_lsn);

int track2 = cdda_sector_gettrack(d, i_last_lsn);
long off1 = i_first_lsn - cdda_track_firstsector(d, track1);
long off2 = i_last_lsn - cdda_track_firstsector(d, track2);
int i;

for( i=track1; i<=track2; i++ )
for( i=track1; i<=track2; i++ ) {
if(i != 0 && !cdda_track_audiop(d,i)){
report("Selected span contains non audio track at track %02d. Aborting.\n\n", i);
exit(1);
if (i == 0)
i = cdio_get_first_track_num(d->p_cdio) - 1;
}
}

report("Ripping from sector %7ld (track %2d [%d:%02d.%02d])\n"
"\t to sector %7ld (track %2d [%d:%02d.%02d])\n",
Expand Down

0 comments on commit 9d2cf9f

Please sign in to comment.