Commit 648f48ce authored by Warren Dukes's avatar Warren Dukes

handle invalid xing tags better.

git-svn-id: https://svn.musicpd.org/mpd/trunk@4866 09075e82-0dd4-0310-85a5-a0d7c8717e4f
parent 4d6db2eb
...@@ -648,22 +648,9 @@ static int decodeFirstFrame(mp3DecodeData * data, DecoderControl * dc, ...@@ -648,22 +648,9 @@ static int decodeFirstFrame(mp3DecodeData * data, DecoderControl * dc,
ptr = data->stream.anc_ptr; ptr = data->stream.anc_ptr;
bitlen = data->stream.anc_bitlen; bitlen = data->stream.anc_bitlen;
if (parse_xing(&xing, &ptr, &bitlen)) { /*
data->foundXing = 1; * Attempt to calulcate the length of the song from filesize
data->muteFrame = MUTEFRAME_SKIP; */
if (parse_lame(&lame, &ptr, &bitlen)) {
data->dropSamplesAtStart = lame.encoderDelay + DECODERDELAY;
data->dropSamplesAtEnd = lame.encoderPadding;
}
if (xing.flags & XING_FRAMES) {
mad_timer_t duration = data->frame.header.duration;
mad_timer_multiply(&duration, xing.frames);
data->totalTime = ((float)mad_timer_count(duration, MAD_UNITS_MILLISECONDS)) / 1000;
data->maxFrames = xing.frames;
}
} else {
size_t offset = data->inStream->offset; size_t offset = data->inStream->offset;
mad_timer_t duration = data->frame.header.duration; mad_timer_t duration = data->frame.header.duration;
float frameTime = ((float)mad_timer_count(duration, MAD_UNITS_MILLISECONDS)) / 1000; float frameTime = ((float)mad_timer_count(duration, MAD_UNITS_MILLISECONDS)) / 1000;
...@@ -680,8 +667,29 @@ static int decodeFirstFrame(mp3DecodeData * data, DecoderControl * dc, ...@@ -680,8 +667,29 @@ static int decodeFirstFrame(mp3DecodeData * data, DecoderControl * dc,
data->maxFrames = FRAMES_CUSHION; data->maxFrames = FRAMES_CUSHION;
data->totalTime = 0; data->totalTime = 0;
} }
/*
* if an xing tag exists, use that!
*/
if (parse_xing(&xing, &ptr, &bitlen)) {
data->foundXing = 1;
data->muteFrame = MUTEFRAME_SKIP;
if (parse_lame(&lame, &ptr, &bitlen)) {
data->dropSamplesAtStart = lame.encoderDelay + DECODERDELAY;
data->dropSamplesAtEnd = lame.encoderPadding;
} }
if ((xing.flags & XING_FRAMES) && xing.frames) {
mad_timer_t duration = data->frame.header.duration;
mad_timer_multiply(&duration, xing.frames);
data->totalTime = ((float)mad_timer_count(duration, MAD_UNITS_MILLISECONDS)) / 1000;
data->maxFrames = xing.frames;
}
}
if (!data->maxFrames) return -1;
data->frameOffset = xmalloc(sizeof(long) * data->maxFrames); data->frameOffset = xmalloc(sizeof(long) * data->maxFrames);
data->times = xmalloc(sizeof(mad_timer_t) * data->maxFrames); data->times = xmalloc(sizeof(mad_timer_t) * data->maxFrames);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment