mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Mark newly discovered pregap sectors for retry. Fixes incorrect data on some track type changes.
This commit is contained in:
@@ -30,8 +30,6 @@
|
||||
// Copyright © 2011-2022 Natalia Portillo
|
||||
// ****************************************************************************/
|
||||
|
||||
|
||||
|
||||
// ReSharper disable JoinDeclarationAndInitializer
|
||||
// ReSharper disable InlineOutVariableDeclaration
|
||||
// ReSharper disable TooWideLocalVariableScope
|
||||
@@ -268,7 +266,8 @@ partial class Dump
|
||||
bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel,
|
||||
desiredSubchannel, sub, i + r, 1, subLog, isrcs, 1, ref mcn, tracks,
|
||||
subchannelExtents, _fixSubchannelPosition, outputOptical, _fixSubchannel,
|
||||
_fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack, true);
|
||||
_fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack, true,
|
||||
out List<ulong> newPregapSectors);
|
||||
|
||||
// Set tracks and go back
|
||||
if(indexesChanged)
|
||||
@@ -350,13 +349,24 @@ partial class Dump
|
||||
bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel,
|
||||
desiredSubchannel, sub, i, blocksToRead, subLog, isrcs, 1, ref mcn, tracks,
|
||||
subchannelExtents, _fixSubchannelPosition, outputOptical, _fixSubchannel,
|
||||
_fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack, true);
|
||||
_fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack, true,
|
||||
out List<ulong> newPregapSectors);
|
||||
|
||||
// Set tracks and go back
|
||||
if(indexesChanged)
|
||||
{
|
||||
outputOptical.SetTracks(tracks.ToList());
|
||||
i -= blocksToRead;
|
||||
|
||||
foreach(ulong newPregapSector in newPregapSectors)
|
||||
_resume.BadBlocks.Add(newPregapSector);
|
||||
|
||||
if(i >= blocksToRead)
|
||||
i -= blocksToRead;
|
||||
else
|
||||
i = 0;
|
||||
|
||||
if(i > 0)
|
||||
i--;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -50,6 +50,7 @@ using Aaru.Decoders.CD;
|
||||
using Aaru.Decoders.SCSI;
|
||||
using Aaru.Devices;
|
||||
using Schemas;
|
||||
using TrackType = Aaru.CommonTypes.Enums.TrackType;
|
||||
|
||||
partial class Dump
|
||||
{
|
||||
@@ -513,13 +514,26 @@ partial class Dump
|
||||
desiredSubchannel, sub, i + r, 1, subLog, isrcs, (byte)track.Sequence, ref mcn,
|
||||
tracks, subchannelExtents, _fixSubchannelPosition,
|
||||
outputFormat as IWritableOpticalImage, _fixSubchannel, _fixSubchannelCrc, _dumpLog,
|
||||
UpdateStatus, smallestPregapLbaPerTrack, true);
|
||||
UpdateStatus, smallestPregapLbaPerTrack, true, out List<ulong> newPregapSectors);
|
||||
|
||||
// Set tracks and go back
|
||||
if(indexesChanged)
|
||||
{
|
||||
(outputFormat as IWritableOpticalImage).SetTracks(tracks.ToList());
|
||||
i -= blocksToRead;
|
||||
|
||||
foreach(ulong newPregapSector in newPregapSectors)
|
||||
_resume.BadBlocks.Add(newPregapSector);
|
||||
|
||||
if(i >= blocksToRead)
|
||||
i -= blocksToRead;
|
||||
else
|
||||
i = 0;
|
||||
|
||||
if(i > 0)
|
||||
i--;
|
||||
|
||||
foreach(Track aTrack in tracks.Where(aTrack => aTrack.Type == TrackType.Audio))
|
||||
audioExtents.Add(aTrack.StartSector, aTrack.EndSector);
|
||||
|
||||
continue;
|
||||
}
|
||||
@@ -656,14 +670,27 @@ partial class Dump
|
||||
bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel,
|
||||
desiredSubchannel, sub, i, blocksToRead, subLog, isrcs, (byte)track.Sequence, ref mcn,
|
||||
tracks, subchannelExtents, _fixSubchannelPosition, outputFormat as IWritableOpticalImage,
|
||||
_fixSubchannel, _fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack,
|
||||
true);
|
||||
_fixSubchannel, _fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack, true,
|
||||
out List<ulong> newPregapSectors);
|
||||
|
||||
// Set tracks and go back
|
||||
if(indexesChanged)
|
||||
{
|
||||
(outputFormat as IWritableOpticalImage).SetTracks(tracks.ToList());
|
||||
i -= blocksToRead;
|
||||
|
||||
foreach(ulong newPregapSector in newPregapSectors)
|
||||
_resume.BadBlocks.Add(newPregapSector);
|
||||
|
||||
if(i >= blocksToRead)
|
||||
i -= blocksToRead;
|
||||
else
|
||||
i = 0;
|
||||
|
||||
if(i > 0)
|
||||
i--;
|
||||
|
||||
foreach(Track aTrack in tracks.Where(aTrack => aTrack.Type == TrackType.Audio))
|
||||
audioExtents.Add(aTrack.StartSector, aTrack.EndSector);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -30,8 +30,6 @@
|
||||
// Copyright © 2011-2022 Natalia Portillo
|
||||
// ****************************************************************************/
|
||||
|
||||
|
||||
|
||||
// ReSharper disable JoinDeclarationAndInitializer
|
||||
// ReSharper disable InlineOutVariableDeclaration
|
||||
// ReSharper disable TooWideLocalVariableScope
|
||||
@@ -367,7 +365,7 @@ partial class Dump
|
||||
_fixSubchannelPosition, outputOptical,
|
||||
_fixSubchannel, _fixSubchannelCrc,
|
||||
_dumpLog, UpdateStatus,
|
||||
smallestPregapLbaPerTrack, true);
|
||||
smallestPregapLbaPerTrack, true, out _);
|
||||
|
||||
// Set tracks and go back
|
||||
if(!indexesChanged)
|
||||
@@ -497,14 +495,14 @@ partial class Dump
|
||||
bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel,
|
||||
desiredSubchannel, sub, badSector, 1, subLog, isrcs, (byte)track.Sequence, ref mcn,
|
||||
tracks, subchannelExtents, _fixSubchannelPosition, outputOptical, _fixSubchannel,
|
||||
_fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack, true);
|
||||
_fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack, true, out _);
|
||||
|
||||
// Set tracks and go back
|
||||
if(indexesChanged)
|
||||
{
|
||||
outputOptical.SetTracks(tracks.ToList());
|
||||
i--;
|
||||
}
|
||||
if(!indexesChanged)
|
||||
continue;
|
||||
|
||||
outputOptical.SetTracks(tracks.ToList());
|
||||
i--;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -660,7 +658,7 @@ partial class Dump
|
||||
subLog, isrcs, (byte)track.Sequence, ref mcn, tracks,
|
||||
subchannelExtents, _fixSubchannelPosition, outputOptical,
|
||||
_fixSubchannel, _fixSubchannelCrc, _dumpLog, UpdateStatus,
|
||||
smallestPregapLbaPerTrack, true);
|
||||
smallestPregapLbaPerTrack, true, out _);
|
||||
|
||||
if(subchannelExtents.Contains(bs))
|
||||
continue;
|
||||
|
||||
@@ -30,8 +30,6 @@
|
||||
// Copyright © 2011-2022 Natalia Portillo
|
||||
// ****************************************************************************/
|
||||
|
||||
|
||||
|
||||
// ReSharper disable JoinDeclarationAndInitializer
|
||||
// ReSharper disable InlineOutVariableDeclaration
|
||||
// ReSharper disable TooWideLocalVariableScope
|
||||
@@ -165,7 +163,7 @@ partial class Dump
|
||||
bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel,
|
||||
desiredSubchannel, sub, i, _maximumReadable, subLog, isrcs, 0xAA, ref mcn, tracks,
|
||||
subchannelExtents, _fixSubchannelPosition, outputOptical, _fixSubchannel,
|
||||
_fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack, true);
|
||||
_fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack, true, out _);
|
||||
|
||||
// Set tracks and go back
|
||||
if(indexesChanged)
|
||||
@@ -333,7 +331,7 @@ partial class Dump
|
||||
bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel,
|
||||
desiredSubchannel, sub, i, _maximumReadable, subLog, isrcs, 0xAA, ref mcn, tracks,
|
||||
subchannelExtents, _fixSubchannelPosition, outputOptical, _fixSubchannel,
|
||||
_fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack, true);
|
||||
_fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack, true, out _);
|
||||
|
||||
// Set tracks and go back
|
||||
if(indexesChanged)
|
||||
|
||||
@@ -30,8 +30,6 @@
|
||||
// Copyright © 2011-2022 Natalia Portillo
|
||||
// ****************************************************************************/
|
||||
|
||||
|
||||
|
||||
// ReSharper disable JoinDeclarationAndInitializer
|
||||
// ReSharper disable InlineOutVariableDeclaration
|
||||
// ReSharper disable TooWideLocalVariableScope
|
||||
@@ -271,7 +269,7 @@ partial class Dump
|
||||
_fixSubchannelPosition, outputOptical,
|
||||
_fixSubchannel, _fixSubchannelCrc,
|
||||
_dumpLog, UpdateStatus,
|
||||
smallestPregapLbaPerTrack, true);
|
||||
smallestPregapLbaPerTrack, true, out _);
|
||||
|
||||
// Set tracks and go back
|
||||
if(!indexesChanged)
|
||||
|
||||
Reference in New Issue
Block a user