From 3e0339f9ec42c2c31deb632254e9cc8a06d3db91 Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Wed, 23 Jun 2010 11:11:58 -0700 Subject: Fix a number of timestamp mismatches in the mp3 extractor and decoder that would lead to invalid reporting of the current playback time for mono and/or non-44100 kHz mp3s. Change-Id: I11abc05b62a958ffbc99ca997cd184a2f2199352 related-to-bug: 2667479 --- media/libstagefright/MP3Extractor.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'media/libstagefright/MP3Extractor.cpp') diff --git a/media/libstagefright/MP3Extractor.cpp b/media/libstagefright/MP3Extractor.cpp index f9251e1..69c3a72 100644 --- a/media/libstagefright/MP3Extractor.cpp +++ b/media/libstagefright/MP3Extractor.cpp @@ -634,6 +634,7 @@ status_t MP3Source::read( } size_t frame_size; + int bitrate; for (;;) { ssize_t n = mDataSource->readAt(mCurrentPos, buffer->data(), 4); if (n < 4) { @@ -646,7 +647,7 @@ status_t MP3Source::read( uint32_t header = U32_AT((const uint8_t *)buffer->data()); if ((header & kMask) == (mFixedHeader & kMask) - && get_mp3_frame_size(header, &frame_size)) { + && get_mp3_frame_size(header, &frame_size, NULL, NULL, &bitrate)) { break; } @@ -683,7 +684,7 @@ status_t MP3Source::read( buffer->meta_data()->setInt64(kKeyTime, mCurrentTimeUs); mCurrentPos += frame_size; - mCurrentTimeUs += 1152 * 1000000 / 44100; + mCurrentTimeUs += frame_size * 8000ll / bitrate; *out = buffer; -- cgit v1.1