summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2011-03-25 15:38:34 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2011-03-25 15:38:34 -0700
commit2fee96bcc057d9b5a9ac912af79fd838f5a42964 (patch)
treee1cf3b6b6961abfd21cef941087c79c4b72e6ae5 /media
parentc8c78eed52148441a4a549a9a19914bbbde6ad17 (diff)
parent1457ef74d49ee56097ad97cc078e898326beb7db (diff)
downloadframeworks_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.cpp19
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;