summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/AwesomePlayer.cpp
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2010-03-24 09:24:40 -0700
committerAndreas Huber <andih@google.com>2010-03-24 09:42:21 -0700
commite966fb05c7e67a7f5dce65024de60aac83eb6f81 (patch)
treeeb2d5a310a97150bf131d427c5c30ff4097fcc9d /media/libstagefright/AwesomePlayer.cpp
parent9584a0726582b6b7603032870c62b4fccd5ce076 (diff)
downloadframeworks_av-e966fb05c7e67a7f5dce65024de60aac83eb6f81.zip
frameworks_av-e966fb05c7e67a7f5dce65024de60aac83eb6f81.tar.gz
frameworks_av-e966fb05c7e67a7f5dce65024de60aac83eb6f81.tar.bz2
Enable early termination of the prefetcher's preparation phase.
Change-Id: I929ac9b0fd0b6ebd98c1bc56be18ac8f8378d48c related-to-bug: 2537407
Diffstat (limited to 'media/libstagefright/AwesomePlayer.cpp')
-rw-r--r--media/libstagefright/AwesomePlayer.cpp23
1 files changed, 21 insertions, 2 deletions
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp
index 407fd57..05e23d1 100644
--- a/media/libstagefright/AwesomePlayer.cpp
+++ b/media/libstagefright/AwesomePlayer.cpp
@@ -1106,6 +1106,13 @@ void AwesomePlayer::abortPrepare(status_t err) {
mPreparedCondition.broadcast();
}
+// static
+bool AwesomePlayer::ContinuePreparation(void *cookie) {
+ AwesomePlayer *me = static_cast<AwesomePlayer *>(cookie);
+
+ return (me->mFlags & PREPARE_CANCELLED) == 0;
+}
+
void AwesomePlayer::onPrepareAsyncEvent() {
sp<Prefetcher> prefetcher;
@@ -1161,10 +1168,22 @@ void AwesomePlayer::onPrepareAsyncEvent() {
}
LOGI("calling prefetcher->prepare()");
- prefetcher->prepare();
- LOGV("prefetcher is done preparing");
+ status_t result =
+ prefetcher->prepare(&AwesomePlayer::ContinuePreparation, this);
prefetcher.clear();
+
+ if (result == OK) {
+ LOGV("prefetcher is done preparing");
+ } else {
+ Mutex::Autolock autoLock(mLock);
+
+ CHECK_EQ(result, -EINTR);
+
+ LOGI("prefetcher->prepare() was cancelled early.");
+ abortPrepare(UNKNOWN_ERROR);
+ return;
+ }
}
Mutex::Autolock autoLock(mLock);