NuPlayer:seek handling on kWhatAudioTearDown

Restart from previous seek time on kWhatAudioTearDown if mRenderer
didn't supply a useful positionUs.

Bug: 22662968
Change-Id: Ic21957f676ba25fb92694f71093bed60b630390b
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
index bfdb1ad..214315f 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
@@ -174,6 +174,7 @@
       mAudioDecoderGeneration(0),
       mVideoDecoderGeneration(0),
       mRendererGeneration(0),
+      mPreviousSeekTimeUs(0),
       mAudioEOS(false),
       mVideoEOS(false),
       mScanSourcesPending(false),
@@ -1114,7 +1115,9 @@
                 }
 
                 int64_t positionUs;
-                CHECK(msg->findInt64("positionUs", &positionUs));
+                if (!msg->findInt64("positionUs", &positionUs)) {
+                    positionUs = mPreviousSeekTimeUs;
+                }
                 performSeek(positionUs);
 
                 if (reason == Renderer::kDueToError && needsToCreateAudioDecoder) {
@@ -1857,6 +1860,7 @@
                 mAudioDecoder.get(), mVideoDecoder.get());
         return;
     }
+    mPreviousSeekTimeUs = seekTimeUs;
     mSource->seekTo(seekTimeUs);
     ++mTimedTextGeneration;
 
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.h b/media/libmediaplayerservice/nuplayer/NuPlayer.h
index 9456d5d..c9f0bbd 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayer.h
+++ b/media/libmediaplayerservice/nuplayer/NuPlayer.h
@@ -154,6 +154,8 @@
     int32_t mVideoDecoderGeneration;
     int32_t mRendererGeneration;
 
+    int64_t mPreviousSeekTimeUs;
+
     List<sp<Action> > mDeferredActions;
 
     bool mAudioEOS;
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
index e9f3799..2e0d0d3 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
@@ -1586,16 +1586,15 @@
     mAudioTornDown = true;
 
     int64_t currentPositionUs;
-    if (getCurrentPosition(&currentPositionUs) != OK) {
-        currentPositionUs = 0;
+    sp<AMessage> notify = mNotify->dup();
+    if (getCurrentPosition(&currentPositionUs) == OK) {
+        notify->setInt64("positionUs", currentPositionUs);
     }
 
     mAudioSink->stop();
     mAudioSink->flush();
 
-    sp<AMessage> notify = mNotify->dup();
     notify->setInt32("what", kWhatAudioTearDown);
-    notify->setInt64("positionUs", currentPositionUs);
     notify->setInt32("reason", reason);
     notify->post();
 }