Make sure we post a video event when seeking after seeing video EOS before.

Change-Id: I513bf94c0732a85324160977ea5723d8aafd6aba
related-to-bug: 3316960
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 @@
     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 @@
     }
     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 @@
         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 @@
 
         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 @@
                 }
                 finishSeekIfNecessary(-1);
 
+                if (mAudioPlayer != NULL
+                        && !(mFlags & (AUDIO_RUNNING | SEEK_PREVIEW))) {
+                    startAudioPlayer_l();
+                }
+
                 mFlags |= VIDEO_AT_EOS;
                 postStreamDoneEvent_l(err);
                 return;