diff options
author | Andreas Huber <andih@google.com> | 2011-03-25 15:38:34 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2011-03-25 15:38:34 -0700 |
commit | 2fee96bcc057d9b5a9ac912af79fd838f5a42964 (patch) | |
tree | e1cf3b6b6961abfd21cef941087c79c4b72e6ae5 /media | |
parent | c8c78eed52148441a4a549a9a19914bbbde6ad17 (diff) | |
parent | 1457ef74d49ee56097ad97cc078e898326beb7db (diff) | |
download | frameworks_base-2fee96bcc057d9b5a9ac912af79fd838f5a42964.zip frameworks_base-2fee96bcc057d9b5a9ac912af79fd838f5a42964.tar.gz frameworks_base-2fee96bcc057d9b5a9ac912af79fd838f5a42964.tar.bz2 |
am 1457ef74: Merge "Make sure we post a video event when seeking after seeing video EOS before." into honeycomb-mr1
* commit '1457ef74d49ee56097ad97cc078e898326beb7db':
Make sure we post a video event when seeking after seeing video EOS before.
Diffstat (limited to 'media')
-rw-r--r-- | media/libstagefright/AwesomePlayer.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index 435a1b0..37a93a4 100644 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -575,7 +575,7 @@ void AwesomePlayer::onVideoLagUpdate() { int64_t audioTimeUs = mAudioPlayer->getMediaTimeUs(); int64_t videoLateByUs = audioTimeUs - mVideoTimeUs; - if (videoLateByUs > 300000ll) { + if (!(mFlags & VIDEO_AT_EOS) && videoLateByUs > 300000ll) { LOGV("video late by %lld ms.", videoLateByUs / 1000ll); notifyListener_l( @@ -1052,7 +1052,8 @@ status_t AwesomePlayer::getPosition(int64_t *positionUs) { } else if (mSeeking != NO_SEEK) { *positionUs = mSeekTimeUs; - } else if (mVideoSource != NULL) { + } else if (mVideoSource != NULL + && (mAudioPlayer == NULL || !(mFlags & VIDEO_AT_EOS))) { Mutex::Autolock autoLock(mMiscStateLock); *positionUs = mVideoTimeUs; } else if (mAudioPlayer != NULL) { @@ -1094,6 +1095,14 @@ status_t AwesomePlayer::seekTo_l(int64_t timeUs) { play_l(); } + if ((mFlags & PLAYING) && mVideoSource != NULL && (mFlags & VIDEO_AT_EOS)) { + // Video playback completed before, there's no pending + // video event right now. In order for this new seek + // to be honored, we need to post one. + + postVideoEvent_l(); + } + mSeeking = SEEK; mSeekNotificationSent = false; mSeekTimeUs = timeUs; @@ -1277,6 +1286,7 @@ void AwesomePlayer::finishSeekIfNecessary(int64_t videoTimeUs) { mAudioPlayer->seekTo(videoTimeUs < 0 ? mSeekTimeUs : videoTimeUs); mWatchForAudioSeekComplete = true; + mWatchForAudioEOS = true; } else if (!mSeekNotificationSent) { // If we're playing video only, report seek complete now, // otherwise audio player will notify us later. @@ -1367,6 +1377,11 @@ void AwesomePlayer::onVideoEvent() { } finishSeekIfNecessary(-1); + if (mAudioPlayer != NULL + && !(mFlags & (AUDIO_RUNNING | SEEK_PREVIEW))) { + startAudioPlayer_l(); + } + mFlags |= VIDEO_AT_EOS; postStreamDoneEvent_l(err); return; |