Files
cuetools.net/CUETools/tmp.cs
2008-10-13 19:25:11 +00:00

80 lines
2.7 KiB
C#

uint bestTracksMatch = 0;
int bestWorstConfidence = 0;
int bestOffset = 0;
int bestDisk = -1;
for (int di = 0; di < (int)accDisks.Count; di++)
{
for (int offset = -_arOffsetRange; offset <= _arOffsetRange; offset++)
{
uint tracksMatch = 0;
int worstConfidence = -1;
for (int iTrack = 0; iTrack < TrackCount; iTrack++)
if (_tracks[iTrack].OffsetedCRC[_arOffsetRange - offset] == accDisks[di].tracks[iTrack].CRC)
{
tracksMatch++;
//confidence += accDisks[di].tracks[iTrack].count;
if (accDisks[di].tracks[iTrack].CRC != 0)
if (worstConfidence == -1 || worstConfidence > accDisks[di].tracks[iTrack].count)
worstConfidence = (int) accDisks[di].tracks[iTrack].count;
//if (_config.fixWhenConfidence)
//tracksMatchWithConfidence++;
}
if (tracksMatch > bestTracksMatch
|| (tracksMatch == bestTracksMatch && worstConfidence > bestWorstConfidence)
|| (tracksMatch == bestTracksMatch && worstConfidence == bestWorstConfidence && Math.Abs(offset) < Math.Abs(bestOffset))
)
{
bestTracksMatch = tracksMatch;
bestWorstConfidence = worstConfidence;
bestOffset = offset;
bestDisk = di;
}
}
}
if (bestWorstConfidence > _config.fixWhenConfidence &&
(bestTracksMatch == TrackCount ||
(TrackCount > 2 && bestTracksMatch * 100 > TrackCount * _config.fixWhenPercent)))
_writeOffset = bestOffset;
else
if (bestTracksMatch != TrackCount && _config.noUnverifiedOutput)
SkipOutput = true;
int s1 = (int) Math.Min(count, Math.Max(0, 450 * 588 - _arOffsetRange - (int)currentOffset));
int s2 = (int) Math.Min(count, Math.Max(0, 451 * 588 + _arOffsetRange - (int)currentOffset));
if ( s1 < s2 )
fixed (uint* FrameCRCs = _tracks[iTrack].OffsetedFrame450CRC)
for (int sj = s1; sj < s2; sj++)
{
int magicFrameOffsetBase = (int)currentOffset + sj - 450 * 588 + 1;
for (int oi = -_arOffsetRange; oi <= _arOffsetRange; oi++)
{
int magicFrameOffset = magicFrameOffsetBase + oi;
if (magicFrameOffset > 0 && magicFrameOffset <= 588)
FrameCRCs[_arOffsetRange - oi] += (uint)(samples[sj] * magicFrameOffset);
}
}
int magicFrameOffset = (int)currentOffset + sj - 450 * 588 + 1;
int firstOffset = Math.Max(-_arOffsetRange, 1 - magicFrameOffset);
int lastOffset = Math.Min(_arOffsetRange, 588 - magicFrameOffset);
for (int oi = firstOffset; oi <= lastOffset; oi++)
FrameCRCs[_arOffsetRange - oi] += (uint)(samples[sj] * (magicFrameOffset + oi));