mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Calculate offset on discs where an audio track follows a data track, and offset is less than one sector.
This commit is contained in:
@@ -6,6 +6,7 @@ using DiscImageChef.CommonTypes.Structs;
|
|||||||
using DiscImageChef.Core.Logging;
|
using DiscImageChef.Core.Logging;
|
||||||
using DiscImageChef.Core.Media.Detection;
|
using DiscImageChef.Core.Media.Detection;
|
||||||
using DiscImageChef.Database.Models;
|
using DiscImageChef.Database.Models;
|
||||||
|
using DiscImageChef.Decoders.CD;
|
||||||
using DiscImageChef.Devices;
|
using DiscImageChef.Devices;
|
||||||
using Device = DiscImageChef.Database.Models.Device;
|
using Device = DiscImageChef.Database.Models.Device;
|
||||||
|
|
||||||
@@ -220,6 +221,39 @@ namespace DiscImageChef.Core.Media.Info
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!offsetFound &&
|
||||||
|
audioTrack.TrackPregap > 0)
|
||||||
|
{
|
||||||
|
sense = dev.ReadCd(out byte[] dataBuf, out _, (uint)dataTrack.TrackEndSector,
|
||||||
|
sectorSize, 1, MmcSectorTypes.AllTypes, false, false, true,
|
||||||
|
MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None,
|
||||||
|
MmcSubchannel.None, dev.Timeout, out _);
|
||||||
|
|
||||||
|
if(!sense &&
|
||||||
|
!dev.Error)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < dataBuf.Length; i++)
|
||||||
|
dataBuf[i] ^= Sector.ScrambleTable[i];
|
||||||
|
|
||||||
|
for(int i = 0; i < 2352; i++)
|
||||||
|
{
|
||||||
|
byte[] dataSide = new byte[2352 - i];
|
||||||
|
byte[] audioSide = new byte[2352 - i];
|
||||||
|
|
||||||
|
Array.Copy(dataBuf, i, dataSide, 0, dataSide.Length);
|
||||||
|
Array.Copy(cmdBuf, 0, audioSide, 0, audioSide.Length);
|
||||||
|
|
||||||
|
if(!dataSide.SequenceEqual(audioSide))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
offsetBytes = audioSide.Length;
|
||||||
|
offsetFound = true;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user