diff options
author | Andreas Huber <andih@google.com> | 2010-10-20 15:13:09 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-10-20 15:13:09 -0700 |
commit | 642a8eac64b7370fd874c4d34654583c50c0850c (patch) | |
tree | e27478a9e052bd2ab0cdaa473860b25f90ae4ded | |
parent | a3c740f68f30f3f929cdc8d6ad9ab562502bdff0 (diff) | |
parent | 6a05c9e912aeb8bfe1ef99516def91a177a481b6 (diff) | |
download | frameworks_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.cpp | 12 | ||||
-rw-r--r-- | media/libstagefright/include/AwesomePlayer.h | 5 |
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; |