diff options
author | Andreas Huber <andih@google.com> | 2010-03-24 09:24:40 -0700 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2010-03-24 09:42:21 -0700 |
commit | e966fb05c7e67a7f5dce65024de60aac83eb6f81 (patch) | |
tree | eb2d5a310a97150bf131d427c5c30ff4097fcc9d /media/libstagefright/AwesomePlayer.cpp | |
parent | 9584a0726582b6b7603032870c62b4fccd5ce076 (diff) | |
download | frameworks_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.cpp | 23 |
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); |