Merge remote-tracking branch 'upstream/master' into redumpGDROM

This commit is contained in:
Rebecca Wallander
2020-04-15 16:23:58 +02:00
2 changed files with 46 additions and 11 deletions

View File

@@ -56,14 +56,15 @@ namespace Aaru.DiscImages
ulong previousStartSector = 0;
ulong gdRomSession2Offset = 45000;
string previousTrackFile = "";
foreach(CdrWinTrack cdrTrack in _discImage.Tracks)
{
var aaruTrack = new Track
{
Indexes = cdrTrack.Indexes, TrackDescription = cdrTrack.Title,
TrackStartSector = previousStartSector, TrackPregap = cdrTrack.Pregap,
TrackSession = cdrTrack.Session, TrackSequence = cdrTrack.Sequence,
TrackPregap = cdrTrack.Pregap,
TrackSession = cdrTrack.Session, TrackSequence = cdrTrack.Sequence,
TrackType = CdrWinTrackTypeToTrackType(cdrTrack.TrackType),
TrackFile = cdrTrack.TrackFile.DataFilter.GetFilename(),
TrackFilter = cdrTrack.TrackFile.DataFilter,
@@ -71,18 +72,27 @@ namespace Aaru.DiscImages
TrackFileType = cdrTrack.TrackFile.FileType, TrackRawBytesPerSector = cdrTrack.Bps,
TrackBytesPerSector = CdrWinTrackTypeToCookedBytesPerSector(cdrTrack.TrackType)
};
if (previousTrackFile == aaruTrack.TrackFile || previousTrackFile == "")
{
if(!cdrTrack.Indexes.TryGetValue(0, out aaruTrack.TrackStartSector))
if(!cdrTrack.Indexes.TryGetValue(1, out aaruTrack.TrackStartSector))
aaruTrack.TrackStartSector += previousStartSector;
}
else
aaruTrack.TrackStartSector += previousStartSector;
if(_discImage.IsRedumpGigadisc &&
cdrTrack.Session == 2 &&
cdrTrack.Session == 2 &&
previousStartSector < gdRomSession2Offset)
{
aaruTrack.TrackStartSector = gdRomSession2Offset;
}
previousTrackFile = cdrTrack.TrackFile.DataFilter.GetFilename();
aaruTrack.TrackEndSector = (aaruTrack.TrackStartSector + cdrTrack.Sectors) - 1;
/*if(!cdrTrack.Indexes.TryGetValue(0, out aaruTrack.TrackStartSector))
cdrTrack.Indexes.TryGetValue(1, out aaruTrack.TrackStartSector);*/
if(cdrTrack.TrackType == CDRWIN_TRACK_TYPE_CDG)
{
aaruTrack.TrackSubchannelFilter = cdrTrack.TrackFile.DataFilter;

View File

@@ -125,6 +125,8 @@ namespace Aaru.DiscImages
int trackCount = 0;
Dictionary<byte, ulong> leadouts = new Dictionary<byte, ulong>();
while(_cueStream.Peek() >= 0)
{
lineNumber++;
@@ -348,8 +350,6 @@ namespace Aaru.DiscImages
{
AaruConsole.DebugWriteLine("CDRWin plugin", "Found REM SESSION at line {0}", lineNumber);
currentSession = byte.Parse(matchSession.Groups[1].Value);
// What happens between sessions
}
else if(matchRedumpSdArea.Success)
_discImage.IsRedumpGigadisc = true;
@@ -363,6 +363,7 @@ namespace Aaru.DiscImages
else if(matchLeadOut.Success)
{
AaruConsole.DebugWriteLine("CDRWin plugin", "Found REM LEAD-OUT at line {0}", lineNumber);
leadouts[currentSession] = CdrWinMsfToLba(matchLeadOut.Groups[1].Value);
}
else if(matchApplication.Success)
{
@@ -798,14 +799,14 @@ namespace Aaru.DiscImages
ulong sessionSectors = 0;
int lastSessionTrack = 0;
int firstSessionTrack = 0;
int firstSessionTra = 0;
for(int i = 0; i < cueTracks.Length; i++)
if(cueTracks[i].Session == s)
{
if(!firstTrackRead)
{
firstSessionTrack = i;
firstSessionTra = i;
firstTrackRead = true;
}
sessionSectors += cueTracks[i].Sectors;
@@ -814,9 +815,33 @@ namespace Aaru.DiscImages
lastSessionTrack = i;
}
sessions[s - 1].StartTrack = cueTracks[firstSessionTrack].Sequence;
sessions[s - 1].StartTrack = cueTracks[firstSessionTra].Sequence;
sessions[s - 1].EndTrack = cueTracks[lastSessionTrack].Sequence;
sessions[s - 1].EndSector = (sessions[s-1].StartSector + sessionSectors) - 1;
if(leadouts.TryGetValue((byte)s, out ulong leadout))
{
sessions[s - 1].EndSector = leadout - 1;
if(!cueTracks[lastSessionTrack].Indexes.TryGetValue(0, out ulong startSector))
cueTracks[lastSessionTrack].Indexes.TryGetValue(1, out startSector);
cueTracks[lastSessionTrack].Sectors = leadout - startSector;
}
else
sessions[s - 1].EndSector = sessionSectors - 1;
CdrWinTrack firstSessionTrack = cueTracks.OrderBy(t => t.Sequence).First(t => t.Session == s);
if(firstSessionTrack.Indexes.TryGetValue(0, out sessions[s - 1].StartSector))
continue;
if(firstSessionTrack.Indexes.TryGetValue(1, out sessions[s - 1].StartSector))
continue;
if(s > 1)
sessions[s - 1].StartSector = sessions[s - 2].EndSector + 1;
else
sessions[s - 1].StartSector = 0;
}
for(int s = 1; s <= sessions.Length; s++)