Support for wierd CDs with two data tracks before audio.

This commit is contained in:
chudov
2011-06-03 19:51:19 +00:00
parent 020610a2ea
commit 473d23e0b0
6 changed files with 296 additions and 21 deletions

View File

@@ -3131,16 +3131,39 @@ string status = processor.Go();
}
// use data track length from log
if (tocFromLog != null && tocFromLog.AudioTracks == _toc.AudioTracks)
if (tocFromLog != null)
{
if (tocFromLog.TrackCount == tocFromLog.AudioTracks + 1 && !tocFromLog[tocFromLog.TrackCount].IsAudio)
if (tocFromLog.AudioTracks == _toc.AudioTracks
&& tocFromLog.TrackCount == tocFromLog.AudioTracks + 1
&& !tocFromLog[tocFromLog.TrackCount].IsAudio)
{
DataTrackLength = tocFromLog[tocFromLog.TrackCount].Length;
_toc[_toc.TrackCount].Start = tocFromLog[_toc.TrackCount].Start;
_toc[_toc.TrackCount][0].Start = tocFromLog[_toc.TrackCount].Start;
_toc[_toc.TrackCount][1].Start = tocFromLog[_toc.TrackCount].Start;
}
else if (tocFromLog.TrackCount == _toc.TrackCount
if (_toc.TrackCount == _toc.AudioTracks
&& tocFromLog.TrackCount == tocFromLog.AudioTracks
&& tocFromLog.TrackCount > _toc.TrackCount)
{
int dtracks = tocFromLog.TrackCount - _toc.TrackCount;
bool matches = true;
for (int iTrack = 1; iTrack <= _toc.TrackCount; iTrack++)
if (tocFromLog[iTrack + dtracks].Length != _toc[iTrack].Length)
matches = false;
if (matches)
{
for (int iTrack = 1; iTrack <= dtracks; iTrack++)
{
_toc.InsertTrack(new CDTrack((uint)iTrack, 0, 0, false, false));
tocFromLog[iTrack].IsAudio = false;
}
tocFromLog.FirstAudio += dtracks;
tocFromLog.AudioTracks -= (uint) dtracks;
}
}
if (tocFromLog.AudioTracks == _toc.AudioTracks
&& tocFromLog.TrackCount == _toc.TrackCount
&& tocFromLog.FirstAudio == _toc.FirstAudio
&& tocFromLog.TrackCount == tocFromLog.FirstAudio + tocFromLog.AudioTracks - 1)
{
@@ -3160,23 +3183,6 @@ string status = processor.Go();
}
}
// use data track length from log
if (tocFromLog != null
&& _toc.TrackCount == _toc.AudioTracks
&& tocFromLog.TrackCount == tocFromLog.AudioTracks
&& tocFromLog.TrackCount == _toc.TrackCount + 1)
{
bool matches = true;
for (int iTrack = 1; iTrack <= _toc.TrackCount; iTrack++)
if (tocFromLog[iTrack + 1].Length != _toc[iTrack].Length)
matches = false;
if (matches)
{
_toc.InsertTrack(new CDTrack(1, 0, 0, false, false));
DataTrackLength = tocFromLog[1].Length;
}
}
// use data track length range from cddbId
if (DataTrackLength == 0 && _cddbDiscIdTag != null)
{