nuplayer: clear pending audio access unit on flush.

Also add flag to avoid reading on flush.

Bug: 18540219
Change-Id: I2fc351c32c87db9a8c8c2aad12ee2bd56a0370ab
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp
index 8112e9f..79b7a3c 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp
@@ -47,6 +47,7 @@
       mSource(source),
       mRenderer(renderer),
       mSkipRenderingUntilMediaTimeUs(-1ll),
+      mPaused(false),
       mBufferGeneration(0),
       mReachedEOS(true),
       mPendingAudioErr(OK),
@@ -105,16 +106,16 @@
     return generation != mBufferGeneration;
 }
 
-bool NuPlayer::DecoderPassThrough::isCacheFullOrEOS() const {
-    ALOGV("[%s] mCachedBytes = %zu, mReachedEOS = %d",
-            mComponentName.c_str(), mCachedBytes, mReachedEOS);
+bool NuPlayer::DecoderPassThrough::isDoneFetching() const {
+    ALOGV("[%s] mCachedBytes = %zu, mReachedEOS = %d mPaused = %d",
+            mComponentName.c_str(), mCachedBytes, mReachedEOS, mPaused);
 
-    return mCachedBytes >= kMaxCachedBytes || mReachedEOS;
+    return mCachedBytes >= kMaxCachedBytes || mReachedEOS || mPaused;
 }
 
 void NuPlayer::DecoderPassThrough::doRequestBuffers() {
     status_t err = OK;
-    while (!isCacheFullOrEOS()) {
+    while (!isDoneFetching()) {
         sp<AMessage> msg = new AMessage();
 
         err = fetchInputData(msg);
@@ -355,6 +356,8 @@
 }
 
 void NuPlayer::DecoderPassThrough::onResume(bool notifyComplete) {
+    mPaused = false;
+
     onRequestInputBuffers();
 
     if (notifyComplete) {
@@ -367,6 +370,9 @@
 void NuPlayer::DecoderPassThrough::onFlush(bool notifyComplete) {
     ++mBufferGeneration;
     mSkipRenderingUntilMediaTimeUs = -1;
+    mPendingAudioAccessUnit.clear();
+    mPendingAudioErr = OK;
+    mAggregateBuffer.clear();
 
     if (mRenderer != NULL) {
         mRenderer->flush(true /* audio */, notifyComplete);
@@ -374,6 +380,7 @@
     }
 
     if (notifyComplete) {
+        mPaused = true;
         sp<AMessage> notify = mNotify->dup();
         notify->setInt32("what", kWhatFlushCompleted);
         notify->post();