From aeda337c2fad2db2d25128c4bd68fd7c2c32c09f Mon Sep 17 00:00:00 2001 From: Wang Liyong Date: Fri, 13 Apr 2012 19:34:00 +0900 Subject: Fix for getPosition after seek When starting playback with a seek pending (calling seek before start) there is a brief period when the audioplayer returns an incorrect position (zero) This is caused by that mSeeking is set to false before the position in the audioplayer actually is updated. Change-Id: Iaec355c8fdfe589d9b826d20c2531034f2b4e6fb --- media/libstagefright/AudioPlayer.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/media/libstagefright/AudioPlayer.cpp b/media/libstagefright/AudioPlayer.cpp index 95441bc..1f9383b 100644 --- a/media/libstagefright/AudioPlayer.cpp +++ b/media/libstagefright/AudioPlayer.cpp @@ -102,7 +102,6 @@ status_t AudioPlayer::start(bool sourceAlreadyStarted) { MediaSource::ReadOptions options; if (mSeeking) { options.setSeekTo(mSeekTimeUs); - mSeeking = false; } mFirstBufferResult = mSource->read(&mFirstBuffer, &options); @@ -112,8 +111,25 @@ status_t AudioPlayer::start(bool sourceAlreadyStarted) { CHECK(mFirstBuffer == NULL); mFirstBufferResult = OK; mIsFirstBuffer = false; + + if (mSeeking) { + mPositionTimeRealUs = 0; + mPositionTimeMediaUs = mSeekTimeUs; + mSeeking = false; + } + } else { mIsFirstBuffer = true; + + if (mSeeking) { + mPositionTimeRealUs = 0; + if (mFirstBuffer == NULL || !mFirstBuffer->meta_data()->findInt64( + kKeyTime, &mPositionTimeMediaUs)) { + return UNKNOWN_ERROR; + } + mSeeking = false; + } + } sp format = mSource->getFormat(); -- cgit v1.1