diff --git a/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs b/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs index 08627f76d..018de4173 100644 --- a/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs +++ b/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs @@ -100,6 +100,7 @@ namespace DiscImageChef.Core.Devices.Dumping int firstTrackLastSession = 0; ulong blocks; Track[] tracks; + var leadOutExtents = new ExtentsULong(); Dictionary mediaTags = new Dictionary(); // Media tags @@ -628,6 +629,31 @@ namespace DiscImageChef.Core.Devices.Dumping Array.Copy(cmdBuf, 4, tmpBuf, 0, cmdBuf.Length - 4); mediaTags.Add(MediaTagType.CD_TEXT, tmpBuf); } + + if(leadOutStarts.Any()) + { + UpdateStatus?.Invoke("Solving lead-outs..."); + + foreach(KeyValuePair leadOuts in leadOutStarts) + for(int i = 0; i < tracks.Length; i++) + { + if(tracks[i].TrackSession != leadOuts.Key) + continue; + + if(tracks[i].TrackEndSector >= (ulong)leadOuts.Value) + tracks[i].TrackEndSector = (ulong)leadOuts.Value - 1; + } + + var dataExtents = new ExtentsULong(); + + foreach(Track trk in tracks) + dataExtents.Add(trk.TrackStartSector, trk.TrackEndSector); + + Tuple[] dataExtentsArray = dataExtents.ToArray(); + + for(int i = 0; i < dataExtentsArray.Length - 1; i++) + leadOutExtents.Add(dataExtentsArray[i].Item2 + 1, dataExtentsArray[i + 1].Item1 - 1); + } } /// Dumps a compact disc @@ -747,33 +773,6 @@ namespace DiscImageChef.Core.Devices.Dumping if(MMC.IsVideoNowColor(videoNowColorFrame)) dskType = MediaType.VideoNowColor; - var leadOutExtents = new ExtentsULong(); - - if(leadOutStarts.Any()) - { - UpdateStatus?.Invoke("Solving lead-outs..."); - - foreach(KeyValuePair leadOuts in leadOutStarts) - for(int i = 0; i < tracks.Length; i++) - { - if(tracks[i].TrackSession != leadOuts.Key) - continue; - - if(tracks[i].TrackEndSector >= (ulong)leadOuts.Value) - tracks[i].TrackEndSector = (ulong)leadOuts.Value - 1; - } - - var dataExtents = new ExtentsULong(); - - foreach(Track trk in tracks) - dataExtents.Add(trk.TrackStartSector, trk.TrackEndSector); - - Tuple[] dataExtentsArray = dataExtents.ToArray(); - - for(int i = 0; i < dataExtentsArray.Length - 1; i++) - leadOutExtents.Add(dataExtentsArray[i].Item2 + 1, dataExtentsArray[i + 1].Item1 - 1); - } - // Check if output format supports all disc tags we have retrieved so far foreach(MediaTagType tag in mediaTags.Keys) {