diff options
author | Marco Nelissen <marcone@google.com> | 2013-09-30 17:10:21 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-09-30 17:10:21 -0700 |
commit | d990e7b27b1984fcaee6c37005056db9ca5ca3c7 (patch) | |
tree | e0bacdb7c6dc921def7e69be3c0fb7521679eb05 | |
parent | 934d140fb9993a36db5759c0dab08ff991894249 (diff) | |
parent | 3d97e23fcd78f752443cb6c30a1ee39f49f1f987 (diff) | |
download | frameworks_av-d990e7b27b1984fcaee6c37005056db9ca5ca3c7.zip frameworks_av-d990e7b27b1984fcaee6c37005056db9ca5ca3c7.tar.gz frameworks_av-d990e7b27b1984fcaee6c37005056db9ca5ca3c7.tar.bz2 |
am 3d97e23f: Merge "Prevent onPrepared callback from being called twice" into klp-dev
* commit '3d97e23fcd78f752443cb6c30a1ee39f49f1f987':
Prevent onPrepared callback from being called twice
-rw-r--r-- | media/libstagefright/AwesomePlayer.cpp | 36 | ||||
-rw-r--r-- | media/libstagefright/include/AwesomePlayer.h | 2 |
2 files changed, 21 insertions, 17 deletions
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index 9b0c69a..3b516af 100644 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -259,6 +259,7 @@ void AwesomePlayer::cancelPlayerEvents(bool keepNotifications) { mQueue.cancelEvent(mBufferingEvent->eventID()); mBufferingEventPending = false; + mAudioTearDown = false; } } @@ -2308,6 +2309,7 @@ void AwesomePlayer::abortPrepare(status_t err) { modifyFlags((PREPARING|PREPARE_CANCELLED|PREPARING_CONNECTED), CLEAR); mAsyncPrepareEvent = NULL; mPreparedCondition.broadcast(); + mAudioTearDown = false; } // static @@ -2381,6 +2383,20 @@ void AwesomePlayer::finishAsyncPrepare_l() { modifyFlags(PREPARED, SET); mAsyncPrepareEvent = NULL; mPreparedCondition.broadcast(); + + if (mAudioTearDown) { + if (mPrepareResult == OK) { + if (mExtractorFlags & MediaExtractor::CAN_SEEK) { + seekTo_l(mAudioTearDownPosition); + } + + if (mAudioTearDownWasPlaying) { + modifyFlags(CACHE_UNDERRUN, CLEAR); + play_l(); + } + } + mAudioTearDown = false; + } } uint32_t AwesomePlayer::flags() const { @@ -2798,7 +2814,7 @@ void AwesomePlayer::onAudioTearDownEvent() { ALOGV("onAudioTearDownEvent"); // stream info is cleared by reset_l() so copy what we need - const bool wasPlaying = (mFlags & PLAYING); + mAudioTearDownWasPlaying = (mFlags & PLAYING); KeyedVector<String8, String8> uriHeaders(mUriHeaders); sp<DataSource> fileSource(mFileSource); @@ -2807,8 +2823,7 @@ void AwesomePlayer::onAudioTearDownEvent() { mStatsLock.unlock(); // get current position so we can start recreated stream from here - int64_t position = 0; - getPosition(&position); + getPosition(&mAudioTearDownPosition); // Reset and recreate reset_l(); @@ -2832,21 +2847,8 @@ void AwesomePlayer::onAudioTearDownEvent() { mAudioTearDown = true; mIsAsyncPrepare = true; - // Call parepare for the host decoding + // Call prepare for the host decoding beginPrepareAsync_l(); - - if (mPrepareResult == OK) { - if (mExtractorFlags & MediaExtractor::CAN_SEEK) { - seekTo_l(position); - } - - if (wasPlaying) { - modifyFlags(CACHE_UNDERRUN, CLEAR); - play_l(); - } - } - - mAudioTearDown = false; } } // namespace android diff --git a/media/libstagefright/include/AwesomePlayer.h b/media/libstagefright/include/AwesomePlayer.h index b001cf4..271df8e 100644 --- a/media/libstagefright/include/AwesomePlayer.h +++ b/media/libstagefright/include/AwesomePlayer.h @@ -342,6 +342,8 @@ private: bool mOffloadAudio; bool mAudioTearDown; + bool mAudioTearDownWasPlaying; + int64_t mAudioTearDownPosition; status_t setVideoScalingMode(int32_t mode); status_t setVideoScalingMode_l(int32_t mode); |