summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
Diffstat (limited to 'media')
-rw-r--r--media/libstagefright/NuCachedSource2.cpp18
-rw-r--r--media/libstagefright/include/NuCachedSource2.h11
2 files changed, 23 insertions, 6 deletions
diff --git a/media/libstagefright/NuCachedSource2.cpp b/media/libstagefright/NuCachedSource2.cpp
index f29e7fb..c02b7f3 100644
--- a/media/libstagefright/NuCachedSource2.cpp
+++ b/media/libstagefright/NuCachedSource2.cpp
@@ -178,7 +178,8 @@ NuCachedSource2::NuCachedSource2(const sp<DataSource> &source)
mCacheOffset(0),
mFinalStatus(OK),
mLastAccessPos(0),
- mFetching(true) {
+ mFetching(true),
+ mLastFetchTimeUs(-1) {
mLooper->registerHandler(mReflector);
mLooper->start();
@@ -259,10 +260,21 @@ void NuCachedSource2::onFetch() {
mFetching = false;
}
- if (mFetching) {
+ bool keepAlive =
+ !mFetching
+ && mFinalStatus == OK
+ && ALooper::GetNowUs() >= mLastFetchTimeUs + kKeepAliveIntervalUs;
+
+ if (mFetching || keepAlive) {
+ if (keepAlive) {
+ LOG(INFO) << "Keep alive";
+ }
+
fetchInternal();
- if (mCache->totalSize() >= kHighWaterThreshold) {
+ mLastFetchTimeUs = ALooper::GetNowUs();
+
+ if (mFetching && mCache->totalSize() >= kHighWaterThreshold) {
LOG(INFO) << "Cache full, done prefetching for now";
mFetching = false;
}
diff --git a/media/libstagefright/include/NuCachedSource2.h b/media/libstagefright/include/NuCachedSource2.h
index c30f029..f73e837 100644
--- a/media/libstagefright/include/NuCachedSource2.h
+++ b/media/libstagefright/include/NuCachedSource2.h
@@ -49,9 +49,13 @@ private:
friend struct AHandlerReflector<NuCachedSource2>;
enum {
- kPageSize = 16384,
- kHighWaterThreshold = 3 * 1024 * 1024,
- kLowWaterThreshold = 512 * 1024,
+ kPageSize = 16384,
+ kHighWaterThreshold = 3 * 1024 * 1024,
+ kLowWaterThreshold = 512 * 1024,
+
+ // Read data after a 15 sec timeout whether we're actively
+ // fetching or not.
+ kKeepAliveIntervalUs = 15000000,
};
enum {
@@ -73,6 +77,7 @@ private:
off_t mLastAccessPos;
sp<AMessage> mAsyncResult;
bool mFetching;
+ int64_t mLastFetchTimeUs;
void onMessageReceived(const sp<AMessage> &msg);
void onFetch();