- SCD_TOC_Tracks[0].MSF.M = 0; // minutes
- SCD_TOC_Tracks[0].MSF.S = 2; // seconds
- SCD_TOC_Tracks[0].MSF.F = 0; // frames
+ if (cue_data != NULL)
+ {
+ if (cue_data->tracks[2].fname == NULL) { // NULL means track2 is in same file as track1
+ Cur_LBA = Tracks[0].Length = cue_data->tracks[2].sector_offset;
+ }
+ i = 100 / cue_data->track_count+1;
+ for (num_track = 2; num_track <= cue_data->track_count; num_track++)
+ {
+ if (PicoCDLoadProgressCB != NULL) PicoCDLoadProgressCB(i * num_track);
+ index = num_track - 1;
+ Cur_LBA += cue_data->tracks[num_track].pregap;
+ if (cue_data->tracks[num_track].type == CT_MP3) {
+ ret = audio_track_mp3(cue_data->tracks[num_track].fname, index);
+ if (ret != 0) break;
+ }
+ else
+ {
+ Tracks[index].ftype = cue_data->tracks[num_track].type;
+ if (cue_data->tracks[num_track].fname != NULL)
+ {
+ Tracks[index].F = pm_open(cue_data->tracks[num_track].fname);
+ elprintf(EL_STATUS, "track %2i (%s): can't determine length",
+ cue_data->tracks[num_track].fname);
+ Tracks[index].Length = 2*75;
+ Tracks[index].Offset = 0;
+ } else {
+ if (num_track < cue_data->track_count)
+ Tracks[index].Length = cue_data->tracks[num_track+1].sector_offset -
+ cue_data->tracks[num_track].sector_offset;
+ else
+ Tracks[index].Length = cd_img_sectors - cue_data->tracks[num_track].sector_offset;
+ Tracks[index].Offset = cue_data->tracks[num_track].sector_offset;
+ }
+ }