Move subchannel generation and fixing to a separate class.

This commit is contained in:
2020-07-14 01:06:23 +01:00
parent 1073fe47c6
commit f1244d543c
11 changed files with 1782 additions and 1761 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -2,6 +2,8 @@
<module type="RIDER_MODULE" version="4"> <module type="RIDER_MODULE" version="4">
<component name="NewModuleRootManager"> <component name="NewModuleRootManager">
<content url="file://$USER_HOME$/.nuget/packages/microsoft.net.test.sdk/16.4.0/build/netcoreapp2.1" /> <content url="file://$USER_HOME$/.nuget/packages/microsoft.net.test.sdk/16.4.0/build/netcoreapp2.1" />
<content url="file://$USER_HOME$/.nuget/packages/microsoft.testplatform.testhost/16.4.0/build/netcoreapp2.1/x64/testhost.dll" />
<content url="file://$USER_HOME$/.nuget/packages/microsoft.testplatform.testhost/16.4.0/build/netcoreapp2.1/x64/testhost.exe" />
<content url="file://$USER_HOME$/.nuget/packages/nunit3testadapter/3.15.1/build/netcoreapp2.0/NUnit3.TestAdapter.dll" /> <content url="file://$USER_HOME$/.nuget/packages/nunit3testadapter/3.15.1/build/netcoreapp2.0/NUnit3.TestAdapter.dll" />
<content url="file://$USER_HOME$/.nuget/packages/nunit3testadapter/3.15.1/build/netcoreapp2.0/NUnit3.TestAdapter.pdb" /> <content url="file://$USER_HOME$/.nuget/packages/nunit3testadapter/3.15.1/build/netcoreapp2.0/NUnit3.TestAdapter.pdb" />
<content url="file://$USER_HOME$/.nuget/packages/nunit3testadapter/3.15.1/build/netcoreapp2.0/nunit.engine.api.dll" /> <content url="file://$USER_HOME$/.nuget/packages/nunit3testadapter/3.15.1/build/netcoreapp2.0/nunit.engine.api.dll" />

View File

@@ -79,6 +79,7 @@
<Compile Include="ImageInfo.cs" /> <Compile Include="ImageInfo.cs" />
<Compile Include="Logging\ErrorLog.cs" /> <Compile Include="Logging\ErrorLog.cs" />
<Compile Include="Logging\SubchannelLog.cs" /> <Compile Include="Logging\SubchannelLog.cs" />
<Compile Include="Media\CompactDisc.cs" />
<Compile Include="Media\Detection\MMC.cs" /> <Compile Include="Media\Detection\MMC.cs" />
<Compile Include="Media\Info\CompactDisc.cs" /> <Compile Include="Media\Info\CompactDisc.cs" />
<Compile Include="Media\Info\ScsiInfo.cs" /> <Compile Include="Media\Info\ScsiInfo.cs" />

View File

@@ -269,9 +269,10 @@ namespace Aaru.Core.Devices.Dumping
_outputPlugin.WriteSectorsLong(data, i + r, 1); _outputPlugin.WriteSectorsLong(data, i + r, 1);
bool indexesChanged = bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel,
WriteSubchannelToImage(supportedSubchannel, desiredSubchannel, sub, i + r, 1, desiredSubchannel, sub, i + r, 1, subLog, isrcs, 1, ref mcn, tracks,
subLog, isrcs, 1, ref mcn, tracks, subchannelExtents); subchannelExtents, _fixSubchannelPosition, _outputPlugin, _fixSubchannel,
_fixSubchannelCrc, _dumpLog, UpdateStatus);
// Set tracks and go back // Set tracks and go back
if(indexesChanged) if(indexesChanged)
@@ -353,9 +354,10 @@ namespace Aaru.Core.Devices.Dumping
_outputPlugin.WriteSectorsLong(data, i, blocksToRead); _outputPlugin.WriteSectorsLong(data, i, blocksToRead);
bool indexesChanged = WriteSubchannelToImage(supportedSubchannel, desiredSubchannel, sub, i, bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel,
blocksToRead, subLog, isrcs, 1, ref mcn, tracks, desiredSubchannel, sub, i, blocksToRead, subLog, isrcs, 1, ref mcn, tracks,
subchannelExtents); subchannelExtents, _fixSubchannelPosition, _outputPlugin, _fixSubchannel,
_fixSubchannelCrc, _dumpLog, UpdateStatus);
// Set tracks and go back // Set tracks and go back
if(indexesChanged) if(indexesChanged)

View File

@@ -393,10 +393,10 @@ namespace Aaru.Core.Devices.Dumping
_outputPlugin.WriteSectorsLong(data, i + r, 1); _outputPlugin.WriteSectorsLong(data, i + r, 1);
bool indexesChanged = bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel,
WriteSubchannelToImage(supportedSubchannel, desiredSubchannel, sub, i + r, 1, desiredSubchannel, sub, i + r, 1, subLog, isrcs, (byte)track.TrackSequence,
subLog, isrcs, (byte)track.TrackSequence, ref mcn, tracks, ref mcn, tracks, subchannelExtents, _fixSubchannelPosition, _outputPlugin,
subchannelExtents); _fixSubchannel, _fixSubchannelCrc, _dumpLog, UpdateStatus);
// Set tracks and go back // Set tracks and go back
if(indexesChanged) if(indexesChanged)
@@ -526,10 +526,10 @@ namespace Aaru.Core.Devices.Dumping
_outputPlugin.WriteSectorsLong(data, i, blocksToRead); _outputPlugin.WriteSectorsLong(data, i, blocksToRead);
bool indexesChanged = WriteSubchannelToImage(supportedSubchannel, desiredSubchannel, sub, i, bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel,
blocksToRead, subLog, isrcs, desiredSubchannel, sub, i, blocksToRead, subLog, isrcs, (byte)track.TrackSequence,
(byte)track.TrackSequence, ref mcn, tracks, ref mcn, tracks, subchannelExtents, _fixSubchannelPosition, _outputPlugin,
subchannelExtents); _fixSubchannel, _fixSubchannelCrc, _dumpLog, UpdateStatus);
// Set tracks and go back // Set tracks and go back
if(indexesChanged) if(indexesChanged)

View File

@@ -406,7 +406,7 @@ namespace Aaru.Core.Devices.Dumping
} }
if(!(_outputPlugin as IWritableOpticalImage).OpticalCapabilities.HasFlag(OpticalImageCapabilities. if(!(_outputPlugin as IWritableOpticalImage).OpticalCapabilities.HasFlag(OpticalImageCapabilities.
CanStorePregaps) && CanStorePregaps) &&
tracks.Where(track => track.TrackSequence != tracks.Where(track => track.TrackSequence !=
tracks.First(t => t.TrackSession == track.TrackSession).TrackSequence). tracks.First(t => t.TrackSession == track.TrackSession).TrackSequence).
Any(track => track.TrackPregap > 0)) Any(track => track.TrackPregap > 0))
@@ -793,7 +793,7 @@ namespace Aaru.Core.Devices.Dumping
// If a subchannel is supported, check if output plugin allows us to write it. // If a subchannel is supported, check if output plugin allows us to write it.
if(desiredSubchannel != MmcSubchannel.None && if(desiredSubchannel != MmcSubchannel.None &&
!(_outputPlugin as IWritableOpticalImage).OpticalCapabilities.HasFlag(OpticalImageCapabilities. !(_outputPlugin as IWritableOpticalImage).OpticalCapabilities.HasFlag(OpticalImageCapabilities.
CanStoreSubchannelRw)) CanStoreSubchannelRw))
{ {
_dumpLog.WriteLine("Output image does not support subchannels, {0}continuing...", _force ? "" : "not "); _dumpLog.WriteLine("Output image does not support subchannels, {0}continuing...", _force ? "" : "not ");
@@ -1219,7 +1219,8 @@ namespace Aaru.Core.Devices.Dumping
_resume.BadSubchannels.Sort(); _resume.BadSubchannels.Sort();
if(_generateSubchannels && _outputPlugin.SupportedSectorTags.Contains(SectorTagType.CdSectorSubchannel)) if(_generateSubchannels && _outputPlugin.SupportedSectorTags.Contains(SectorTagType.CdSectorSubchannel))
GenerateSubchannels(subchannelExtents, tracks, trackFlags, blocks, subLog); Media.CompactDisc.GenerateSubchannels(subchannelExtents, tracks, trackFlags, blocks, subLog, _dumpLog,
InitProgress, UpdateProgress, EndProgress, _outputPlugin);
// TODO: Disc ID // TODO: Disc ID
var metadata = new CommonTypes.Structs.ImageInfo var metadata = new CommonTypes.Structs.ImageInfo

View File

@@ -292,9 +292,10 @@ namespace Aaru.Core.Devices.Dumping
Array.Copy(cmdBuf, sectorSize, sub, 0, subSize); Array.Copy(cmdBuf, sectorSize, sub, 0, subSize);
_outputPlugin.WriteSectorLong(data, badSector); _outputPlugin.WriteSectorLong(data, badSector);
bool indexesChanged = WriteSubchannelToImage(supportedSubchannel, desiredSubchannel, sub, badSector, bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel,
1, subLog, isrcs, (byte)track.TrackSequence, ref mcn, desiredSubchannel, sub, badSector, 1, subLog, isrcs, (byte)track.TrackSequence, ref mcn,
tracks, subchannelExtents); tracks, subchannelExtents, _fixSubchannelPosition, _outputPlugin, _fixSubchannel,
_fixSubchannelCrc, _dumpLog, UpdateStatus);
// Set tracks and go back // Set tracks and go back
if(indexesChanged) if(indexesChanged)
@@ -410,10 +411,10 @@ namespace Aaru.Core.Devices.Dumping
Array.Copy(cmdBuf, sectorSize, sub, 0, subSize); Array.Copy(cmdBuf, sectorSize, sub, 0, subSize);
_outputPlugin.WriteSectorLong(data, badSector); _outputPlugin.WriteSectorLong(data, badSector);
bool indexesChanged = WriteSubchannelToImage(supportedSubchannel, desiredSubchannel, sub, bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel,
badSector, 1, subLog, isrcs, desiredSubchannel, sub, badSector, 1, subLog, isrcs, (byte)track.TrackSequence,
(byte)track.TrackSequence, ref mcn, tracks, ref mcn, tracks, subchannelExtents, _fixSubchannelPosition, _outputPlugin,
subchannelExtents); _fixSubchannel, _fixSubchannelCrc, _dumpLog, UpdateStatus);
// Set tracks and go back // Set tracks and go back
if(indexesChanged) if(indexesChanged)
@@ -555,8 +556,10 @@ namespace Aaru.Core.Devices.Dumping
continue; continue;
} }
WriteSubchannelToImage(supportedSubchannel, desiredSubchannel, cmdBuf, badSector, 5, subLog, isrcs, Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel, desiredSubchannel, cmdBuf, badSector, 5,
(byte)track.TrackSequence, ref mcn, tracks, subchannelExtents); subLog, isrcs, (byte)track.TrackSequence, ref mcn, tracks,
subchannelExtents, _fixSubchannelPosition, _outputPlugin,
_fixSubchannel, _fixSubchannelCrc, _dumpLog, UpdateStatus);
if(subchannelExtents.Contains(tmpArray[i])) if(subchannelExtents.Contains(tmpArray[i]))
continue; continue;

View File

@@ -160,9 +160,10 @@ namespace Aaru.Core.Devices.Dumping
_outputPlugin.WriteSectorsLong(data, i, _maximumReadable); _outputPlugin.WriteSectorsLong(data, i, _maximumReadable);
bool indexesChanged = WriteSubchannelToImage(supportedSubchannel, desiredSubchannel, sub, i, bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel,
_maximumReadable, subLog, isrcs, 0xAA, ref mcn, desiredSubchannel, sub, i, _maximumReadable, subLog, isrcs, 0xAA, ref mcn, tracks,
tracks, subchannelExtents); subchannelExtents, _fixSubchannelPosition, _outputPlugin, _fixSubchannel,
_fixSubchannelCrc, _dumpLog, UpdateStatus);
// Set tracks and go back // Set tracks and go back
if(indexesChanged) if(indexesChanged)
@@ -328,9 +329,10 @@ namespace Aaru.Core.Devices.Dumping
_outputPlugin.WriteSectorsLong(data, i, _maximumReadable); _outputPlugin.WriteSectorsLong(data, i, _maximumReadable);
bool indexesChanged = WriteSubchannelToImage(supportedSubchannel, desiredSubchannel, sub, i, bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel,
_maximumReadable, subLog, isrcs, 0xAA, ref mcn, desiredSubchannel, sub, i, _maximumReadable, subLog, isrcs, 0xAA, ref mcn, tracks,
tracks, subchannelExtents); subchannelExtents, _fixSubchannelPosition, _outputPlugin, _fixSubchannel,
_fixSubchannelCrc, _dumpLog, UpdateStatus);
// Set tracks and go back // Set tracks and go back
if(indexesChanged) if(indexesChanged)

File diff suppressed because it is too large Load Diff

View File

@@ -193,9 +193,10 @@ namespace Aaru.Core.Devices.Dumping
Array.Copy(cmdBuf, sectorSize, sub, 0, subSize); Array.Copy(cmdBuf, sectorSize, sub, 0, subSize);
_outputPlugin.WriteSectorLong(data, badSector); _outputPlugin.WriteSectorLong(data, badSector);
bool indexesChanged = WriteSubchannelToImage(supportedSubchannel, desiredSubchannel, sub, badSector, bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel,
1, subLog, isrcs, (byte)track.TrackSequence, ref mcn, desiredSubchannel, sub, badSector, 1, subLog, isrcs, (byte)track.TrackSequence, ref mcn,
tracks, subchannelExtents); tracks, subchannelExtents, _fixSubchannelPosition, _outputPlugin, _fixSubchannel,
_fixSubchannelCrc, _dumpLog, UpdateStatus);
// Set tracks and go back // Set tracks and go back
if(!indexesChanged) if(!indexesChanged)

File diff suppressed because it is too large Load Diff