Avoid reading an entire ID3v2 tag when skipping it.

This commit is contained in:
Tsuda Kageyu 2014-10-23 08:14:10 +09:00
parent 269e78f1a0
commit 73b9b9b58d

View File

@ -434,18 +434,18 @@ long MPEG::File::firstFrameOffset()
long position = 0;
if(ID3v2Tag()) {
position = d->ID3v2Location + ID3v2Tag()->header()->completeTagSize();
// Skip duplicate ID3v2 tags.
// Workaround for some faulty files that have duplicate ID3v2 tags.
// Combination of EAC and LAME creates such files when configured incorrectly.
position = d->ID3v2Location + ID3v2Tag()->header()->completeTagSize();
long location;
while((location = findID3v2(position)) >= 0) {
ID3v2::Tag dupTag(this, location);
position = location + dupTag.header()->completeTagSize();
seek(location);
const ID3v2::Header header(readBlock(ID3v2::Header::size()));
position = location + header.completeTagSize();
debug("MPEG::File::firstFrameOffset() - Duplicate ID3v2 tag found.");
}