mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Optimize repetitive code in dicformat.
This commit is contained in:
1
.idea/.idea.DiscImageChef/.idea/contentModel.xml
generated
1
.idea/.idea.DiscImageChef/.idea/contentModel.xml
generated
@@ -1,7 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ContentModelStore">
|
<component name="ContentModelStore">
|
||||||
<e p="$APPLICATION_CONFIG_DIR$/consoles/db" t="IncludeRecursive" />
|
|
||||||
<e p="$APPLICATION_CONFIG_DIR$/extensions" t="IncludeRecursive" />
|
<e p="$APPLICATION_CONFIG_DIR$/extensions" t="IncludeRecursive" />
|
||||||
<e p="$USER_HOME$/.Rider2018.3/system/extResources" t="IncludeRecursive" />
|
<e p="$USER_HOME$/.Rider2018.3/system/extResources" t="IncludeRecursive" />
|
||||||
<e p="$USER_HOME$/.Rider2018.3/system/resharper-host/local/Transient/ReSharperHost/v183/SolutionCaches/_DiscImageChef.-1491758497.00" t="ExcludeRecursive" />
|
<e p="$USER_HOME$/.Rider2018.3/system/resharper-host/local/Transient/ReSharperHost/v183/SolutionCaches/_DiscImageChef.-1491758497.00" t="ExcludeRecursive" />
|
||||||
|
|||||||
@@ -58,7 +58,8 @@ namespace DiscImageChef.DiscImages
|
|||||||
{
|
{
|
||||||
public bool Open(IFilter imageFilter)
|
public bool Open(IFilter imageFilter)
|
||||||
{
|
{
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
imageStream = imageFilter.GetDataForkStream();
|
imageStream = imageFilter.GetDataForkStream();
|
||||||
imageStream.Seek(0, SeekOrigin.Begin);
|
imageStream.Seek(0, SeekOrigin.Begin);
|
||||||
|
|
||||||
@@ -75,7 +76,8 @@ namespace DiscImageChef.DiscImages
|
|||||||
imageInfo.ApplicationVersion = $"{header.applicationMajorVersion}.{header.applicationMinorVersion}";
|
imageInfo.ApplicationVersion = $"{header.applicationMajorVersion}.{header.applicationMinorVersion}";
|
||||||
imageInfo.Version = $"{header.imageMajorVersion}.{header.imageMinorVersion}";
|
imageInfo.Version = $"{header.imageMajorVersion}.{header.imageMinorVersion}";
|
||||||
imageInfo.MediaType = header.mediaType;
|
imageInfo.MediaType = header.mediaType;
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
|
|
||||||
// Read the index header
|
// Read the index header
|
||||||
imageStream.Position = (long)header.indexOffset;
|
imageStream.Position = (long)header.indexOffset;
|
||||||
@@ -87,7 +89,8 @@ namespace DiscImageChef.DiscImages
|
|||||||
|
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Index at {0} contains {1} entries",
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Index at {0} contains {1} entries",
|
||||||
header.indexOffset, idxHeader.entries);
|
header.indexOffset, idxHeader.entries);
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
|
|
||||||
// Fill in-memory index
|
// Fill in-memory index
|
||||||
index = new List<IndexEntry>();
|
index = new List<IndexEntry>();
|
||||||
@@ -101,7 +104,9 @@ namespace DiscImageChef.DiscImages
|
|||||||
entry.dataType, entry.offset);
|
entry.dataType, entry.offset);
|
||||||
index.Add(entry);
|
index.Add(entry);
|
||||||
}
|
}
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
|
||||||
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
|
|
||||||
imageInfo.ImageSize = 0;
|
imageInfo.ImageSize = 0;
|
||||||
|
|
||||||
@@ -152,7 +157,8 @@ namespace DiscImageChef.DiscImages
|
|||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin",
|
DicConsole.DebugWriteLine("DiscImageChef format plugin",
|
||||||
"Found data block type {0} at position {1}", entry.dataType,
|
"Found data block type {0} at position {1}", entry.dataType,
|
||||||
entry.offset);
|
entry.offset);
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
|
|
||||||
// Decompress media tag
|
// Decompress media tag
|
||||||
if(blockHeader.compression == CompressionType.Lzma || blockHeader.compression ==
|
if(blockHeader.compression == CompressionType.Lzma || blockHeader.compression ==
|
||||||
@@ -186,13 +192,15 @@ namespace DiscImageChef.DiscImages
|
|||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin",
|
DicConsole.DebugWriteLine("DiscImageChef format plugin",
|
||||||
"Took {0} seconds to decompress block",
|
"Took {0} seconds to decompress block",
|
||||||
(endDecompress - startDecompress).TotalSeconds);
|
(endDecompress - startDecompress).TotalSeconds);
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
}
|
}
|
||||||
else if(blockHeader.compression == CompressionType.None)
|
else if(blockHeader.compression == CompressionType.None)
|
||||||
{
|
{
|
||||||
data = new byte[blockHeader.length];
|
data = new byte[blockHeader.length];
|
||||||
imageStream.Read(data, 0, (int)blockHeader.length);
|
imageStream.Read(data, 0, (int)blockHeader.length);
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -228,7 +236,8 @@ namespace DiscImageChef.DiscImages
|
|||||||
imageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSync);
|
imageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSync);
|
||||||
if(!imageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorHeader))
|
if(!imageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorHeader))
|
||||||
imageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorHeader);
|
imageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorHeader);
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
break;
|
break;
|
||||||
case DataType.CdSectorSuffix:
|
case DataType.CdSectorSuffix:
|
||||||
case DataType.CdSectorSuffixCorrected:
|
case DataType.CdSectorSuffixCorrected:
|
||||||
@@ -249,13 +258,15 @@ namespace DiscImageChef.DiscImages
|
|||||||
imageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorEccQ);
|
imageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorEccQ);
|
||||||
if(!imageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorEdc))
|
if(!imageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorEdc))
|
||||||
imageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorEdc);
|
imageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorEdc);
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
break;
|
break;
|
||||||
case DataType.CdSectorSubchannel:
|
case DataType.CdSectorSubchannel:
|
||||||
sectorSubchannel = data;
|
sectorSubchannel = data;
|
||||||
if(!imageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSubchannel))
|
if(!imageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSubchannel))
|
||||||
imageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSubchannel);
|
imageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSubchannel);
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
break;
|
break;
|
||||||
case DataType.AppleProfileTag:
|
case DataType.AppleProfileTag:
|
||||||
case DataType.AppleSonyTag:
|
case DataType.AppleSonyTag:
|
||||||
@@ -263,11 +274,13 @@ namespace DiscImageChef.DiscImages
|
|||||||
sectorSubchannel = data;
|
sectorSubchannel = data;
|
||||||
if(!imageInfo.ReadableSectorTags.Contains(SectorTagType.AppleSectorTag))
|
if(!imageInfo.ReadableSectorTags.Contains(SectorTagType.AppleSectorTag))
|
||||||
imageInfo.ReadableSectorTags.Add(SectorTagType.AppleSectorTag);
|
imageInfo.ReadableSectorTags.Add(SectorTagType.AppleSectorTag);
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
break;
|
break;
|
||||||
case DataType.CompactDiscMode2Subheader:
|
case DataType.CompactDiscMode2Subheader:
|
||||||
mode2Subheaders = data;
|
mode2Subheaders = data;
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
MediaTagType mediaTagType = GetMediaTagTypeForDataType(blockHeader.type);
|
MediaTagType mediaTagType = GetMediaTagTypeForDataType(blockHeader.type);
|
||||||
@@ -282,25 +295,26 @@ namespace DiscImageChef.DiscImages
|
|||||||
}
|
}
|
||||||
|
|
||||||
mediaTags.Add(mediaTagType, data);
|
mediaTags.Add(mediaTagType, data);
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case BlockType.DeDuplicationTable:
|
case BlockType.DeDuplicationTable:
|
||||||
// Only user data deduplication tables are used right now
|
structureBytes = new byte[Marshal.SizeOf<DdtHeader>()];
|
||||||
|
imageStream.Read(structureBytes, 0, structureBytes.Length);
|
||||||
|
DdtHeader ddtHeader = Marshal.SpanToStructureLittleEndian<DdtHeader>(structureBytes);
|
||||||
|
imageInfo.ImageSize += ddtHeader.cmpLength;
|
||||||
|
|
||||||
|
if(ddtHeader.identifier != BlockType.DeDuplicationTable) break;
|
||||||
|
|
||||||
if(entry.dataType == DataType.UserData)
|
if(entry.dataType == DataType.UserData)
|
||||||
{
|
{
|
||||||
structureBytes = new byte[Marshal.SizeOf<DdtHeader>()];
|
|
||||||
imageStream.Read(structureBytes, 0, structureBytes.Length);
|
|
||||||
DdtHeader ddtHeader = Marshal.SpanToStructureLittleEndian<DdtHeader>(structureBytes);
|
|
||||||
imageInfo.ImageSize += ddtHeader.cmpLength;
|
|
||||||
|
|
||||||
if(ddtHeader.identifier != BlockType.DeDuplicationTable) break;
|
|
||||||
|
|
||||||
imageInfo.Sectors = ddtHeader.entries;
|
imageInfo.Sectors = ddtHeader.entries;
|
||||||
shift = ddtHeader.shift;
|
shift = ddtHeader.shift;
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
|
|
||||||
// Check for DDT compression
|
// Check for DDT compression
|
||||||
switch(ddtHeader.compression)
|
switch(ddtHeader.compression)
|
||||||
@@ -324,12 +338,14 @@ namespace DiscImageChef.DiscImages
|
|||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin",
|
DicConsole.DebugWriteLine("DiscImageChef format plugin",
|
||||||
"Took {0} seconds to decompress DDT",
|
"Took {0} seconds to decompress DDT",
|
||||||
(ddtEnd - ddtStart).TotalSeconds);
|
(ddtEnd - ddtStart).TotalSeconds);
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin",
|
||||||
|
"Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
||||||
break;
|
break;
|
||||||
case CompressionType.None:
|
case CompressionType.None:
|
||||||
inMemoryDdt = false;
|
inMemoryDdt = false;
|
||||||
outMemoryDdtPosition = (long)entry.offset;
|
outMemoryDdtPosition = (long)entry.offset;
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin",
|
||||||
|
"Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new
|
throw new
|
||||||
@@ -341,16 +357,10 @@ namespace DiscImageChef.DiscImages
|
|||||||
else if(entry.dataType == DataType.CdSectorPrefixCorrected ||
|
else if(entry.dataType == DataType.CdSectorPrefixCorrected ||
|
||||||
entry.dataType == DataType.CdSectorSuffixCorrected)
|
entry.dataType == DataType.CdSectorSuffixCorrected)
|
||||||
{
|
{
|
||||||
structureBytes = new byte[Marshal.SizeOf<DdtHeader>()];
|
|
||||||
imageStream.Read(structureBytes, 0, structureBytes.Length);
|
|
||||||
DdtHeader ddtHeader = Marshal.SpanToStructureLittleEndian<DdtHeader>(structureBytes);
|
|
||||||
imageInfo.ImageSize += ddtHeader.cmpLength;
|
|
||||||
|
|
||||||
if(ddtHeader.identifier != BlockType.DeDuplicationTable) break;
|
|
||||||
|
|
||||||
uint[] cdDdt = new uint[ddtHeader.entries];
|
uint[] cdDdt = new uint[ddtHeader.entries];
|
||||||
byte[] decompressedDdt = new byte[ddtHeader.length];
|
byte[] decompressedDdt = new byte[ddtHeader.length];
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
|
|
||||||
// Check for DDT compression
|
// Check for DDT compression
|
||||||
switch(ddtHeader.compression)
|
switch(ddtHeader.compression)
|
||||||
@@ -371,11 +381,13 @@ namespace DiscImageChef.DiscImages
|
|||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin",
|
DicConsole.DebugWriteLine("DiscImageChef format plugin",
|
||||||
"Took {0} seconds to decompress DDT",
|
"Took {0} seconds to decompress DDT",
|
||||||
(ddtEnd - ddtStart).TotalSeconds);
|
(ddtEnd - ddtStart).TotalSeconds);
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin",
|
||||||
|
"Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
||||||
break;
|
break;
|
||||||
case CompressionType.None:
|
case CompressionType.None:
|
||||||
imageStream.Read(decompressedDdt, 0, decompressedDdt.Length);
|
imageStream.Read(decompressedDdt, 0, decompressedDdt.Length);
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin",
|
||||||
|
"Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new
|
throw new
|
||||||
@@ -386,7 +398,8 @@ namespace DiscImageChef.DiscImages
|
|||||||
|
|
||||||
if(entry.dataType == DataType.CdSectorPrefixCorrected) sectorPrefixDdt = cdDdt;
|
if(entry.dataType == DataType.CdSectorPrefixCorrected) sectorPrefixDdt = cdDdt;
|
||||||
else if(entry.dataType == DataType.CdSectorSuffixCorrected) sectorSuffixDdt = cdDdt;
|
else if(entry.dataType == DataType.CdSectorSuffixCorrected) sectorSuffixDdt = cdDdt;
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -404,7 +417,8 @@ namespace DiscImageChef.DiscImages
|
|||||||
imageInfo.Cylinders = geometryBlock.cylinders;
|
imageInfo.Cylinders = geometryBlock.cylinders;
|
||||||
imageInfo.Heads = geometryBlock.heads;
|
imageInfo.Heads = geometryBlock.heads;
|
||||||
imageInfo.SectorsPerTrack = geometryBlock.sectorsPerTrack;
|
imageInfo.SectorsPerTrack = geometryBlock.sectorsPerTrack;
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -575,7 +589,8 @@ namespace DiscImageChef.DiscImages
|
|||||||
imageInfo.DriveFirmwareRevision);
|
imageInfo.DriveFirmwareRevision);
|
||||||
}
|
}
|
||||||
|
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
break;
|
break;
|
||||||
// Optical disc tracks block
|
// Optical disc tracks block
|
||||||
case BlockType.TracksBlock:
|
case BlockType.TracksBlock:
|
||||||
@@ -636,7 +651,8 @@ namespace DiscImageChef.DiscImages
|
|||||||
|
|
||||||
imageInfo.HasPartitions = true;
|
imageInfo.HasPartitions = true;
|
||||||
imageInfo.HasSessions = true;
|
imageInfo.HasSessions = true;
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
break;
|
break;
|
||||||
// CICM XML metadata block
|
// CICM XML metadata block
|
||||||
case BlockType.CicmBlock:
|
case BlockType.CicmBlock:
|
||||||
@@ -648,7 +664,8 @@ namespace DiscImageChef.DiscImages
|
|||||||
|
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin",
|
DicConsole.DebugWriteLine("DiscImageChef format plugin",
|
||||||
"Found CICM XML metadata block at position {0}", entry.offset);
|
"Found CICM XML metadata block at position {0}", entry.offset);
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
|
|
||||||
byte[] cicmBytes = new byte[cicmBlock.length];
|
byte[] cicmBytes = new byte[cicmBlock.length];
|
||||||
imageStream.Read(cicmBytes, 0, cicmBytes.Length);
|
imageStream.Read(cicmBytes, 0, cicmBytes.Length);
|
||||||
@@ -667,7 +684,8 @@ namespace DiscImageChef.DiscImages
|
|||||||
CicmMetadata = null;
|
CicmMetadata = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
break;
|
break;
|
||||||
// Dump hardware block
|
// Dump hardware block
|
||||||
case BlockType.DumpHardwareBlock:
|
case BlockType.DumpHardwareBlock:
|
||||||
@@ -679,7 +697,8 @@ namespace DiscImageChef.DiscImages
|
|||||||
|
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin",
|
DicConsole.DebugWriteLine("DiscImageChef format plugin",
|
||||||
"Found dump hardware block at position {0}", entry.offset);
|
"Found dump hardware block at position {0}", entry.offset);
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
|
|
||||||
structureBytes = new byte[dumpBlock.length];
|
structureBytes = new byte[dumpBlock.length];
|
||||||
imageStream.Read(structureBytes, 0, structureBytes.Length);
|
imageStream.Read(structureBytes, 0, structureBytes.Length);
|
||||||
@@ -789,7 +808,8 @@ namespace DiscImageChef.DiscImages
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(DumpHardware.Count == 0) DumpHardware = null;
|
if(DumpHardware.Count == 0) DumpHardware = null;
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -802,6 +822,8 @@ namespace DiscImageChef.DiscImages
|
|||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Image last written on {0}",
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Image last written on {0}",
|
||||||
imageInfo.LastModificationTime);
|
imageInfo.LastModificationTime);
|
||||||
|
|
||||||
|
imageInfo.XmlMediaType = GetXmlMediaType(header.mediaType);
|
||||||
|
|
||||||
if(geometryBlock.identifier != BlockType.GeometryBlock && imageInfo.XmlMediaType == XmlMediaType.BlockMedia)
|
if(geometryBlock.identifier != BlockType.GeometryBlock && imageInfo.XmlMediaType == XmlMediaType.BlockMedia)
|
||||||
{
|
{
|
||||||
imageInfo.Cylinders = (uint)(imageInfo.Sectors / 16 / 63);
|
imageInfo.Cylinders = (uint)(imageInfo.Sectors / 16 / 63);
|
||||||
@@ -809,21 +831,23 @@ namespace DiscImageChef.DiscImages
|
|||||||
imageInfo.SectorsPerTrack = 63;
|
imageInfo.SectorsPerTrack = 63;
|
||||||
}
|
}
|
||||||
|
|
||||||
imageInfo.XmlMediaType = GetXmlMediaType(header.mediaType);
|
|
||||||
imageInfo.ReadableMediaTags.AddRange(mediaTags.Keys);
|
imageInfo.ReadableMediaTags.AddRange(mediaTags.Keys);
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
|
|
||||||
// Initialize caches
|
// Initialize caches
|
||||||
blockCache = new Dictionary<ulong, byte[]>();
|
blockCache = new Dictionary<ulong, byte[]>();
|
||||||
blockHeaderCache = new Dictionary<ulong, BlockHeader>();
|
blockHeaderCache = new Dictionary<ulong, BlockHeader>();
|
||||||
currentCacheSize = 0;
|
currentCacheSize = 0;
|
||||||
if(!inMemoryDdt) ddtEntryCache = new Dictionary<ulong, ulong>();
|
if(!inMemoryDdt) ddtEntryCache = new Dictionary<ulong, ulong>();
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
|
|
||||||
// Initialize tracks, sessions and partitions
|
// Initialize tracks, sessions and partitions
|
||||||
if(imageInfo.XmlMediaType == XmlMediaType.OpticalDisc)
|
if(imageInfo.XmlMediaType == XmlMediaType.OpticalDisc)
|
||||||
{
|
{
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
if(Tracks == null || Tracks.Count == 0)
|
if(Tracks == null || Tracks.Count == 0)
|
||||||
{
|
{
|
||||||
Tracks = new List<Track>
|
Tracks = new List<Track>
|
||||||
@@ -846,7 +870,9 @@ namespace DiscImageChef.DiscImages
|
|||||||
trackFlags = new Dictionary<byte, byte> {{1, (byte)CdFlags.DataTrack}};
|
trackFlags = new Dictionary<byte, byte> {{1, (byte)CdFlags.DataTrack}};
|
||||||
trackIsrcs = new Dictionary<byte, string>();
|
trackIsrcs = new Dictionary<byte, string>();
|
||||||
}
|
}
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
|
||||||
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
|
|
||||||
Sessions = new List<Session>();
|
Sessions = new List<Session>();
|
||||||
for(int i = 1; i <= Tracks.Max(t => t.TrackSession); i++)
|
for(int i = 1; i <= Tracks.Max(t => t.TrackSession); i++)
|
||||||
@@ -859,7 +885,8 @@ namespace DiscImageChef.DiscImages
|
|||||||
Tracks.Where(t => t.TrackSession == i).Min(t => t.TrackStartSector),
|
Tracks.Where(t => t.TrackSession == i).Min(t => t.TrackStartSector),
|
||||||
EndSector = Tracks.Where(t => t.TrackSession == i).Max(t => t.TrackEndSector)
|
EndSector = Tracks.Where(t => t.TrackSession == i).Max(t => t.TrackEndSector)
|
||||||
});
|
});
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
|
|
||||||
ulong currentTrackOffset = 0;
|
ulong currentTrackOffset = 0;
|
||||||
Partitions = new List<Partition>();
|
Partitions = new List<Partition>();
|
||||||
@@ -880,7 +907,9 @@ namespace DiscImageChef.DiscImages
|
|||||||
currentTrackOffset += (track.TrackEndSector - track.TrackStartSector + 1) *
|
currentTrackOffset += (track.TrackEndSector - track.TrackStartSector + 1) *
|
||||||
(ulong)track.TrackBytesPerSector;
|
(ulong)track.TrackBytesPerSector;
|
||||||
}
|
}
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
|
||||||
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
|
|
||||||
Track[] tracks = Tracks.ToArray();
|
Track[] tracks = Tracks.ToArray();
|
||||||
for(int i = 0; i < tracks.Length; i++)
|
for(int i = 0; i < tracks.Length; i++)
|
||||||
@@ -899,10 +928,13 @@ namespace DiscImageChef.DiscImages
|
|||||||
tracks[i].TrackSubchannelFilter = tracks[i].TrackFilter;
|
tracks[i].TrackSubchannelFilter = tracks[i].TrackFilter;
|
||||||
tracks[i].TrackSubchannelType = TrackSubchannelType.Raw;
|
tracks[i].TrackSubchannelType = TrackSubchannelType.Raw;
|
||||||
}
|
}
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
|
||||||
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
|
|
||||||
Tracks = tracks.ToList();
|
Tracks = tracks.ToList();
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -915,7 +947,8 @@ namespace DiscImageChef.DiscImages
|
|||||||
|
|
||||||
if(sectorSuffixDdt != null) EccInit();
|
if(sectorSuffixDdt != null) EccInit();
|
||||||
|
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -958,13 +991,15 @@ namespace DiscImageChef.DiscImages
|
|||||||
blockHeader = Marshal.SpanToStructureLittleEndian<BlockHeader>(structureBytes);
|
blockHeader = Marshal.SpanToStructureLittleEndian<BlockHeader>(structureBytes);
|
||||||
|
|
||||||
// Decompress block
|
// Decompress block
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
switch(blockHeader.compression)
|
switch(blockHeader.compression)
|
||||||
{
|
{
|
||||||
case CompressionType.None:
|
case CompressionType.None:
|
||||||
block = new byte[blockHeader.length];
|
block = new byte[blockHeader.length];
|
||||||
imageStream.Read(block, 0, (int)blockHeader.length);
|
imageStream.Read(block, 0, (int)blockHeader.length);
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
break;
|
break;
|
||||||
case CompressionType.Lzma:
|
case CompressionType.Lzma:
|
||||||
byte[] compressedBlock = new byte[blockHeader.cmpLength - LZMA_PROPERTIES_LENGTH];
|
byte[] compressedBlock = new byte[blockHeader.cmpLength - LZMA_PROPERTIES_LENGTH];
|
||||||
@@ -977,7 +1012,8 @@ namespace DiscImageChef.DiscImages
|
|||||||
lzmaBlock.Read(block, 0, (int)blockHeader.length);
|
lzmaBlock.Read(block, 0, (int)blockHeader.length);
|
||||||
lzmaBlock.Close();
|
lzmaBlock.Close();
|
||||||
compressedBlockMs.Close();
|
compressedBlockMs.Close();
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
break;
|
break;
|
||||||
case CompressionType.Flac:
|
case CompressionType.Flac:
|
||||||
byte[] flacBlock = new byte[blockHeader.cmpLength];
|
byte[] flacBlock = new byte[blockHeader.cmpLength];
|
||||||
@@ -990,7 +1026,8 @@ namespace DiscImageChef.DiscImages
|
|||||||
flakeReader.Read(audioBuffer, samples);
|
flakeReader.Read(audioBuffer, samples);
|
||||||
flakeReader.Close();
|
flakeReader.Close();
|
||||||
flacMs.Close();
|
flacMs.Close();
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new
|
throw new
|
||||||
@@ -1012,7 +1049,8 @@ namespace DiscImageChef.DiscImages
|
|||||||
|
|
||||||
sector = new byte[blockHeader.sectorSize];
|
sector = new byte[blockHeader.sectorSize];
|
||||||
Array.Copy(block, (long)(offset * blockHeader.sectorSize), sector, 0, blockHeader.sectorSize);
|
Array.Copy(block, (long)(offset * blockHeader.sectorSize), sector, 0, blockHeader.sectorSize);
|
||||||
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
|
DicConsole.DebugWriteLine("DiscImageChef format plugin", "Memory snapshot: {0} bytes",
|
||||||
|
GC.GetTotalMemory(false));
|
||||||
return sector;
|
return sector;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user