summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2010-10-20 15:13:09 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-10-20 15:13:09 -0700
commit642a8eac64b7370fd874c4d34654583c50c0850c (patch)
treee27478a9e052bd2ab0cdaa473860b25f90ae4ded
parenta3c740f68f30f3f929cdc8d6ad9ab562502bdff0 (diff)
parent6a05c9e912aeb8bfe1ef99516def91a177a481b6 (diff)
downloadframeworks_av-642a8eac64b7370fd874c4d34654583c50c0850c.zip
frameworks_av-642a8eac64b7370fd874c4d34654583c50c0850c.tar.gz
frameworks_av-642a8eac64b7370fd874c4d34654583c50c0850c.tar.bz2
Merge "If we basically finished the preparation phase and are only buffering enough data to start playback, cancel this early on reset()."
-rw-r--r--media/libstagefright/AwesomePlayer.cpp12
-rw-r--r--media/libstagefright/include/AwesomePlayer.h5
2 files changed, 15 insertions, 2 deletions
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp
index d172eef..a86ec7f 100644
--- a/media/libstagefright/AwesomePlayer.cpp
+++ b/media/libstagefright/AwesomePlayer.cpp
@@ -412,6 +412,12 @@ void AwesomePlayer::reset_l() {
LOGI("interrupting the connection process");
mConnectingDataSource->disconnect();
}
+
+ if (mFlags & PREPARING_CONNECTED) {
+ // We are basically done preparing, we're just buffering
+ // enough data to start playback, we can safely interrupt that.
+ finishAsyncPrepare_l();
+ }
}
while (mFlags & PREPARING) {
@@ -1625,7 +1631,7 @@ void AwesomePlayer::abortPrepare(status_t err) {
}
mPrepareResult = err;
- mFlags &= ~(PREPARING|PREPARE_CANCELLED);
+ mFlags &= ~(PREPARING|PREPARE_CANCELLED|PREPARING_CONNECTED);
mAsyncPrepareEvent = NULL;
mPreparedCondition.broadcast();
}
@@ -1673,6 +1679,8 @@ void AwesomePlayer::onPrepareAsyncEvent() {
}
}
+ mFlags |= PREPARING_CONNECTED;
+
if (mCachedSource != NULL || mRTSPController != NULL) {
postBufferingEvent_l();
} else {
@@ -1692,7 +1700,7 @@ void AwesomePlayer::finishAsyncPrepare_l() {
}
mPrepareResult = OK;
- mFlags &= ~(PREPARING|PREPARE_CANCELLED);
+ mFlags &= ~(PREPARING|PREPARE_CANCELLED|PREPARING_CONNECTED);
mFlags |= PREPARED;
mAsyncPrepareEvent = NULL;
mPreparedCondition.broadcast();
diff --git a/media/libstagefright/include/AwesomePlayer.h b/media/libstagefright/include/AwesomePlayer.h
index 0837be8..f4a2024 100644
--- a/media/libstagefright/include/AwesomePlayer.h
+++ b/media/libstagefright/include/AwesomePlayer.h
@@ -111,6 +111,11 @@ private:
AUDIO_AT_EOS = 256,
VIDEO_AT_EOS = 512,
AUTO_LOOPING = 1024,
+
+ // We are basically done preparing but are currently buffering
+ // sufficient data to begin playback and finish the preparation phase
+ // for good.
+ PREPARING_CONNECTED = 2048,
};
mutable Mutex mLock;