From e26275bdacc7dda736001e1580f8ef70647392e5 Mon Sep 17 00:00:00 2001 From: Bryan Mawhinney Date: Tue, 18 Jan 2011 19:12:21 +0000 Subject: [PATCH] Don't report 100% buffered when the stream ends prematurely. Change-Id: Ia4e80d02f28104427a3309e3d5b155faa5702757 --- media/libstagefright/AwesomePlayer.cpp | 13 +++++++++---- media/libstagefright/NuCachedSource2.cpp | 9 ++++----- media/libstagefright/include/NuCachedSource2.h | 4 ++-- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index 4cfe28ec37c9c..49d05eda23482 100644 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -520,8 +520,10 @@ bool AwesomePlayer::getCachedDuration_l(int64_t *durationUs, bool *eos) { *durationUs = mRTSPController->getQueueDurationUs(eos); return true; } else if (mCachedSource != NULL && getBitrate(&bitrate)) { - size_t cachedDataRemaining = mCachedSource->approxDataRemaining(eos); + status_t finalStatus; + size_t cachedDataRemaining = mCachedSource->approxDataRemaining(&finalStatus); *durationUs = cachedDataRemaining * 8000000ll / bitrate; + *eos = (finalStatus != OK); return true; } @@ -564,11 +566,14 @@ void AwesomePlayer::onBufferingUpdate() { mBufferingEventPending = false; if (mCachedSource != NULL) { - bool eos; - size_t cachedDataRemaining = mCachedSource->approxDataRemaining(&eos); + status_t finalStatus; + size_t cachedDataRemaining = mCachedSource->approxDataRemaining(&finalStatus); + bool eos = (finalStatus != OK); if (eos) { - notifyListener_l(MEDIA_BUFFERING_UPDATE, 100); + if (finalStatus == ERROR_END_OF_STREAM) { + notifyListener_l(MEDIA_BUFFERING_UPDATE, 100); + } if (mFlags & PREPARING) { LOGV("cache has reached EOS, prepare is done."); finishAsyncPrepare_l(); diff --git a/media/libstagefright/NuCachedSource2.cpp b/media/libstagefright/NuCachedSource2.cpp index 9017921df2c0f..20f16555517a1 100644 --- a/media/libstagefright/NuCachedSource2.cpp +++ b/media/libstagefright/NuCachedSource2.cpp @@ -393,13 +393,13 @@ size_t NuCachedSource2::cachedSize() { return mCacheOffset + mCache->totalSize(); } -size_t NuCachedSource2::approxDataRemaining(bool *eos) { +size_t NuCachedSource2::approxDataRemaining(status_t *finalStatus) { Mutex::Autolock autoLock(mLock); - return approxDataRemaining_l(eos); + return approxDataRemaining_l(finalStatus); } -size_t NuCachedSource2::approxDataRemaining_l(bool *eos) { - *eos = (mFinalStatus != OK); +size_t NuCachedSource2::approxDataRemaining_l(status_t *finalStatus) { + *finalStatus = mFinalStatus; off64_t lastBytePosCached = mCacheOffset + mCache->totalSize(); if (mLastAccessPos < lastBytePosCached) { return lastBytePosCached - mLastAccessPos; @@ -488,4 +488,3 @@ String8 NuCachedSource2::getUri() { return mSource->getUri(); } } // namespace android - diff --git a/media/libstagefright/include/NuCachedSource2.h b/media/libstagefright/include/NuCachedSource2.h index aa320fc2bdccf..28840be37191a 100644 --- a/media/libstagefright/include/NuCachedSource2.h +++ b/media/libstagefright/include/NuCachedSource2.h @@ -43,7 +43,7 @@ struct NuCachedSource2 : public DataSource { //////////////////////////////////////////////////////////////////////////// size_t cachedSize(); - size_t approxDataRemaining(bool *eos); + size_t approxDataRemaining(status_t *finalStatus); void resumeFetchingIfNecessary(); @@ -92,7 +92,7 @@ private: ssize_t readInternal(off64_t offset, void *data, size_t size); status_t seekInternal_l(off64_t offset); - size_t approxDataRemaining_l(bool *eos); + size_t approxDataRemaining_l(status_t *finalStatus); void restartPrefetcherIfNecessary_l(bool ignoreLowWaterThreshold = false); DISALLOW_EVIL_CONSTRUCTORS(NuCachedSource2);