Fix reading MODE 2 sectors in all CD images.

This commit is contained in:
2020-01-11 22:44:25 +00:00
parent 8400308a98
commit 736323098e
11 changed files with 2341 additions and 1249 deletions

View File

@@ -43,7 +43,9 @@ using DiscImageChef.CommonTypes.Interfaces;
using DiscImageChef.CommonTypes.Structs;
using DiscImageChef.CommonTypes.Structs.Devices.ATA;
using DiscImageChef.Console;
using DiscImageChef.Decoders.CD;
using DiscImageChef.Helpers;
using Session = DiscImageChef.CommonTypes.Structs.Session;
namespace DiscImageChef.DiscImages
{
@@ -1198,11 +1200,11 @@ namespace DiscImageChef.DiscImages
return sector;
uint sectorOffset;
bool mode2 = false;
switch(track.TrackType)
{
case TrackType.CdMode1:
case TrackType.CdMode2Form1:
{
if(track.TrackRawBytesPerSector == 2352)
{
@@ -1217,13 +1219,30 @@ namespace DiscImageChef.DiscImages
break;
}
case TrackType.CdMode2Form1:
{
if(track.TrackRawBytesPerSector == 2352)
{
sectorOffset = 0;
sectorSize = 2352;
mode2 = true;
}
else
{
sectorOffset = 0;
sectorSize = 2048;
}
break;
}
case TrackType.CdMode2Form2:
{
if(track.TrackRawBytesPerSector == 2352)
{
sectorOffset = 16;
sectorSize = 2324;
sectorOffset = 0;
sectorSize = 2352;
mode2 = true;
}
else
{
@@ -1236,16 +1255,9 @@ namespace DiscImageChef.DiscImages
case TrackType.CdMode2Formless:
{
if(track.TrackRawBytesPerSector == 2352)
{
sectorOffset = 16;
sectorSize = 2336;
}
else
{
sectorOffset = 0;
sectorSize = 2336;
}
sectorOffset = 0;
sectorSize = (uint)track.TrackRawBytesPerSector;
mode2 = true;
break;
}
@@ -1263,7 +1275,9 @@ namespace DiscImageChef.DiscImages
byte[] buffer = new byte[sectorSize];
if(track.TrackType == TrackType.Audio && swapAudio)
if(mode2)
buffer = Sector.GetUserDataFromMode2(sector);
else if(track.TrackType == TrackType.Audio && swapAudio)
for(int i = 0; i < 2352; i += 2)
{
buffer[i + 1] = sector[i];