mirror of
https://github.com/claunia/cuetools.net.git
synced 2025-12-16 18:14:25 +00:00
80 lines
2.7 KiB
C#
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));
|