diff --git a/Aaru.Core/Media/CompactDisc.cs b/Aaru.Core/Media/CompactDisc.cs index 43828b423..d1ee06c00 100644 --- a/Aaru.Core/Media/CompactDisc.cs +++ b/Aaru.Core/Media/CompactDisc.cs @@ -72,7 +72,8 @@ public static class CompactDisc bool fixSubchannelPosition, IWritableOpticalImage outputPlugin, bool fixSubchannel, bool fixSubchannelCrc, DumpLog dumpLog, UpdateStatusHandler updateStatus, - Dictionary smallestPregapLbaPerTrack, bool dumping, out List newPregapSectors) + Dictionary smallestPregapLbaPerTrack, bool dumping, + out List newPregapSectors) { // We need to work in PW raw subchannels if(supportedSubchannel == MmcSubchannel.Q16) @@ -88,7 +89,8 @@ public static class CompactDisc byte[] deSub = Subchannel.Deinterleave(sub); bool indexesChanged = CheckIndexesFromSubchannel(deSub, isrcs, currentTrack, ref mcn, tracks, dumpLog, - updateStatus, smallestPregapLbaPerTrack, dumping, out newPregapSectors); + updateStatus, smallestPregapLbaPerTrack, dumping, + out newPregapSectors); if(!fixSubchannelPosition || desiredSubchannel == MmcSubchannel.None) @@ -312,7 +314,8 @@ public static class CompactDisc static bool CheckIndexesFromSubchannel(byte[] deSub, Dictionary isrcs, byte currentTrack, ref string mcn, Track[] tracks, DumpLog dumpLog, UpdateStatusHandler updateStatus, - Dictionary smallestPregapLbaPerTrack, bool dumping, out List newPregapSectors) + Dictionary smallestPregapLbaPerTrack, bool dumping, + out List newPregapSectors) { var status = false; newPregapSectors = new List(); @@ -433,8 +436,8 @@ public static class CompactDisc updateStatus?.Invoke($"Pregap for track {trackNo} set to {tracks[i].Pregap} sectors."); for(var p = 0; p < dif; p++) - newPregapSectors.Add(tracks[i].StartSector+(ulong)p); - + newPregapSectors.Add(tracks[i].StartSector + (ulong)p); + status = true; } @@ -455,8 +458,8 @@ public static class CompactDisc updateStatus?.Invoke($"Pregap for track {trackNo} set to {tracks[i].Pregap} sectors."); for(var p = 0; p < (int)(tracks[i].Pregap - oldPregap); p++) - newPregapSectors.Add(tracks[i].StartSector +(ulong)p); - + newPregapSectors.Add(tracks[i].StartSector + (ulong)p); + status = true; continue; @@ -470,6 +473,11 @@ public static class CompactDisc var aframe = (byte)(q[9] / 16 * 10 + (q[9] & 0x0F)); int aPos = amin * 60 * 75 + asec * 75 + aframe - 150; + // Do not set INDEX 1 to a value higher than what the TOC already said. + if(q[2] == 1 && + aPos > (int)tracks[i].StartSector) + continue; + if(tracks[i].Indexes.ContainsKey(q[2]) && aPos >= tracks[i].Indexes[q[2]]) continue;