mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Fix reading MODE 2 sectors in all CD images, when they interleave subchannel data. Fixes #229.
This commit is contained in:
3
.idea/.idea.DiscImageChef/.idea/contentModel.xml
generated
3
.idea/.idea.DiscImageChef/.idea/contentModel.xml
generated
@@ -3,14 +3,13 @@
|
||||
<component name="ContentModelStore">
|
||||
<e p="$APPLICATION_CONFIG_DIR$/consoles/db" t="IncludeRecursive" />
|
||||
<e p="$APPLICATION_PLUGINS_DIR$/puppet/lib/stubs" t="IncludeRecursive" />
|
||||
<e p="$APPLICATION_CONFIG_DIR$/scratches" t="IncludeRecursive" />
|
||||
<e p="$USER_HOME$/.Rider2019.3/system/extResources" t="IncludeRecursive" />
|
||||
<e p="$USER_HOME$/.Rider2019.3/system/resharper-host/local/Transient/ReSharperHost/v193/SolutionCaches/_DiscImageChef.-1491758497.00" t="ExcludeRecursive" />
|
||||
<e p="$USER_HOME$/.config/git/ignore" t="IncludeRecursive" />
|
||||
<e p="$USER_HOME$/.nuget/packages/sqlitepclraw.lib.e_sqlite3.linux/1.1.12/runtimes/linux-x64/native/libe_sqlite3.so" t="Include" />
|
||||
<e p="$PROJECT_DIR$" t="IncludeFlat">
|
||||
<e p=".git/info/exclude" t="IncludeRecursive" />
|
||||
<e p=".git/modules/CICMMetadata/info/exclude" t="IncludeRecursive" />
|
||||
<e p=".git/modules/DiscImageChef.Checksums/info/exclude" t="IncludeRecursive" />
|
||||
<e p=".git/modules/DiscImageChef.CommonTypes/info/exclude" t="IncludeRecursive" />
|
||||
<e p=".git/modules/DiscImageChef.Console/info/exclude" t="IncludeRecursive" />
|
||||
<e p=".git/modules/DiscImageChef.Decoders/info/exclude" t="IncludeRecursive" />
|
||||
|
||||
1
.idea/.idea.DiscImageChef/.idea/vcs.xml
generated
1
.idea/.idea.DiscImageChef/.idea/vcs.xml
generated
@@ -8,6 +8,7 @@
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/CICMMetadata" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/DiscImageChef.Checksums" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/DiscImageChef.CommonTypes" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/DiscImageChef.Console" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/DiscImageChef.Decoders" vcs="Git" />
|
||||
|
||||
@@ -808,6 +808,10 @@ namespace DiscImageChef.DiscImages
|
||||
}
|
||||
|
||||
case AlcoholTrackMode.Mode2:
|
||||
case AlcoholTrackMode.Mode2F1:
|
||||
case AlcoholTrackMode.Mode2F1Alt:
|
||||
case AlcoholTrackMode.Mode2F2:
|
||||
case AlcoholTrackMode.Mode2F2Alt:
|
||||
{
|
||||
mode2 = true;
|
||||
sectorOffset = 0;
|
||||
@@ -817,26 +821,6 @@ namespace DiscImageChef.DiscImages
|
||||
break;
|
||||
}
|
||||
|
||||
case AlcoholTrackMode.Mode2F1:
|
||||
case AlcoholTrackMode.Mode2F1Alt:
|
||||
{
|
||||
sectorOffset = 24;
|
||||
sectorSize = 2048;
|
||||
sectorSkip = 280;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case AlcoholTrackMode.Mode2F2:
|
||||
case AlcoholTrackMode.Mode2F2Alt:
|
||||
{
|
||||
sectorOffset = 24;
|
||||
sectorSize = 2324;
|
||||
sectorSkip = 4;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case AlcoholTrackMode.Audio:
|
||||
{
|
||||
sectorOffset = 0;
|
||||
@@ -884,12 +868,12 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
var mode2Ms = new MemoryStream((int)(sectorSize * length));
|
||||
|
||||
buffer = br.ReadBytes((int)(sectorSize * length));
|
||||
buffer = br.ReadBytes((int)((sectorSize + sectorSkip) * length));
|
||||
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector = new byte[sectorSize];
|
||||
Array.Copy(buffer, sectorSize * i, sector, 0, sectorSize);
|
||||
Array.Copy(buffer, (sectorSize + sectorSkip) * i, sector, 0, sectorSize);
|
||||
sector = Sector.GetUserDataFromMode2(sector);
|
||||
mode2Ms.Write(sector, 0, sector.Length);
|
||||
}
|
||||
|
||||
@@ -1348,12 +1348,12 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
var mode2Ms = new MemoryStream((int)(sectorSize * length));
|
||||
|
||||
buffer = br.ReadBytes((int)(sectorSize * length));
|
||||
buffer = br.ReadBytes((int)((sectorSize + sectorSkip) * length));
|
||||
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector = new byte[sectorSize];
|
||||
Array.Copy(buffer, sectorSize * i, sector, 0, sectorSize);
|
||||
Array.Copy(buffer, (sectorSize + sectorSkip) * i, sector, 0, sectorSize);
|
||||
sector = Sector.GetUserDataFromMode2(sector);
|
||||
mode2Ms.Write(sector, 0, sector.Length);
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -304,8 +304,7 @@ namespace DiscImageChef.DiscImages
|
||||
track.TrackSubchannelOffset = currentOffset;
|
||||
track.TrackSubchannelType = TrackSubchannelType.Q16Interleaved;
|
||||
|
||||
currentOffset +=
|
||||
trackLen * (ulong)(track.TrackRawBytesPerSector + 16);
|
||||
currentOffset += trackLen * (ulong)(track.TrackRawBytesPerSector + 16);
|
||||
|
||||
break;
|
||||
case 4:
|
||||
@@ -317,8 +316,7 @@ namespace DiscImageChef.DiscImages
|
||||
track.TrackSubchannelOffset = currentOffset;
|
||||
track.TrackSubchannelType = TrackSubchannelType.RawInterleaved;
|
||||
|
||||
currentOffset +=
|
||||
trackLen * (ulong)(track.TrackRawBytesPerSector + 96);
|
||||
currentOffset += trackLen * (ulong)(track.TrackRawBytesPerSector + 96);
|
||||
|
||||
break;
|
||||
default: throw new ImageNotSupportedException($"Unknown read mode {readMode}");
|
||||
@@ -383,8 +381,7 @@ namespace DiscImageChef.DiscImages
|
||||
track.TrackSubchannelOffset = currentOffset;
|
||||
track.TrackSubchannelType = TrackSubchannelType.Q16Interleaved;
|
||||
|
||||
currentOffset +=
|
||||
trackLen * (ulong)(track.TrackRawBytesPerSector + 16);
|
||||
currentOffset += trackLen * (ulong)(track.TrackRawBytesPerSector + 16);
|
||||
|
||||
if(!imageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSync))
|
||||
imageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSync);
|
||||
@@ -416,8 +413,7 @@ namespace DiscImageChef.DiscImages
|
||||
track.TrackSubchannelOffset = currentOffset;
|
||||
track.TrackSubchannelType = TrackSubchannelType.RawInterleaved;
|
||||
|
||||
currentOffset +=
|
||||
trackLen * (ulong)(track.TrackRawBytesPerSector + 96);
|
||||
currentOffset += trackLen * (ulong)(track.TrackRawBytesPerSector + 96);
|
||||
|
||||
if(!imageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSync))
|
||||
imageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSync);
|
||||
@@ -488,8 +484,7 @@ namespace DiscImageChef.DiscImages
|
||||
track.TrackSubchannelOffset = currentOffset;
|
||||
track.TrackSubchannelType = TrackSubchannelType.Q16Interleaved;
|
||||
|
||||
currentOffset +=
|
||||
trackLen * (ulong)(track.TrackRawBytesPerSector + 16);
|
||||
currentOffset += trackLen * (ulong)(track.TrackRawBytesPerSector + 16);
|
||||
|
||||
if(!imageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSync))
|
||||
imageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSync);
|
||||
@@ -509,8 +504,7 @@ namespace DiscImageChef.DiscImages
|
||||
track.TrackSubchannelOffset = currentOffset;
|
||||
track.TrackSubchannelType = TrackSubchannelType.RawInterleaved;
|
||||
|
||||
currentOffset +=
|
||||
trackLen * (ulong)(track.TrackRawBytesPerSector + 96);
|
||||
currentOffset += trackLen * (ulong)(track.TrackRawBytesPerSector + 96);
|
||||
|
||||
if(!imageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSync))
|
||||
imageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSync);
|
||||
@@ -821,14 +815,14 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
if(mode2)
|
||||
{
|
||||
var mode2Ms = new MemoryStream((int)(sectorSize * length));
|
||||
var mode2Ms = new MemoryStream((int)((sectorSize + sectorSkip) * length));
|
||||
|
||||
imageStream.Read(buffer, 0, buffer.Length);
|
||||
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector = new byte[sectorSize];
|
||||
Array.Copy(buffer, sectorSize * i, sector, 0, sectorSize);
|
||||
Array.Copy(buffer, (sectorSize + sectorSkip) * i, sector, 0, sectorSize);
|
||||
sector = Sector.GetUserDataFromMode2(sector);
|
||||
mode2Ms.Write(sector, 0, sector.Length);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user