Check if the header is TTA1 before parsing

This commit is contained in:
Stephen F. Booth 2012-02-04 08:39:45 -05:00 committed by Lukáš Lalinský
parent f59c3b67aa
commit 23c86cf27d

View File

@ -118,19 +118,26 @@ void TrueAudio::Properties::read()
int pos = 3;
d->version = d->data[pos] - '0';
pos += 1 + 2;
pos += 1;
d->channels = d->data.mid(pos, 2).toShort(false);
pos += 2;
// According to http://en.true-audio.com/TTA_Lossless_Audio_Codec_-_Format_Description
// TTA2 headers are in development, and have a different format
if(1 == d->version) {
// Skip the audio format
pos += 2;
d->bitsPerSample = d->data.mid(pos, 2).toShort(false);
pos += 2;
d->channels = d->data.mid(pos, 2).toShort(false);
pos += 2;
d->sampleRate = d->data.mid(pos, 4).toUInt(false);
pos += 4;
d->bitsPerSample = d->data.mid(pos, 2).toShort(false);
pos += 2;
unsigned long samples = d->data.mid(pos, 4).toUInt(false);
d->length = samples / d->sampleRate;
d->sampleRate = d->data.mid(pos, 4).toUInt(false);
pos += 4;
d->bitrate = d->length > 0 ? ((d->streamLength * 8L) / d->length) / 1000 : 0;
uint sampleFrames = d->data.mid(pos, 4).toUInt(false);
d->length = d->sampleRate > 0 ? sampleFrames / d->sampleRate : 0;
d->bitrate = d->length > 0 ? ((d->streamLength * 8L) / d->length) / 1000 : 0;
}
}