diff --git a/src/add-ons/kernel/file_systems/cdda/cdda.h b/src/add-ons/kernel/file_systems/cdda/cdda.h index 293a0d3260..3bcf00a572 100644 --- a/src/add-ons/kernel/file_systems/cdda/cdda.h +++ b/src/add-ons/kernel/file_systems/cdda/cdda.h @@ -1,5 +1,5 @@ /* - * Copyright 2007-2008, Axel Dörfler, axeld@pinc-software.de. + * Copyright 2007-2011, Axel Dörfler, axeld@pinc-software.de. * Distributed under the terms of the MIT License. */ #ifndef CDDA_H @@ -12,6 +12,7 @@ static const uint32 kFramesPerSecond = 75; static const uint32 kFramesPerMinute = kFramesPerSecond * 60; static const uint32 kFrameSize = 2352; +static const uint32 kDataTrackLeadGap = 11400; static const uint8 kMaxTracks = 0x63; struct cdtext { diff --git a/src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp b/src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp index ab28f8f9a5..1a78ad4b66 100644 --- a/src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp @@ -653,10 +653,10 @@ Volume::Mount(const char* device) // We do not seem to have an attribute file so this is probably the // first time this CD is inserted. In this case, try to read CD-Text // data. - if (read_cdtext(fDevice, text) != B_OK) - dprintf("CDDA: no CD-Text found.\n"); - else + if (read_cdtext(fDevice, text) == B_OK) doLookup = false; + else + TRACE(("CDDA: no CD-Text found.\n")); } else { doLookup = false; } @@ -677,6 +677,12 @@ Volume::Mount(const char* device) + next.second * kFramesPerSecond + next.frame - startFrame; + // Adjust length of the last audio track according to the Blue Book + // specification in case of an Enhanced CD + if (i + 1 < trackCount && is_data_track(toc->tracks[i + 1]) + && !is_data_track(toc->tracks[i])) + frames -= kDataTrackLeadGap; + totalFrames += frames; if (is_data_track(toc->tracks[i]))