Handle dumping CD-i discs with audio tracks and a hidden data track 1. Fixes #703

This commit is contained in:
2022-04-18 15:37:36 +01:00
parent 90d0d6f6c9
commit 333d1e4310
3 changed files with 23 additions and 12 deletions

View File

@@ -562,14 +562,14 @@ sealed partial class Dump
{
new Track
{
Sequence = 0,
Sequence = (uint)(tracks.Any(t => t.Sequence == 1) ? 0 : 1),
Session = 1,
Type = hiddenData ? TrackType.Data : TrackType.Audio,
StartSector = 0,
BytesPerSector = (int)sectorSize,
RawBytesPerSector = (int)sectorSize,
SubchannelType = subType,
EndSector = tracks.First(t => t.Sequence == 1).StartSector - 1
EndSector = tracks.First(t => t.Sequence >= 1).StartSector - 1
}
};
@@ -785,6 +785,15 @@ sealed partial class Dump
StoppingErrorMessage?.Invoke($"Device error {_dev.LastError} trying to guess ideal transfer length.");
}
var cdiWithHiddenTrack1 = false;
if(dskType is MediaType.CDIREADY &&
tracks.Min(t => t.Sequence) == 1)
{
cdiWithHiddenTrack1 = true;
dskType = MediaType.CDI;
}
// Try to read the first track pregap
if(_dumpFirstTrackPregap && readcd)
ReadCdFirstTrackPregap(blockSize, ref currentSpeed, mediaTags, supportedSubchannel, ref totalDuration);
@@ -1099,9 +1108,9 @@ sealed partial class Dump
// Start reading
start = DateTime.UtcNow;
if(dskType == MediaType.CDIREADY)
if(dskType == MediaType.CDIREADY || cdiWithHiddenTrack1)
{
Track track0 = tracks.FirstOrDefault(t => t.Sequence == 0);
Track track0 = tracks.FirstOrDefault(t => t.Sequence is 0 or 1);
track0.Type = TrackType.CdMode2Formless;