From c23296ef2d168f29bcfc3c93d33f78e1c393177a Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Wed, 25 Aug 2010 12:31:48 -0700 Subject: Ensure that buffering updates eventually hit 100% after we download everything. Change-Id: I43bb85b1128fa9c1bc8632970d7101006393bcc8 related-to-bug: 2844095 --- media/libstagefright/AwesomePlayer.cpp | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) (limited to 'media/libstagefright') diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index 11fdf56..a0cd5c3 100644 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -458,27 +458,34 @@ void AwesomePlayer::onBufferingUpdate() { return; } + bool eos; + size_t cachedDataRemaining = mCachedSource->approxDataRemaining(&eos); + size_t lowWatermark = 400000; size_t highWatermark = 1000000; - off_t size; - if (mDurationUs >= 0 && mCachedSource->getSize(&size) == OK) { - int64_t bitrate = size * 8000000ll / mDurationUs; // in bits/sec + if (eos) { + notifyListener_l(MEDIA_BUFFERING_UPDATE, 100); + } else { + off_t size; + if (mDurationUs >= 0 && mCachedSource->getSize(&size) == OK) { + int64_t bitrate = size * 8000000ll / mDurationUs; // in bits/sec - size_t cachedSize = mCachedSource->cachedSize(); - int64_t cachedDurationUs = cachedSize * 8000000ll / bitrate; + size_t cachedSize = mCachedSource->cachedSize(); + int64_t cachedDurationUs = cachedSize * 8000000ll / bitrate; - double percentage = (double)cachedDurationUs / mDurationUs; + int percentage = 100.0 * (double)cachedDurationUs / mDurationUs; + if (percentage > 100) { + percentage = 100; + } - notifyListener_l(MEDIA_BUFFERING_UPDATE, percentage * 100.0); + notifyListener_l(MEDIA_BUFFERING_UPDATE, percentage); - lowWatermark = 2 * bitrate / 8; // 2 secs - highWatermark = 10 * bitrate / 8; // 10 secs + lowWatermark = 2 * bitrate / 8; // 2 secs + highWatermark = 10 * bitrate / 8; // 10 secs + } } - bool eos; - size_t cachedDataRemaining = mCachedSource->approxDataRemaining(&eos); - if ((mFlags & PLAYING) && !eos && (cachedDataRemaining < lowWatermark)) { LOGI("cache is running low (< %d) , pausing.", lowWatermark); mFlags |= CACHE_UNDERRUN; -- cgit v1.1